跳到正文

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。

把一门技术讲透到既懂也会用