跳到主要内容
版本:3.10.x

监控指标

API7 网关提供两种流量监控方式:

  • 控制台内置的监控页面,无需额外基础设施即可快速查看状态。
  • 数据面的 Prometheus 格式端点,用于获取原始网关指标、自定义查询,并接入兼容 Prometheus 的监控系统。

前置条件​

方法一:使用内置监控页面​

控制台的监控部分显示最重要的实时指标:

指标说明
QPS每秒查询数,表示当前负载。
延迟请求处理时间,包括平均值、p90 和 p99。
错误率返回 4xx 或 5xx 状态码的请求占比。
吞吐量入站和出站数据量。

登录控制台,然后进入监控页面即可查看。

方法二:使用 Prometheus 抓取端点​

将 prometheus 插件启用为全局规则,即可在 http://<data-plane>:9091/apisix/prometheus/metrics 暴露原始指标。Prometheus 可以直接抓取这个端点,DP Manager 也可以通过远程写入将相同指标发送到 Prometheus。

步骤一:全局启用 Prometheus 插件​

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": {}
}
}'

步骤二:验证端点​

先通过任意路由发送请求以生成指标,然后抓取数据面的 Prometheus 端点:

curl "http://127.0.0.1:9091/apisix/prometheus/metrics"

输出应包含网关生成的 Prometheus 格式指标,包括 Counter、Gauge 和 Histogram。

指标监听器默认绑定到 127.0.0.1。仅发布 9091 端口,无法使容器或 Pod 外部访问仅绑定到环回地址的监听器。

对于使用 config.yaml 配置的网关,请将监听器设置为监控网络可以访问的地址:

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:

values.yaml
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:

prometheus.yml
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。

其他资源​