Apache APISIX 集成 Prometheus 最佳实践

更新时间 1/13/2024

在现代的云原生架构中,对 API 网关的指标监控至关重要。Apache APISIX 作为一个高性能的 API 网关,在提供丰富功能的同时,也支持与 Prometheus 的集成,以收集和监控 API 流量的关键指标。本文将介绍在 Apache APISIX 中如何配置和使用 Prometheus 以及其他注意事项,并且推荐一些常见的指标配置。

关于 Prometheus

Prometheus 是一个开源的监控系统,它通过收集和存储时间序列数据,使得用户能够实时监控和分析系统性能。与 Apache APISIX 集成时,Prometheus 可以帮助捕捉到 API 流量的细粒度指标。

在 Apache APISIX 中启用 Prometheus 插件

  1. 要在 Apache APISIX 中启用 Prometheus 指标,首先需要在 APISIX 中启用 Prometheus 插件。这可以通过修改 config.yaml 文件实现。
1plugins:
2  - prometheus
  1. 在需要采集的服务、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 错误,这对于识别潜在的问题很重要。

其他特定场景

  1. 缓存指标(如果使用了缓存插件):
  • 缓存命中率
  • 缓存大小
  1. 提供扩展插件指标:
  • 根据配置的 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 流量监控逐渐成为一个能够主动预防问题、优化性能和保障安全的重要工具。

微信咨询

获取方案