prometheus

此插件是提供符合prometheus数据格式的监控指标数据。

属性

如何开启插件

prometheus 插件用空{}就可以开启了,他没有任何的选项。

例子如下:

  1. curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
  2. {
  3. "uri": "/hello",
  4. "plugins": {
  5. "prometheus":{}
  6. },
  7. "upstream": {
  8. "type": "roundrobin",
  9. "nodes": {
  10. "127.0.0.1:80": 1
  11. }
  12. }
  13. }'

你可以使用浏览器打开 dashboard:http://127.0.0.1:9080/apisix/dashboard/,通过 web 界面来完成上面的操作,先增加一个 route:

prometheus - 图1

然后在 route 页面中添加 prometheus 插件:

prometheus - 图2

如何提取指标数据

我们可以从指定的 url 中提取指标数据 /apisix/prometheus/metrics:

  1. curl -i http://127.0.0.1:9080/apisix/prometheus/metrics

把改uri地址配置到 prometheus 中去,就会自动完成指标数据提取.

例子如下:

  1. scrape_configs:
  2. - job_name: 'apisix'
  3. metrics_path: '/apisix/prometheus/metrics'
  4. static_configs:
  5. - targets: ['127.0.0.1:9080']

我们也可以在 prometheus 控制台中去检查状态:

prometheus - 图3

prometheus - 图4

Grafana 面板

插件导出的指标可以在 Grafana 进行图形化绘制显示。

你可以到 Grafana meta 下载 Grafana 元数据.

prometheus - 图5

prometheus - 图6

prometheus - 图7

可有的指标

  • Status codes: upstream 服务返回的 HTTP 状态码,每个服务返回状态码的次数或者所有服务的状态码次数总和都可以统计到。
  • Bandwidth: 流经apisix的总带宽(可分出口带宽和入口带宽). 每个服务指标或者是所有服务指标的总和都可以统计到。
  • etcd reachability: apisix 连接 etcd 的可用性,用 0 和 1来表示。
  • Connections: 各种的 Nginx 连接指标,如 active(正处理的活动连接数),reading(nginx 读取到客户端的 Header 信息数),writing(nginx 返回给客户端的 Header 信息数),已建立的连接数。.

这里是apisix的原始的指标数据集:

  1. $ curl http://127.0.0.2:9080/apisix/prometheus/metrics
  2. # HELP apisix_bandwidth Total bandwidth in bytes consumed per service in Apisix
  3. # TYPE apisix_bandwidth counter
  4. apisix_bandwidth{type="egress",service="127.0.0.2"} 183
  5. apisix_bandwidth{type="egress",service="bar.com"} 183
  6. apisix_bandwidth{type="egress",service="foo.com"} 2379
  7. apisix_bandwidth{type="ingress",service="127.0.0.2"} 83
  8. apisix_bandwidth{type="ingress",service="bar.com"} 76
  9. apisix_bandwidth{type="ingress",service="foo.com"} 988
  10. # HELP apisix_etcd_reachable Config server etcd reachable from Apisix, 0 is unreachable
  11. # TYPE apisix_etcd_reachable gauge
  12. apisix_etcd_reachable 1
  13. # HELP apisix_http_status HTTP status codes per service in Apisix
  14. # TYPE apisix_http_status counter
  15. apisix_http_status{code="200",service="127.0.0.2"} 1
  16. apisix_http_status{code="200",service="bar.com"} 1
  17. apisix_http_status{code="200",service="foo.com"} 13
  18. # HELP apisix_nginx_http_current_connections Number of HTTP connections
  19. # TYPE apisix_nginx_http_current_connections gauge
  20. apisix_nginx_http_current_connections{state="accepted"} 11994
  21. apisix_nginx_http_current_connections{state="active"} 2
  22. apisix_nginx_http_current_connections{state="handled"} 11994
  23. apisix_nginx_http_current_connections{state="reading"} 0
  24. apisix_nginx_http_current_connections{state="total"} 1191780
  25. apisix_nginx_http_current_connections{state="waiting"} 1
  26. apisix_nginx_http_current_connections{state="writing"} 1
  27. # HELP apisix_nginx_metric_errors_total Number of nginx-lua-prometheus errors
  28. # TYPE apisix_nginx_metric_errors_total counter
  29. apisix_nginx_metric_errors_total 0