docker容器自动化巡检需构建“事件监听—结构化检查—健康探测—可观测集成”闭环链路:一用docker events实时捕获start/die/oom等关键事件并过滤标签;二定时执行脚本采集状态、资源、健康及日志异常指标并输出结构化报告;三结合healthcheck主动探测应用层健康信号;四将日志、指标、告警接入loki/prometheus/grafana实现统一可观测。

Docker 容器运行状态的自动化巡检,核心是把“查什么、怎么查、查完做什么”串成一条可执行、可监控、可反馈的链路,而不是靠人工敲 docker ps 或写临时脚本。
关键不在于多,而在于稳、准、可追溯。
一、用 docker events 实时捕获状态变化
这是最轻量、最原生的触发方式,无需轮询,事件驱动:
- 监听
start、die、kill、oom、health_status: unhealthy等关键事件 - 过滤出带特定标签的容器(如
com.example.monitor=enabled),避免全量干扰 - 示例命令(后台常驻监听):
docker events --filter 'event=start' --filter 'label=com.example.monitor=enabled' --format '{{.ID}} {{.Status}} {{.Actor.Attributes.name}}' >> /var/log/docker-events.log
✅ 优势:低开销、实时性强;❌ 注意:需配合日志轮转与权限管理,避免日志撑爆磁盘。
二、定时执行结构化巡检脚本
不是简单 docker ps -a,而是按维度采集关键指标并生成结构化报告:
-
基础状态:
Status、Health、RestartCount、OOMKilled -
资源水位:
docker stats --no-stream --format "{{.Name}},{{.CPUPerc}},{{.MemPerc}}" -
健康探针结果:
docker inspect --format='{{.State.Health.Status}}' <container></container> -
日志异常关键词:
docker logs --since 1h <container> | grep -E "(panic|error|failed|timeout)" | tail -10</container>
建议用 Python 或 Bash 封装为单文件脚本,输出 JSON 或 Markdown 报告,例如:
{
"timestamp": "2026-08-13T19:45:00Z",
"unhealthy_containers": ["api-service", "cache-worker"],
"oom_killed": ["batch-processor"],
"high_cpu": ["log-aggregator"]
}
✅ 输出可被 Prometheus 抓取、Grafana 展示,也可邮件/钉钉推送;❌ 避免在脚本中硬编码容器名,优先通过 label 或正则匹配服务前缀。
三、结合健康检查指令做主动探测闭环
仅依赖 docker ps 是被动的,必须叠加应用层健康信号:
- 在 Dockerfile 或
docker-compose.yml中声明HEALTHCHECK - 推荐配置含
--start-period(防启动假死)、--retries(防瞬时抖动) - 示例(Docker Compose):
healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"] interval: 20s timeout: 5s retries: 3 start_period: 60s
巡检脚本可定期调用 docker inspect 提取 .State.Health.Log,分析最近几次检查的响应时间、错误原因,比单纯看 Status 更有诊断价值。
四、集成到统一可观测平台
巡检结果不能只存在本地文件里:
- 日志:用
docker logs --tail 100+ Filebeat 推送到 Loki - 指标:用
cAdvisor或自定义 exporter 暴露/metrics,供 Prometheus 抓取 - 告警:基于 Prometheus rule 触发,比如 “连续 3 次
Health.Status == 'unhealthy'” 就发企业微信 - 可视化:Grafana 看板聚合「健康率趋势」「重启热力图」「异常日志 TOP10」
✅ 真正实现“一眼看清全局,一点定位根因”;❌ 切忌各扫门前雪——巡检、监控、告警三者脱节,等于没巡。
不需要复杂工具链,从 docker events + 定时脚本 + HEALTHCHECK + Prometheus 就能搭出稳定可靠的自动化巡检体系。











