问题描述
在Google Kubernetes Engine (GKE) 上托管的 API 服务通过记录每个请求的结构化元数据(包括状态码)来生成日志。用户希望创建一个可用性服务水平指标 (SLI),用于衡量正常事件与所有事件的比例。因此,他们需要遍历日志,按状态码分类好坏事件。虽然对于某些服务(如 App Engine 或使用 Istio 托管的服务)已经内置了可用性指标,但在这种情况下(没有任何 API 网关在前面),用户不确定是否能够仅通过日志基本的指标语法来实现这样的逻辑。
解决方案
请注意以下操作可能会因 GCP 版本变化而有所不同。确保备份数据和配置,以免数据丢失。
使用日志筛选器创建日志基本的可用性指标
您可以使用日志筛选器从日志中提取状态码,并使用这些值来计算正常事件与所有事件的比例。以下是如何设置用于此目的的基于日志的指标的示例步骤:
-
打开 Google Cloud 控制台的 Cloud Logging 页面。
-
选择您 GKE 托管的 API 的日志组。
-
点击 “创建指标” 按钮。
-
在 “创建指标” 对话框中,为指标指定一个名称(例如 “API 可用性”)和一个描述(可选)。
-
在 “筛选器” 字段中,输入一个筛选表达式,以从日志中提取状态码。例如,您可以使用以下表达式从日志的 “status_code” 字段中提取状态码:
resource.type="gke_container" AND jsonPayload.status_code
-
在 “聚合” 字段中,指定如何聚合提取的值。您可以使用 “COUNT” 聚合来计算每个状态码的出现次数。
-
点击 “创建” 按钮以创建指标。
一旦创建了指标,您可以使用 Cloud Monitoring 的用户界面或 API 查看指标,并随时追踪您的 API 的可用性。您还可以设置警报,以便在可用性低于某个阈值时收到通知。
请注意,此方法依赖于您的日志中包含适当的结构化数据,以便能够准确地提取和分析状态码。确保您的日志格式和字段命名是一致的。
使用自定义脚本管理可用性指标
使用脚本可能需要更多的工作,并且需要确保脚本的正确性和稳定性。
另一种方法是编写自定义脚本来管理您的 API 的可用性指标。您可以使用脚本来遍历日志、提取状态码并计算指标。以下是一个简单的示例 bash 脚本,可以用来实现这个目标:
#!/bin/bash
# 获取日志中的所有状态码
status_codes=$(gcloud logging read "resource.type=gke_container AND jsonPayload.status_code" --format="value(jsonPayload.status_code)")
# 计算正常事件和所有事件的比例
total_events=$(echo "$status_codes" | wc -l)
good_events=$(echo "$status_codes" | grep "200" | wc -l)
availability=$(echo "scale=2; $good_events / $total_events" | bc)
echo "API 可用性: $availability"
在这个示例中,我们首先使用 gcloud logging read
命令来获取所有日志中的状态码,并将其保存在 status_codes
变量中。然后,我们分别计算正常事件和所有事件的数量,通过筛选状态码为 “200” 的行,并使用 bc
命令计算比例。最终,我们将计算出的可用性指标打印出来。
请注意,这只是一个简单的示例脚本,实际上您可能需要根据您的需求进行更复杂的计算和处理。
总结
在 GKE 上托管的 API 服务的可用性指标可以通过日志筛选器提取状态码并计算正常事件与所有事件的比例来实现。您可以使用 Cloud Monitoring 来设置和查看这些指标,也可以使用自定义脚本进行管理和计算。根据您的实际需求,选择适合您的方法来监控和衡量您的 API 的可用性。