使用 Prometheus 监控 API 健康检查
APISIX具有健康检查机制,可以主动检查系统中上游节点的健康状况。此外,APISIX通过其插件与Prometheus集成,该插件将上游节点(APISIX 管理的后端 API 服务的多个实例)的健康检查指标公开到 Prometheus 指标端点(通常通过 URL 路径)。/apisix/prometheus/metrics
在本文中,我们将指导您如何使用 APISIX 和 Prometheus启用和监控 API 健康检查。
先决条件
本指南假设本地安装了以下工具:
- 在开始之前,最好对 APISIX 有一个基本的了解。熟悉API 网关及其关键概念(例如 路由、 上游、 管理 API、 插件和 HTTP 协议)也将大有裨益。
- 使用Docker 安装容器化的etcd和APISIX。
- 安装 cURL 以向服务发送请求进行验证。
启动 APISIX 演示项目
该项目利用现有的预定义Docker Compose 配置文件,只需一条命令即可设置、部署和运行 APISIX、etcd、Prometheus 以及其他服务。首先,从 GitHub 克隆apisix-prometheus-api-health-check仓库,使用您常用的编辑器打开,然后docker compose up
从项目根文件夹运行即可启动该项目。
启动项目时,Docker 会下载运行所需的所有镜像。您可以在 docker-compose.yaml 文件中查看完整的服务列表。
在上游添加健康检查 API 端点
为了定期检查 API 的健康状况,APISIX 需要上游服务健康端点的 HTTP 路径。因此,您首先需要/health
为后端服务添加端点。然后,您可以检查该服务最相关的指标,例如内存使用情况、数据库连接性、响应时长等等。假设我们在演示项目中运行了两个后端 REST API 服务 web1 和 web2,并且每个服务在 URL 路径 处都有各自的健康检查/health
端点。此时,您无需进行其他配置。实际上,您可以将它们替换为您的后端服务。
验证服务状态的最简单、最标准化的方法是定义一个新的 健康检查 端点,例如
/health
或/status
在 APISIX 中设置健康检查
此过程涉及检查“上游”节点的运行状态。APISIX 提供两种类型的健康检查:主动检查和被动检查。点击此处了解更多关于健康检查及其启用方法的信息。使用管理 API创建一个上游对象。以下是创建包含两个节点(每个我们定义的后端服务)的上游对象并在上游对象中配置健康检查参数的示例:
curl "http://127.0.0.1:9180/apisix/admin/upstreams/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"nodes": {
"web1:80": 1,
"web2:80": 1
},
"checks": {
"active": {
"timeout": 5,
"type": "http",
"http_path": "/health",
"healthy": {
"interval": 2,
"successes": 1
},
"unhealthy": {
"interval": 1,
"http_failures": 2
}
}
}
}'
/health
此示例在节点的终端节点上配置了主动健康检查。一次健康检查成功后,该节点被视为健康;两次健康检查失败后,该节点被视为不健康。
请注意,如果您在 docker 网络之外运行服务,有时可能需要上游节点的 IP 地址,而不是它们的域名(
web1
和web2
)。根据设计,仅当节点数量(解析的 IP)大于 1 时才会启动健康检查。
启用 Prometheus 插件
通过添加plugins 选项, 创建一条全局规则, prometheus
在所有路由上启用该插件 。APISIX 会收集内部运行时指标,并默认通过 Prometheus 可以抓取的端口 和 URI 路径 公开这些指标。您还可以通过在 Prometheus 配置文件中配置来自定义导出端口和URI 路径、添加额外标签、抓取频率以及其他参数。"prometheus": {}
9091
/apisix/prometheus/metrics
/prometheus_conf/prometheus.yml
curl "http://127.0.0.1:9180/apisix/admin/global_rules" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '{
"id": "rule-for-metrics",
"plugins": {
"prometheus":{}
}
}'
创建路线
创建一个Route对象以将传入的请求路由到上游节点:
curl "http://127.0.0.1:9180/apisix/admin/routes/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"name": "backend-service-route",
"methods": ["GET"],
"uri": "/",
"upstream_id": "1"
}'
向路由发送验证请求
为了生成一些指标,您尝试向我们在上一步中创建的路由发送一些请求:
curl -i -X GET "http://localhost:9080/"
如果您多次运行上述请求,您可以从响应中看到 APISX 将一些请求路由到 ,node2
而将其他请求路由到node2
。这就是网关负载均衡的工作原理!
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 10
Connection: keep-alive
Date: Sat, 22 Jul 2023 10:16:38 GMT
Server: APISIX/3.3.0
hello web2
...
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 10
Connection: keep-alive
Date: Sat, 22 Jul 2023 10:16:39 GMT
Server: APISIX/3.3.0
hello web1
使用 Prometheus 插件收集健康检查数据
在 APISIX 中配置健康检查和路由后,您就可以使用 Prometheus 来监控健康检查了。如果上游节点启用了健康检查参数,APISIX 会自动公开API 的健康检查指标数据。从 APISIX 获取指标后,您将在响应中看到它们:
curl -i http://127.0.0.1:9091/apisix/prometheus/metrics
示例输出:
# HELP apisix_http_requests_total The total number of client requests since APISIX started
# TYPE apisix_http_requests_total gauge
apisix_http_requests_total 119740
# HELP apisix_http_status HTTP status codes per service in APISIX
# TYPE apisix_http_status counter
apisix_http_status{code="200",route="1",matched_uri="/",matched_host="",service="",consumer="",node="172.27.0.5"} 29
apisix_http_status{code="200",route="1",matched_uri="/",matched_host="",service="",consumer="",node="172.27.0.7"} 12
# HELP apisix_upstream_status Upstream status from health check
# TYPE apisix_upstream_status gauge
apisix_upstream_status{name="/apisix/upstreams/1",ip="172.27.0.5",port="443"} 0
apisix_upstream_status{name="/apisix/upstreams/1",ip="172.27.0.5",port="80"} 1
apisix_upstream_status{name="/apisix/upstreams/1",ip="172.27.0.7",port="443"} 0
apisix_upstream_status{name="/apisix/upstreams/1",ip="172.27.0.7",port="80"} 1
健康检查数据以指标标签 表示。它具有上游、和 等apisix_upstream_status
属性。值为 1 表示健康,值为 0 表示上游节点不健康。name
ip
port
在 Prometheus 仪表板中可视化数据
导航到http://localhost:9090/ , Prometheus 实例正在 Docker 中运行,并在搜索栏中输入Expression 。您还可以在 Prometheus 仪表板的表格或图形视图中apisix_upstream_status
查看上游节点的运行状况检查状态的输出:
清理
完成对 Prometheus 和 APISIX Gateway 健康检查指标的实验后,您可以使用以下命令停止和删除本指南中创建的服务:
docker compose down
后续步骤
现在,您已经学习了如何使用 Prometheus 和 APISIX 设置和监控 API 健康检查。APISIX Prometheus 插件已配置为自动连接Grafana以可视化指标。继续探索数据,并通过添加显示活动健康检查数量的面板来自定义Grafana 仪表板。
相关资源
推荐内容
社区
💁 如何贡献页面
鏂囩珷鏉ユ簮锛�https://dev.to/apisix/monitor-api-health-check-with-prometheus-4806