跳到主要内容

健康检查指标

介绍

健康检查指标是监控分布式系统的重要组成部分,它们帮助开发者快速判断服务是否正常运行。在 Jaeger(一个开源的分布式追踪系统)中,健康检查指标用于验证各个组件(如 Collector、Query、Agent)的状态,确保它们能够正确处理请求和数据。

对于初学者来说,理解健康检查指标就像学习如何检查汽车的油压和水温——它们是系统“健康”的第一道防线。

为什么需要健康检查指标?

在微服务架构中,服务可能因为网络问题、资源耗尽或代码缺陷而不可用。健康检查指标通过定期探测服务的关键功能(如数据库连接、内存使用率),提供以下价值:

  • 快速故障检测:在用户受影响前发现问题
  • 自动化恢复:配合编排工具(如 Kubernetes)实现自动重启
  • 运维可见性:通过仪表盘集中展示系统状态

Jaeger 的健康检查端点

Jaeger 组件默认提供 HTTP 健康检查端点(通常为 /healthz),返回简单的 JSON 响应。例如查询 Jaeger-Query 的健康状态:

curl http://localhost:16687/healthz

响应示例:

{
"status": "UP",
"components": {
"db": {
"status": "UP",
"details": {
"backend": "memory"
}
}
}
}

关键字段说明:

  • status: "UP" 表示服务健康
  • components 显示子组件状态(如数据库连接)

核心健康检查指标

Jaeger 的健康检查通常关注以下指标类型:

1. 存活检查(Liveness)

检测服务是否崩溃,需要重启。例如:

2. 就绪检查(Readiness)

检测服务是否准备好接收流量。以下代码展示如何在 Go 中实现自定义检查:

// 示例:自定义存储后端健康检查
func readinessHandler(w http.ResponseWriter, r *http.Request) {
if storageBackend.Ping() != nil {
w.WriteHeader(http.StatusServiceUnavailable)
return
}
w.WriteHeader(http.StatusOK)
}

3. 关键依赖检查

验证数据库、消息队列等依赖项:

// 健康响应示例(包含依赖项)
{
"status": "DOWN",
"details": {
"redis": {
"status": "DOWN",
"error": "connection timeout"
}
}
}

实际应用案例

场景:电商平台发现 Jaeger 追踪数据突然缺失

排查步骤

  1. 检查 Collector 健康状态:curl -s collector:14269/healthz | jq .
  2. 发现响应中 "kafka": "DOWN"
  3. 确认 Kafka 集群磁盘已满
  4. 扩容后指标恢复 "status": "UP"
生产环境建议
  • 为健康检查设置独立端口(避免与业务流量竞争)
  • 添加延迟阈值(避免服务启动时的误报)
  • 监控历史数据(如 Prometheus 收集 health_check_status

总结

健康检查指标是 Jaeger 监控体系的基础设施,通过本指南你已了解:

  • 健康检查的 3 种主要类型
  • 如何通过 HTTP 端点获取状态
  • 实际故障排查中的使用方法

扩展练习

  1. 使用 Docker 部署 Jaeger 并测试各组件健康端点
  2. 编写脚本定期检查健康状态,失败时触发告警
  3. 尝试在 Kubernetes 中配置 liveness/readiness 探针

附加资源