集群监控准则

概览

本指南提供了有关要监控的内容以及如何监控 Apigee Hybrid 部署的准则。它适用于 Hybrid 集群管理员和组织管理员。

如果您刚开始接触 Google Cloud Monitoring,请参阅 Google Cloud Monitoring 文档:使用 Metrics Explorer 创建图表提醒的工作原理

Apigee Hybrid 集群会提供 SLI(服务等级指标)指标,帮助您了解应用和系统服务在任何给定时间的运行情况。您可以查看可用指标的完整列表。

Google Cloud Monitoring 使用资源类型来标识每个 SLI 指标。有三种常见的资源类型用于所有 Apigee Hybrid 指标。

  • k8s_container,用于系统级指标。
  • Proxy,用于 Apigee API 代理指标。
  • Target,用于 Apigee API 目标指标

资源类型具有适用于其所有关联指标的通用标签。例如,除了指标标签外,所有具有 k8s_container 资源类型的指标还可以使用 cluster_namepod_namecontainer_name 标签。为有效地监控集群健康状况和性能,您应该使用资源类型标签和指标标签的组合。

提醒阈值:在理想情况下,提醒阈值会很明显,并且提供的文档会列出应触发提醒的值。实际上,Apigee 定义可接受的性能以及服务和基础架构的危险资源利用率是什么不那么明确。提醒阈值很大程度上因特定流量模式和 SLO/SLA 协议而异。

提醒阈值的优化和确定是一个持续的过程,因为它可能会随服务和基础设施的使用情况而变化。将警告和严重阈值用于通知和提醒。

  • 健康状况良好:值小于警告阈值
  • 关注:大于警告阈值的值,但小于严重阈值的值。
  • 严重:值大于严重阈值

客户应使用提供的工具来确定最佳阈值(无论是客户使用下面提供的 MQL 创建的 Cloud Monitoring 信息中心还是 Apigee 分析),从而确定“正常”情况,然后相应地调整提醒阈值。

Hybrid 集群监控可分为四个不同的常规组,例如流量数据库Apigee 控制平面基础架构监控。以下部分详细介绍了这些组:

流量

Apigee 代理和目标 SLI 指标为 API 代理和目标提供请求/响应数和延迟时间。Apigee 政策延迟时间 SLI 指标提供政策响应延迟时间。这些 SLI 指标可全面监控 Apigee API 流量。

请求速率

代理请求数

应用场景:使用 proxy/request_count 监控代理请求数。proxy/request_count 图表显示代理的请求速率。此图表有助于确定哪个代理出现更高的请求速率、请求速率模式,以及特定代理的请求调用中出现任何异常峰值。API 流量的任何意外异常峰值都可能引起机器人或 API 代理攻击方面的安全问题。同样,整体流量云大幅下降表示 Apigee 上行组件的客户端或连接存在问题。

资源类型 代理
指标 proxy/request_count
分组依据 方法和所有 Proxy 资源类型标签
聚合器 sum
提醒注意事项 异常 request_count spike/drop 提醒等事件
提醒阈值
Cloud Monitoring 信息中心 MQL 查询
fetch apigee.googleapis.com/Proxy
| metric 'apigee.googleapis.com/proxy/request_count'
| align rate(1m)
| every 1m
| group_by [metric.method],
  [value_request_count_aggregate: aggregate(value.request_count)]

目标请求数

应用场景:使用 target/request_count 监控 Apigee 运行时目标请求数。target/request_count 图表显示了 Apigee 目标收到的请求速率。此图表可能有助于了解哪个目标出现更高的请求速率、请求速率模式,以及特定目标的请求调用中出现任何异常峰值。

资源类型 目标
指标 target/request_count
分组依据 方法和所有 Target 资源类型标签
聚合器 sum
提醒注意事项 异常 request_count spike/drop 提醒等事件
提醒阈值
Cloud Monitoring 信息中心 MQL 查询
fetch apigee.googleapis.com/Target
| metric 'apigee.googleapis.com/target/request_count'
| align rate(1m)
| every 1m
| group_by [metric.method, metric.type, metric.endpoint],
  [value_request_count_aggregate: aggregate(value.request_count)]

错误率

代理错误响应数

应用场景:使用 proxy/response_count 监控代理错误响应速率。proxy/response_count 图表显示 API 代理的请求速率。此图表有助于了解哪个代理出现更高的请求错误率,或特定代理的请求调用中出现任何异常错误峰值。

资源类型 代理
指标 proxy/response_count
过滤条件 response_code != 200
分组依据 方法response_codefault_codefault_sourceapigee_fault 以及所有 Proxy 资源类型标签
聚合器 sum
提醒注意事项 代理响应错误率:响应错误总数/响应总数。
  • 响应错误总数 = filter response_code != 200 的 proxy/response_count 的总和
  • 响应总数 = proxy/response_count 的总和
提醒阈值 取决于安装的 SLO。生产安装和非生产安装可能具有不同的阈值。例如:对于生产环境,如果代理响应 500 的错误率为 5% 并持续 5 分钟,则系统会触发事件通知。
Cloud Monitoring 信息中心 MQL 查询
fetch apigee.googleapis.com/Proxy
| metric 'apigee.googleapis.com/proxy/response_count'
| filter (metric.response_code != 200)
| align rate(1m)
| every 1m
| group_by
  [metric.method, metric.response_code, metric.fault_code,
   metric.fault_source, metric.apigee_fault],
  [value_response_count_aggregate: aggregate(value.response_count)]
Google Cloud 运维提醒政策 MQL 示例
fetch apigee.googleapis.com/Proxy::apigee.googleapis.com/proxy/response_count
| {
   filter (metric.response_code == 500)
   ;
   ident
}
| group_by drop[metric.response_code ], sliding(5m), .sum
| ratio
| scale '%'
| every (30s)
| condition val() > 5'%'

目标错误响应数

应用场景:使用 target/response_count 监控 API 目标错误响应速率。target/response_count 图表显示 API 目标的请求速率。此图表可能有助于确定哪个目标出现更高的请求速率,或请求调用中出现任何异常错误峰值。

资源类型 目标
指标 target/response_count
过滤条件 response_code != 200
分组依据 方法和所有 Target 资源类型标签
聚合器 sum
提醒注意事项 代理响应错误率,例如:响应错误总数/响应总数。
  • 响应错误总数 = filter response_code != 200 的 target/response_count 的总和
  • 响应总数 = target/response_count 的总和
提醒阈值 取决于安装的 SLO。例如:对于生产环境,如果目标响应的错误率为 5% 并持续 3 分钟,则系统会触发事件通知。
Cloud Monitoring 信息中心 MQL 查询
fetch apigee.googleapis.com/Target
| metric 'apigee.googleapis.com/target/response_count'
| filter (metric.response_code != 200)
| align rate(1m)
| every 1m
| group_by
  [metric.method, metric.type, metric.endpoint,
   metric.response_code],
  [value_response_count_aggregate: aggregate(value.response_count)]

延迟时间

代理延迟时间

应用场景:使用 proxy/latencies 监控请求的所有 API 代理响应的延迟时间。proxy/latencies 图表可能有助于确定 Apigee API 代理的延迟时间与 API 代理请求总体延迟时间的百分比。

资源类型 代理
指标 proxy/latencies
分组依据 方法和所有 Proxy 资源类型标签
聚合器 p99(第 99 百分位)
提醒注意事项 p99 延迟时间百分位的值较高。
提醒阈值 取决于安装的 SLO。例如:对于生产环境,如果代理 p99 延迟时间百分位的值为 5 秒并持续 5 分钟,则会触发事件通知。
Cloud Monitoring 信息中心 MQL 查询
fetch apigee.googleapis.com/Proxy
| metric 'apigee.googleapis.com/proxy/latencies'
| align delta(1m)
| every 1m
| group_by [metric.method],
    [value_latencies_percentile: percentile(value.latencies, 99)]

目标延迟时间

应用场景:使用 target/latencies 监控请求的所有 API 代理目标响应的延迟时间。target/latencies 图表用于确定 Apigee API 代理目标响应请求的总时间。此值不包括 Apigee API 代理开销。

资源类型 目标
指标 target/latencies
分组依据 方法、百分位以及所有 Target 资源类型标签
聚合器 p99(第 99 百分位)
提醒注意事项 p99 延迟时间百分位的值较高。
提醒阈值 取决于安装的 SLO。例如:对于生产环境,如果目标 p99 延迟时间百分位的值为 5 秒并持续 5 分钟,则会触发事件通知。
Cloud Monitoring 信息中心 MQL 查询
    fetch apigee.googleapis.com/Target
    | metric 'apigee.googleapis.com/target/latencies'
    | align delta(1m)
    | every 1m
    | group_by [metric.method],
        [value_latencies_percentile: percentile(value.latencies, 99)]

数据库

Cassandra

Apigee Cassandra 数据库服务有多个 Cassandra SLI 指标。这些 SLI 指标可全面监控 Apigee Cassandra 服务。对于 Cassandra 服务健康状况,至少应监控客户端的读取和写入请求延迟时间以及 Cassandra 资源使用情况(CPU、内存和磁盘卷)。

Cassandra 读取请求速率

应用场景:cassandra/clientrequest_rate (scope=Read) SLI 指标可让您深入了解 Cassandra 服务在任何给定时间的读取请求平均速率。此指标有助于了解客户端的读取请求活动级别趋势。

资源类型 k8s_container
指标 cassandra/clientrequest_rate
过滤条件 scope = Readunit = OneMinuteRate
分组依据 范围、单位以及所有 k8s_container 资源类型标签
聚合器 sum
提醒注意事项 针对客户端查询模式的任何潜在问题或重大更改;例如,读取请求速率突然、意外激增或下降。
提醒阈值
Cloud Monitoring 信息中心 MQL 查询
fetch k8s_container
| metric 'apigee.googleapis.com/cassandra/clientrequest_latency'
| filter (metric.scope == 'Read' && metric.unit == 'OneMinuteRate')
| group_by 1m,
  [value_clientrequest_latency_mean: mean(value.clientrequest_latency)]
| every 1m
| group_by [metric.scope, metric.unit],
  [value_clientrequest_latency_mean_aggregate:
     aggregate(value_clientrequest_latency_mean)]

Cassandra 写入请求速率

应用场景:cassandra/clientrequest_rate (scope=Write) SLI 指标可让您深入了解 Cassandra 服务在任何给定时间的写入请求平均速率。此指标有助于了解客户端的写入请求活动级别趋势。

资源类型 k8s_container
指标 cassandra/clientrequest_rate
过滤条件 scope = Readunit = OneMinuteRate
分组依据 范围、单位以及所有 k8s_container 资源类型标签
聚合器 sum
提醒注意事项 针对客户端查询模式的任何潜在问题或重大更改;例如,写入请求速率突然、意外激增或下降,需要进一步调查。
提醒阈值
Cloud Monitoring 信息中心 MQL 查询
fetch k8s_container
| metric 'apigee.googleapis.com/cassandra/clientrequest_latency'
| filter (metric.scope == 'Write' && metric.unit == 'OneMinuteRate')
| group_by 1m,
  [value_clientrequest_latency_mean: mean(value.clientrequest_latency)]
| every 1m
| group_by [metric.scope, metric.unit],
  [value_clientrequest_latency_mean_aggregate:
     aggregate(value_clientrequest_latency_mean)]

Cassandra 读取请求延迟时间

应用场景:cassandra/clientrequest_latency (scope=Read) SLI 指标提供 Cassandra 服务读取请求延迟时间(第 99 百分位、第 95 百分位或第 75 百分位)。 这些指标有助于从整体上了解 Cassandra 的性能,并且可以指示使用模式的任何变化或随时间变化展现的问题。

资源类型 k8s_container
指标 cassandra/clientrequest_latency
过滤条件 scope = Readunit = 99thPercentile
分组依据 范围、单位以及所有 k8s_container 资源类型标签
聚合器 sum
提醒注意事项 读取请求延迟时间 SLI 始终显示第 99 百分位延迟时间不断上升的情况。
提醒阈值 取决于 Cassandra 服务的 SLO。例如:在生产环境中,如果 99thPercentile 的读取 clientrequest_latency 值为 5 秒并持续 3 分钟,则系统会触发事件通知
Cloud Monitoring 信息中心 MQL 查询
fetch k8s_container
| metric 'apigee.googleapis.com/cassandra/clientrequest_latency'
| filter (metric.scope == 'Read' && metric.unit == '99thPercentile')
| group_by 1m,
  [value_clientrequest_latency_mean: mean(value.clientrequest_latency)]
| every 1m
| group_by [metric.scope, metric.unit],
  [value_clientrequest_latency_mean_aggregate:
     aggregate(value_clientrequest_latency_mean)]

Cassandra 写入请求延迟时间

应用场景:cassandra/clientrequest_latency (scope=Write) SLI 指标提供 Cassandra 服务写入请求延迟时间(第 99 百分位、第 95 百分位或第 75 百分位)。这些指标有助于从整体上了解 Cassandra 的性能,并且可以指示使用模式的任何变化或随时间推移展现的问题。

资源类型 k8s_container
指标 cassandra/clientrequest_latency
过滤条件 scope = Writeunit = 99thPercentile
分组依据 范围、单位以及所有 k8s_container 资源类型标签
聚合器 sum
提醒注意事项 写入请求延迟时间 SLI 始终显示第 99 百分位延迟时间不断上升的情况。
提醒阈值 取决于 Cassandra 服务的 SLO。例如:在生产环境中,如果 99thPercentile 的写入 clientrequest_latency 值为 5 秒并持续 3 分钟,则系统会触发事件通知
Cloud Monitoring 信息中心 MQL 查询
fetch k8s_container
| metric 'apigee.googleapis.com/cassandra/clientrequest_latency'
| filter (metric.scope == 'Write' && metric.unit == '99thPercentile')
| group_by 1m,
  [value_clientrequest_latency_mean: mean(value.clientrequest_latency)]
| every 1m
| group_by [metric.scope, metric.unit],
  [value_clientrequest_latency_mean_aggregate:
     aggregate(value_clientrequest_latency_mean)]

Apigee 控制平面

Apigee 同步器服务 SLI 指标提供 Apigee 控制平面和 Hybrid 运行时平面之间的请求和响应数及延迟时间。在运行时平面运行的同步器实例应定期轮询控制平面、下载合同,并将其提供给本地运行时实例。

请求速率

上行请求数

应用场景:upstream/request_count 指标指示同步器服务向 Apigee 控制平面发出的请求数。

资源类型 k8s_container
指标 upstream/request_count
过滤条件 container_name = apigee-synchronizertype = CONTRACT
分组依据 方法、类型container_name 以及所有 k8s_container 资源类型标签
聚合器 sum
提醒注意事项 此项针对的是流量异常,例如异常 request_count 激增或下降提醒。
提醒阈值
Cloud Monitoring 信息中心 MQL 查询
fetch k8s_container
| metric 'apigee.googleapis.com/upstream/request_count'
| filter
  (resource.container_name == 'apigee-synchronizer')
  && (metric.type == 'CONTRACT')
| align rate(1m)
| every 1m
| group_by [metric.method, metric.type, resource.container_name],
  [value_request_count_aggregate: aggregate(value.request_count)]

错误率

上行响应数

应用场景:upstream/response_count SLI 指标提供同步器服务从 Apigee 控制平面收到的响应数。此图表可能有助于确定 Apigee Hybrid 运行时平面和控制平面之间的任何连接或配置问题。

资源类型 k8s_container
指标 upstream/request_count
过滤条件 方法、response_type、container_name 以及所有 k8s_container 资源类型标签
分组依据
聚合器 sum
提醒注意事项 如果 Apigee 控制平面返回的 upstream/response_count 指标中存在错误,且响应代码非 200,则需要进一步调查这些错误。
提醒阈值 取决于 Cassandra 服务的 SLO。例如:在生产环境中,如果同步器每三分钟出现的 response_code 错误超过一个,则系统会触发事件通知。
Cloud Monitoring 信息中心 MQL 查询
fetch k8s_container
| metric 'apigee.googleapis.com/upstream/response_count'
| filter
  (resource.container_name == 'apigee-synchronizer')
  && (metric.response_code != '200' && metric.type == 'CONTRACT')
| align rate(1m)
| every 1m
| group_by
  [metric.method, metric.response_code, metric.type, resource.container_name],
  [value_response_count_aggregate: aggregate(value.response_count)]

基础架构

GKE 和其他 Kubernetes 平台提供系统级 SLI 指标。SLI 指标标签可以进行过滤和分组,以监控特定容器及其资源使用情况。为了监控 Apigee 运行时集群基础架构的健康状况和可用性,集群管理员可以监控容器和 Pod 的常见资源使用情况,例如 CPU、内存、磁盘和容器重启计数。如需详细了解可用的指标和标签,请按照 GKE 文档操作。

下表列出了一些服务以及您可以为每项服务监控的容器。

服务名称 容器名称
Cassandra apigee-cassandra
消息处理器 (MP) apigee-runtime
同步器 apigee-synchronizer
遥测 apigee-prometheus-app
apigee-prometheus-proxy
apigee-prometheus-agg
apigee-stackdriver-exporter

容器/Pod

重启次数

应用场景:kubernetes.io/container/restart_count 系统 SLI 指标提供容器重启的次数。此图表有助于确定容器是否频繁崩溃/重启。特定服务容器可以通过用于特定服务的容器监控的指标标签过滤掉。

下面展示了对 Cassandra 容器使用 kubernetes.io/container/restart_count 指标。您可以将此指标用于上表中的任何容器。

资源类型 k8s_container
指标 kubernetes.io/container/restart_count
过滤条件 namespace_name = apigeecontainer_name =~ .*cassandra.*
分组依据 cluster_name、namespace_name、pod_name、container_name 以及所有 k8s_container 资源类型标签
聚合器 sum
提醒注意事项 如果容器频繁重启,则需要针对根本原因进行进一步调查。容器重启的原因有多种,例如 OOMKilled、数据磁盘已满和配置问题等。
提醒阈值 取决于安装的 SLO。例如:对于生产环境,如果容器在 30 分钟内重启 5 次以上,则系统会触发事件通知。
Cloud Monitoring 信息中心 MQL 查询
fetch k8s_container
| metric 'kubernetes.io/container/restart_count'
| filter
  (resource.container_name =~ '.*cassandra.*'
   && resource.namespace_name == 'apigee')
| align rate(1m)
| every 1m
| group_by
  [resource.cluster_name, resource.namespace_name, resource.pod_name,
   resource.container_name],
  [value_restart_count_aggregate: aggregate(value.restart_count)]