API 健康检查是监控 API 整体健康状况的重要方法之一。健康检查能让您及时了解 API 的整体健康状况,并在早期识别出各项隐患。本文将探讨如何协同 Apache APISIX 和 Prometheus 收集和分析健康检查的数据指标,从而帮助您更轻松地监控、诊断和解决 API 的相关问题。
为什么 API 健康检查很重要?
服务水平指标(SLI)是一种用于衡量服务性能的指标,通常用于衡量服务的可靠性、可用性、响应时间等,用于评估服务在一定时间内的表现。服务水平目标(SLO)是一种设定服务性能目标的方法,通常是根据业务需求和用户期望来设定的,例如:99.9% 的 API 请求应在 300 毫秒内完成。服务水平目标用于确保服务达到一定的性能水平,并评估团队的绩效和服务的可靠性。
建立服务水平指标和服务水平目标已成为站点可靠性工程(SRE)实践过程中不可或缺的重要环节,有助于团队为服务(如网站或应用程序)的运行状况设定明确的目标并开展实践。这些目标可以针对内部服务(如公司内部应用程序使用的 API),也可以针对客户使用的公共产品。建立服务水平指标和服务水平目标为团队提供了可量化的系统性能管理方法。
APISIX 位于 API 基础架构的前端,在衡量服务水平指标和服务水平目标方面发挥着重要作用。在复杂的分布式架构中,您无需考虑哪些指标值得测量以及应当如何测量它们。APISIX 可以自动跟踪所有必要的指标,例如 API 上游服务的延迟、失败请求和吞吐量等。APISIX 可以对后端服务进行健康检查,以确保 API 可以正常处理请求,并在风险还未发展成问题时向负责团队发出警报,从而最大限度地减少停机时间,提高系统可靠性。
API 网关的健康检查是如何进行的?
一般而言,激活 API 的健康检查的过程是比较容易的。每个服务只需要一个指定的用于进行健康检查的 API 端点(/health
)。借助此端点,您可以检查与该服务联系最紧密的指标,如内存使用率、数据库连接性、响应持续时间等。您可以使用 Prometheus 和 Grafana 等观测工具对结果进行可视化,并利用警报系统对检测到的潜在风险进行预警。
APISIX 的好处之一在于它能让配置可观察性工具的过程变得更加简单,并且适用于多个服务。APISIX 会定期向其管理的后端服务(也称为上游节点)发送请求。如果返回的是健康状态(HTTP 状态代码通常为 200 OK
),则认为该服务是健康的。在评估服务是否为健康状态时,响应时间也是评估过程中应该关注的重要指标——响应时间过长表明服务可能存在潜在问题。如果服务未能在指定时间内响应或返回的状态为错误状态,则将其标记为不健康。APISIX 会将流量从不健康的服务路由到健康的服务,以防止应用程序出错或速度变慢。如果您想了解启用健康检查的详细步骤,请点击此处。
如何使用 APISIX 的 Prometheus 插件收集健康检查数据?
APISIX 通过集成 Prometheus 插件,提供了一种有效的方法,来获取 API 指标,包括与上游节点健康状况相关的指标。工作原理如下所示:
- 激活 APISIX Prometheus 插件后(想了解具体激活方法,请点击此处),它会公开一个指标 URL,通常为
/apisix/prometheus/metrics
。您还可以在conf/config.yaml
文件中进行配置,配置支持自定义导出 URI、添加额外标签、调整爬取频率和其他参数等操作。
1
2plugin_attr:
3 prometheus:
4 export_uri: /metrics
5
Prometheus 会在特定的时间间隔内从该 URL 中获取信息,收集与各种性能参数相关的时间序列数据,例如请求次数、请求延迟、上游延迟和状态码。
在 APISIX 3.3.0 版本中,我们推出了 Prometheus 自定义指标功能,允许您公开更精细的 API 指标数据。该机制允许 APISIX 定期检查上游节点是否健康,并相应地调整路由。这有助于避免故障的发生并提高系统的可靠性,对于任何基于 API 的基础设施都至关重要。这些健康检查的结果都会被纳入 Prometheus 插件公开的指标中,以提供更加全面的 API 性能实时视图。您只需向 APISIX 的
/metrics
端点发送一个简单的请求,就可以观察到所有收集到的监控数据和上游节点的健康检查结果。
1
2curl <http://127.0.0.1:9091/metrics>
3
4...
5# HELP apisix_upstream_status Upstream status from health check
6# TYPE apisix_upstream_status gauge
7apisix_upstream_status{name="/apisix/upstreams/1",ip="172.27.0.5",port="443"} 0
8apisix_upstream_status{name="/apisix/upstreams/1",ip="172.27.0.5",port="80"} 1
9apisix_upstream_status{name="/apisix/upstreams/1",ip="172.27.0.7",port="443"} 0
10apisix_upstream_status{name="/apisix/upstreams/1",ip="172.27.0.7",port="80"} 1
11
其中,数值 1 表示健康,0 表示上游节点不健康。
- 您还可以在 Prometheus 面板上查看上游节点健康检查状态的输出结果:
- APISIX Prometheus 插件可自动连接 Grafana并可视化这些指标。
同时,传输层的可观察性可以让我们深入了解基础架构中的服务之间是如何传输数据的,这对于诊断问题和优化性能至关重要。因此,您还可以启用 Prometheus 为 TCP/UDP 收集指标。
如何在 Prometheus 插件上进行定制?
在 APISIX 中,Prometheus 插件默认公开了几个指标。这些指标是可配置的,插件可根据具体要求进行扩展。如果您有关于 API 健康检查和插件配置的任何问题,API7.ai 团队随时准备为您解答。我们的工程师正在积极鼓励新用户的加入,帮助他们根据自身需要修改 APISIX 的默认配置。
应用案例:快餐巨头通过 APISIX 和 Prometheus 集成改善服务器健康监控
假设有一家拥有数千家分店的全球领先的快餐公司,该公司采用双活架构。他们的目标是确保所有服务器或数据中心都能实时分担工作负载,且不会发生服务中断。
该公司的技术团队已经实现了服务器或数据中心之间的自动化切换。然而,有时服务器之间的业务流量会发生变化,从而导致负载分布不均:一些服务器负载过重,而另一些服务器的流量较小,运行效率也会因此而降低。在高峰期,这样的问题会导致服务器崩溃和服务中断,对公司的正常运营造成了极大的威胁。
APISIX 支持持续监控上游服务器和数据中心的健康状况,并根据服务器的健康状况自动切换流量。如果某个服务器的状态被界定为不健康,系统就会自动切换到另一个健康的服务器,以维持不间断的服务。在流量异常小或异常大而服务器无法处理的特定情况下,Prometheus 的警报机制会进行预警。这有利于该公司的运营团队主动监控服务器的健康状态、流量负载和其他关键指标。
总结
APISIX 和 Prometheus 的集成可以帮助您快捷地获取健康检查数据指标,从而显著改善您的 API 指标生态系统,让您更深入地了解 API 的健康状况。这对于提升运营效率、提高客户满意度和增加业务收入无疑是十分有益的。因此,如果您希望改善您的 API 指标生态系统,APISIX 和 Prometheus 集成所展现出的巨大优势可以为您的 API 健康保驾护航。