在现代的云原生架构中,对 API 网关的指标监控至关重要。Apache APISIX 作为一个高性能的 API 网关,在提供丰富功能的同时,也支持与 Prometheus 的集成,以收集和监控 API 流量的关键指标。本文将介绍在 Apache APISIX 中如何配置和使用 Prometheus 以及其他注意事项,并且推荐一些常见的指标配置。
关于 Prometheus
Prometheus 是一个开源的监控系统,它通过收集和存储时间序列数据,使得用户能够实时监控和分析系统性能。与 Apache APISIX 集成时,Prometheus 可以帮助捕捉到 API 流量的细粒度指标。
在 Apache APISIX 中启用 Prometheus 插件
- 要在 Apache APISIX 中启用 Prometheus 指标,首先需要在 APISIX 中启用 Prometheus 插件。这可以通过修改 config.yaml 文件实现。
1plugins:
2 - prometheus
- 在需要采集的服务、API 上配置 prometheus 插件,当然您也可以直接配置全局插件。
1// 在 API 上配置 prometheus 插件
2curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
3{
4 "uri": "/hello",
5 "plugins": {
6 "prometheus":{}
7 },
8 "upstream": {
9 "type": "roundrobin",
10 "nodes": {
11 "127.0.0.1:80": 1
12 }
13 }
14}'
更多复杂的配置方式可以参考:https://apisix.apache.org/docs/apisix/plugins/prometheus/。
在 Prometheus 中配置采集策略
在 Prometheus 中,需要配置 prometheus.yml 文件来添加 APISIX 作为一个新的监控目标。
1scrape_configs:
2 - job_name: 'apisix'
3 static_configs:
4 - targets: ['<APISIX_IP>:<APISIX_PORT>']
Apache APISIX 中常见的指标
企业内部指标各有差异,以下是 Apache APISIX 中常见的一些关键的指标,为系统的监控和分析提供了丰富的信息。
HTTP 请求和响应指标
apisix_http_request_total
:记录了通过 APISIX 的 HTTP 请求总数。它可以用来观察系统的整体流量。apisix_http_request_duration_seconds
:HTTP 请求处理时间,有助于识别性能瓶颈。apisix_http_request_size_bytes
:HTTP 请求的大小,可以分析请求的数据量。apisix_http_response_size_bytes
:HTTP 响应的大小,用于监控响应数据量。
上游服务指标
apisix_upstream_latency
:上游服务的响应延迟。apisix_upstream_health
:上游服务的健康状况。
系统性能指标
apisix_node_cpu_usage
:APISIX 节点的 CPU 使用率。apisix_node_memory_usage
:内存使用情况。
流量指标
apisix_bandwidth
:上行和下行的带宽使用情况。
错误和异常指标
apisix_http_status_code
:HTTP 响应状态码的分布,特别是 4xx 和 5xx 错误,这对于识别潜在的问题很重要。
其他特定场景
- 缓存指标(如果使用了缓存插件):
- 缓存命中率
- 缓存大小
- 提供扩展插件指标:
- 根据配置的 APISIX 插件,可能会有特定的指标,如限流插件的拒绝请求数等。
可视化和告警
利用 Grafana 与 Prometheus 集成,可以创建仪表板来可视化这些指标。此外,Prometheus 的告警规则可以用来设置特定条件的告警。
Grafna 仪表盘示例
在 Grafana 中,您可以创建多种图表来展示 APISIX 的性能指标,例如时间序列图、柱状图或饼图。例如,一个显示 HTTP 请求总数和平均响应时间的仪表板可以提供即时的流量和性能概览。
Prometheus 告警示例
告警规则可以基于各种条件配置。例如,如果 apisix_http_request_duration_seconds
的平均值超过预定阈值,Prometheus 可以配置为发送告警通知。
1alerting:
2 alertmanagers:
3 - static_configs:
4 - targets:
5 - localhost:9093
6rules:
7 - alert: HighRequestLatency
8 expr: avg_over_time(apisix_http_request_duration_seconds[2m]) > 0.5
9 for: 1m
10 labels:
11 severity: "critical"
12 annotations:
13 summary: "High request latency on APISIX"
优化
虽然拥有更多且详尽的 Prometheus 指标可以增强监控和告警的维度,使之更加细致,但我们也必须认识到,这些指标的统计会消耗计算资源。更多的指标意味着更高的计算资源需求,同时,Prometheus 在拉取这些指标时也会占用更多的带宽和时间。这可能对 API 网关或其他业务系统构成压力,极端情况下甚至可能影响业务请求的正常处理。因此,企业需要根据自己的业务需求和资源状况,寻找一个平衡点。
Apache APISIX 自从 3.0 版本起,对 Prometheus 插件进行了显著优化,引入了独立进程负责指标的统计和拉取工作。这一改进避免了因大量 Prometheus 指标统计而对业务流量产生影响的问题。这项功能的优化是由深圳支流科技实现的。
总结
Apache APISIX 通过集成 Prometheus,可以帮助企业获得对其 API 基础设施的深入洞察,确保其以高效和安全的方式运行,使得 API 流量监控逐渐成为一个能够主动预防问题、优化性能和保障安全的重要工具。