监控指标
API7 网关提供两种流量监控方式:
- 控制台内置的监控页面,无需额外基础设施即可快速查看状态。
- 数据面的 Prometheus 格式端点,用于检查原始网关指标。
前置条件
方法一:使用内置监控页面
控制台的监控部分显示最重要的实时指标:
| 指标 | 说明 |
|---|---|
| QPS | 每秒查询数,表示当前负载。 |
| 延迟 | 请求处理时间,包括平均值、p90 和 p99。 |
| 错误率 | 返回 4xx 或 5xx 状态码 的请求占比。 |
| 吞吐量 | 入站和出站数据量。 |
登录控制台,然后进入监控页面即可查看。
方法二:使用 Prometheus 抓取端点
将 prometheus 插件启用为全局规则,即可在 http://<data-plane>:9091/apisix/prometheus/metrics 暴露原始指标。当前发布版本存在下文所述的直接抓取限制;将指标发送到 Prometheus 时,请使用 DP Manager 远程写入。
步骤一:全局启用 Prometheus 插件
- Admin API
- ADC
curl -k "https://localhost:7443/apisix/admin/global_rules/prometheus?gateway_group_id={gateway_group_id}" -X PUT \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"plugins": {
"prometheus": {}
}
}'
global_rules:
prometheus: {}
adc sync -f adc.yaml
步骤二:验证端点
先通过任意路由发送请求以生成指标,然后抓取数据面的 Prometheus 端点:
curl "http://127.0.0.1:9091/apisix/prometheus/metrics"
输出应包含网关生成的 Prometheus 格式指标,包括 Counter、Gauge 和 Histogram。
当前发布版本使用两个前缀相同的指标注册表,因此会重复暴露 apisix_nginx_metric_errors_total。Prometheus 会拒绝整个抓取,将目标标记为失败,并且不会采集任何网关指标。在重复暴露问题修复前,请使用 DP Manager 远程写入路径将指标发送到 Prometheus。该端点仍可用于手动检查,或供已验证能够容忍重复指标族的采集器使用。
指标监听器默认绑定到 127.0.0.1。仅发布 9091 端口,无法使容器或 Pod 外部访问仅绑定到环回地址的监听器。
对于使用 config.yaml 配置的网关,请将监听器设置为监控网络可以访问的地址:
plugin_attr:
prometheus:
export_addr:
ip: 0.0.0.0
port: 9091
重启网关,然后发布或暴露该端口。
如果使用 API7 网关 Helm Chart 和 Prometheus Operator 部署网关,请先确认网关已包含重复暴露问题的修复。确认后,启用 Helm Chart 的 ServiceMonitor 集成。此选项会将监听器绑定到 0.0.0.0、通过网关 Service 暴露 9091 端口并创建 ServiceMonitor:
serviceMonitor:
enabled: true
此选项要求集群已安装 ServiceMonitor 自定义资源定义。在当前发布版本中,该选项会产生上述失败的 Prometheus 抓取。对于手动检查或其他经验证兼容的采集器,请配置 pluginAttrs.prometheus.export_addr。你还必须使用 Kubernetes Service 暴露 9091 端口,或直接请求 Pod IP;仅更改 pluginAttrs 不会添加 Service 端口。
如果不希望暴露监听器,请使用 DP Manager 远程写入路径。
指标端点未启用身份认证。请将其限制在监控网络内,不要通过代理流量对外暴露。
步骤三:选择采集路径
使用 Prometheus 时,请使用 DP Manager 远程写入路径。此路径无需将数据面的 9091 端口暴露到外部。
如果使用其他已验证能够接受重复指标族的采集器,请将其配置为从 <data-plane-host>:9091 请求 /apisix/prometheus/metrics。
关键指标
创建监控面板或告警时,重点关注 prometheus 插件生成的指标:
apisix_http_status:按状态码统计响应数,标签为code。apisix_http_latency:请求延迟直方图,标签type区分request、upstream和apisix。apisix_bandwidth:发送和接收字节数,标签为type。apisix_nginx_http_current_connections:活动连接数,标签为state。
有关数据面指标族及其内置标签,请参阅数据面指标参考。有关插件配置和标签调优,请参阅 prometheus。