Prometheus 故障排查
排查 Prometheus 时先确认故障层级:进程、配置、目标、查询、规则、存储或网络。不要只看到 Dashboard 无数据就重启服务,重启可能掩盖 WAL、磁盘或高基数问题。
1. Prometheus 启动失败
sudo systemctl status prometheus --no-pager
sudo journalctl -u prometheus -n 200 --no-pager
promtool check config /etc/prometheus/prometheus.yml
优先检查 YAML 缩进、规则文件路径、端口占用、数据目录权限、磁盘空间和不兼容的启动参数。升级后启动失败时,先对照发布说明和回滚方案,不要直接删除数据目录。
2. Target Down
在 Targets 页面查看具体错误,再从 Prometheus 所在网络验证 DNS、TCP、TLS 和 /metrics。常见原因包括 Exporter 未启动、监听在回环地址、证书过期、认证失败、NetworkPolicy 阻断、relabel 误删与抓取超时。
up == 0
sum by (job) (up == 0)
3. 指标缺失
- 执行裸指标,确认指标名是否真实存在。
- 去掉标签过滤,检查标签键和值是否已变更。
- 检查 Target 采集时间与
scrape_samples_scraped是否异常。 - 检查
metric_relabel_configs、Exporter 采集器开关与应用版本。 - 检查查询时间范围、数据保留和目标重建后的标签变化。
4. PromQL 查询慢
优先缩小时间范围和标签范围,在 Prometheus 查询页面或 Grafana Query Inspector 查看实际表达式与耗时。高基数标签、宽泛正则、长时间范围、重复复杂聚合和大量 Dashboard 自动刷新是常见原因。
治理顺序:优化表达式与变量范围,建立 Recording Rule,限制看板刷新和并发,最后再评估扩容、分片或长期存储架构。
5. TSDB 异常
TSDB 相关症状包括重启后 WAL 重放很慢、查询错误、compaction 失败和内存持续增长。检查进程日志、prometheus_tsdb_head_series、WAL/Block 磁盘空间、文件系统错误和最近指标标签变更。
不要在运行中手工删除 WAL 或 Block。任何修复、快照恢复或数据目录操作都应先确认版本、备份和恢复路径,并在隔离环境演练。
6. 存储空间不足
df -h /var/lib/prometheus
df -i /var/lib/prometheus
确认是 Block、WAL、日志还是其他文件占用空间。短期可按变更流程扩容持久卷或调整经过评审的保留策略;长期应审查活跃序列、抓取间隔、标签基数和远端存储架构。不要通过删除未知 Block 释放空间。
排障记录
每次重大故障记录发现时间、影响范围、关键指标、配置/发布变更、根因、恢复操作和预防项。将可重复的检查步骤补充到运行手册和告警注释中。