主题
Prometheus 生产检查清单
适用 Prometheus 2.x + Alertmanager 0.2x。每条都可勾选,括号内是默认值或判断依据;默认值以官方文档为准。 只列「不做会出事」的动作,机制解释见各篇正文。
上线前
- [ ] 抓取目标全覆盖:所有业务服务与 Exporter 都注册为 target,每个 job 显式写
scrape_interval(全局默认 1m,以官方文档为准),不依赖默认值。上线后用curl -s localhost:9090/api/v1/targets核对,up == 0必须为空。 - [ ] 指标基数有预算:禁止把 userId、orderId、traceId、原始 URL 放进 label;上线前跑
topk(10, count by (__name__)({__name__=~".+"})),为单指标序列数设上限并告警。高基数会直接推高内存、拖慢查询。 - [ ] 磁盘按保留期核算:
--storage.tsdb.retention.time=15d(默认,以官方文档为准),用每日新增样本量 × 15 天估算磁盘;使用率 70% 告警、85% 必须处置。本地 TSDB 只保留 15 天,回溯需求超过它要提前规划。 - [ ] 告警规则与路由一次配齐:5xx 错误率 >5% 持续 5m、P99 >1s 持续 5m、JVM heap >90% 持续 10m 三条规则必须存在,
for不短于 5m 且 severity 分 critical/warning;Alertmanager 配group_by、repeat_interval(默认 4h,以官方文档为准)和inhibit_rules,上线前amtool check-config通过,并发一条测试告警确认值班端真实收到。 - [ ] 分位数口径统一:Histogram bucket 边界覆盖 SLO(如 0.1/0.3/1/3s);P99 统一写
histogram_quantile(0.99, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))。多实例结果必须先按le聚合,否则分布被拆散、分位数失真。
运行中
- [ ] 抓取健康:
up == 0与scrape_duration_seconds / scrape_interval > 0.8都要告警;抓取超时表现为样本缺口,不是「少几个点」。 - [ ] 序列与内存水位:每周看
prometheus_tsdb_head_series环比,突增先查新上线服务的 label 设计;进程内存到 70% 预警。 - [ ] 规则执行不堆积:
prometheus_rule_group_last_duration_seconds必须小于evaluation_interval(默认 1m,以官方文档为准);prometheus_rule_evaluation_failures_total持续增长会导致告警延迟或漏报。重查询落成 recording rule,不在面板上实时算。 - [ ] 告警质量与查询成本周检:
ALERTS{alertstate="firing"}中持续 >7 天的告警、长期静默的规则要改阈值或删除;Grafana 大范围、高基数查询改走 recording rule,避免把 TSDB 打满。
故障时
- [ ] 告警不响/面板无数据 → 查
up{job="xxx"}与/api/v1/targets→ 为 0 时先查目标进程、网络和抓取配置,不要先改告警规则。 - [ ] 告警风暴 → Alertmanager UI 或
amtool alert query→ 看是否for: 0m、group_by带了高基数 label、同一故障多条规则未抑制;补for、加inhibit_rules、合并规则。 - [ ] Prometheus 内存暴涨/查询超时 →
topk(10, count by (__name__)({__name__=~".+"}))+prometheus_tsdb_head_series→ 定位高基数指标,用 relabel/drop 或改 label 设计,不要只加内存。 - [ ] P99 明显失真 → 检查查询是否
sum by (le)、bucket 是否覆盖目标延迟 → 多实例未按le合并会算出错误分位数;缺桶时补 bucket 边界。 - [ ] 指标曲线断点或计数器归零 →
resets(http_requests_total[1h])、process_start_time_seconds→ 进程重启导致 counter reset,统计一律用rate/increase,不要用原始值相减。 - [ ] TSDB 磁盘将满 → 使用率 >85% → 先扩盘或调小 retention,禁止手工删除 block 目录,否则可能损坏 TSDB。