就绪端点失败时 up 仍可为一,直到独立的指标端点也失败。

Docker 健康状态与 Prometheus up 回答不同问题

Docker 健康状态与 Prometheus 的 up 序列来自不同检查。Compose 健康检查在应用容器内运行命令;Prometheus 则独立抓取配置的指标端点,并记录抓取是否成功。两项观察可以合理地不一致,因为应用可能已经无法处理有用工作,却仍能提供指标,也可能业务正常而指标端点损坏。理解区别,才能避免用一个绿灯替代全部服务状态。 坏掉的样子 把 up=1 解释成应用已经就绪,可能掩盖故障。它说明目标指标抓取成功,不说明登录、数据库写入或其他业务操作成功。对于这些问题,需要合适的行为指标或外部探测。自定义就绪 gauge 可以有用,但具体含义必须由应用契约定义,不能仅凭名字叫 ready,就认为它覆盖了所有必需依赖。 反向误解是认为 Docker 健康状态会自动导出到 Prometheus。Compose 中定义 healthcheck,不会自动创建 Prometheus 指标,也不会配置抓取目标。需要 exporter 或应用埋点明确暴露所需观察。即使完成导出,采集路径和新鲜度也与引擎健康状态不同,需要知道更新延迟和失败方式,才能解释不一致。 两种观察都不会自动定义重启或路由动作。Docker 的 restart: always 处理容器终止;容器仍在运行时,不会仅因 unhealthy 就重启。监控可以根据证据告警,明确配置的控制器可以采取动作,但这些连接不会因为两个工具恰好位于同一个 Compose 项目里就凭空出现。观察、告警和修复需要分别验证。 快速验证 使用宿主 Python、Docker Compose 和两个固定镜像运行脚本。实测为 Compose 5.1.1、Docker 29.3.1、Python 3.11.16,以及 Linux arm64 上的 Prometheus 3.5.1。它构建临时 Prometheus 配置镜像,创建唯一项目,只把 Prometheus API 发布到宿主回环地址,结束时清理自身项目、数据卷和标签: ...

二月 21, 2028 · 2 分钟 · XB Field Notes