监控指标
API7 网关提供两种流量监控方式:
- 控制台内置的监控页面,无需额外基础设施即可快速查看状态。
- 数据面的 Prometheus 格式端点,用于获取原始网关指标、自定义查询,并接入兼容 Prometheus 的监控系统。
前置条件
方法一:使用内置监控页面
控制台的监控部分显示最重要的实时指标:
| 指标 | 说明 |
|---|---|
| QPS | 每秒查询数,表示当前负载。 |
| 延迟 | 请求处理时间,包括平均值、p90 和 p99。 |
| 错误率 | 返回 4xx 或 5xx 状态码的请求占比。 |
| 吞吐量 | 入站和出站数据量。 |
登录控制台,然后进入监控页面即可查看。
方法二:使用 Prometheus 抓取端点
将 prometheus 插件启用为全局规则,即可在 http://<data-plane>:9091/apisix/prometheus/metrics 暴露原始指标。Prometheus 可以直接抓取这个端点,DP Manager 也可以通过远程写入将相同指标发送到 Prometheus。
步骤一:全局启用 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 diff -f adc.yaml \
--include-resource-type global_rule
审查变更后同步配置:
adc sync -f adc.yaml \
--include-resource-type global_rule
步骤二:验证端点
先通过任意路由发送请求以生成指标,然后抓取数据 面的 Prometheus 端点:
curl "http://127.0.0.1:9091/apisix/prometheus/metrics"
输出应包含网关生成的 Prometheus 格式指标,包括 Counter、Gauge 和 Histogram。
指标监听器默认绑定到 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 自定义资源定义。如果只想修改监听器地址而不创建 ServiceMonitor,请配置 pluginAttrs.prometheus.export_addr。你还必须使用 Kubernetes Service 暴露 9091 端口,或直接请求 Pod IP;仅更改 pluginAttrs 不会添加 Service 端口。
如果不希望暴露监听器,请使用 DP Manager 远程写入路径。
指标端点未启用身份认证。请将其限制在监控网络内,不要通过代理流量对外暴露。
步骤三:配置 Prometheus 抓取
如果启用了 Helm Chart 的 ServiceMonitor 集成,Prometheus Operator 会为你配置抓取。否则,请把每个数据面添加到 Prometheus 的 scrape_configs:
scrape_configs:
- job_name: api7-gateway
metrics_path: /apisix/prometheus/metrics
static_configs:
- targets:
- <data-plane-host>:9091
如果不希望在数据面之外暴露 9091 端口,请改用 DP Manager 远程写入路径。
当前已发布的网关版本会输出两次 apisix_nginx_metric_errors_total 指标族,每次都有各自的 HELP、TYPE 和样本行。Prometheus 会保持目标为正常状态、摄取其他指标族,并丢弃重复样本。Prometheus 2.52.0 及之后版本会记录警告:Error on ingesting samples with different value but same timestamp;更早版本会静默忽略重复序列。
严格的文本格式检查会拒绝整个负载。例如,promtool check metrics 会报告 second HELP line for metric name "apisix_nginx_metric_errors_total"。
关键指标
创建监控面板或告警时,重点关注 prometheus 插件生成的指标:
apisix_http_status:按状态码统计响应数,标签为code。apisix_http_latency:请求延迟直方图,标签type区分request、upstream和apisix。apisix_bandwidth:发送和接收字节数,标签为type。apisix_nginx_http_current_connections:活动连接数,标签为state。
有关数据面指标族及其内置标签,请参阅数据面指标参考。有关插件配置和标签调优,请参阅 prometheus。