Apache APISIX 实战:使用Prometheus监控API健康检查
前言
在现代微服务架构中,API网关的健康状况直接影响着整个系统的稳定性。Apache APISIX作为高性能API网关,提供了强大的健康检查机制和监控能力。本文将详细介绍如何利用APISIX的健康检查功能配合Prometheus实现API服务的全方位监控。
健康检查基础概念
什么是健康检查
健康检查是API网关定期检测后端服务可用性的机制,主要分为两种类型:
- 主动检查(Active Checks):网关主动发送请求到后端服务的健康检查端点
- 被动检查(Passive Checks):网关根据实际请求的响应情况判断后端健康状态
为什么需要健康检查
- 及时发现故障节点,避免请求被路由到不可用的服务
- 自动从负载均衡池中剔除不健康节点
- 监控系统整体健康状况
- 实现服务自愈的基础
环境准备
基础组件
- APISIX:作为API网关核心
- etcd:存储APISIX配置数据
- Prometheus:监控数据收集和存储
- 后端服务:至少两个实例用于演示负载均衡
工具要求
- Docker及Docker Compose:用于快速部署环境
- cURL:用于测试API接口
配置健康检查
创建上游服务(Upstream)
健康检查配置主要在Upstream对象中定义。以下是一个典型配置示例:
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
}
}
}
}'
关键参数说明:
timeout
:健康检查请求超时时间(秒)http_path
:健康检查端点路径healthy.interval
:健康节点检查间隔healthy.successes
:成功次数判定为健康unhealthy.http_failures
:失败次数判定为不健康
健康检查最佳实践
- 端点设计:建议使用标准路径如
/health
或/status
- 检查频率:根据业务需求平衡,太频繁会增加负担,太少则不够及时
- 超时设置:应略短于业务接口超时时间
- 成功标准:建议至少2次成功才判定为健康,避免偶发成功
集成Prometheus监控
启用Prometheus插件
APISIX通过插件机制暴露监控指标:
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":{
}
}
}'
关键监控指标
APISIX暴露的健康检查相关指标包括:
apisix_upstream_status
:上游节点健康状态(1健康/0不健康)apisix_http_status
:HTTP状态码统计apisix_http_requests_total
:请求总数
自定义Prometheus配置
可以在prometheus.yml
中调整:
scrape_configs:
- job_name: 'apisix'
scrape_interval: 15s
metrics_path: '/apisix/prometheus/metrics'
static_configs:
- targets: ['apisix:9091']
数据可视化与分析
Prometheus基础查询
-
查看所有上游节点状态:
apisix_upstream_status
-
筛选特定上游的健康节点:
apisix_upstream_status{name="/apisix/upstreams/1", value="1"}
Grafana仪表板
建议使用APISIX官方提供的Grafana仪表板模板,可以直观展示:
- 各上游节点健康状态变化
- 请求成功率趋势
- 异常状态码分布
- 系统负载情况
故障排查指南
常见问题
-
健康检查不生效:
- 检查Upstream配置是否正确
- 确认后端服务健康检查端点可访问
- 检查网络连通性
-
指标数据缺失:
- 确认Prometheus插件已启用
- 检查Prometheus配置的抓取目标
- 验证APISIX指标端点可访问
-
状态波动频繁:
- 调整健康检查间隔和阈值
- 检查后端服务稳定性
- 考虑增加健康检查的宽容度
进阶配置
自定义健康检查逻辑
除了HTTP检查,APISIX还支持:
- HTTPS检查:配置SSL证书验证
- TCP检查:针对非HTTP服务
- 自定义成功条件:基于响应内容判断
多维度标签
可以为指标添加业务相关标签,便于分类统计:
"plugins":{
"prometheus":{
"labels":{
"env":"$host",
"service":"$service_name"
}
}
}
总结
通过APISIX的健康检查机制配合Prometheus监控,我们可以:
- 实时掌握API服务健康状况
- 快速定位故障节点
- 基于数据优化系统配置
- 构建更可靠的微服务体系
这种组合为API网关提供了强大的可观测性能力,是构建高可用系统的关键组件。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考