深色模式
监控盲区导致的迟发现
摘要:故障被用户先发现,说明监控存在盲区。本文用四黄金信号(延迟、流量、错误、饱和度)自查覆盖范围,指出最常见的几类盲区,并给出补指标的优先级顺序。
适用环境
bash
curl -sS http://<prometheus>:9090/api/v1/targets 2>/dev/null | head -c 400
cat /etc/prometheus/prometheus.yml 2>/dev/null | head -401
2
2
排障步骤
第 1 步:复盘这次故障为什么没告警
按四黄金信号逐项确认是否有对应指标:
bash
# 延迟
curl -sS 'http://<prometheus>:9090/api/v1/query?query=histogram_quantile(0.99,rate(http_request_duration_seconds_bucket[5m]))' 2>/dev/null | head -c 400
# 流量
curl -sS 'http://<prometheus>:9090/api/v1/query?query=sum(rate(http_requests_total[5m]))' 2>/dev/null | head -c 300
# 错误
curl -sS 'http://<prometheus>:9090/api/v1/query?query=sum(rate(http_requests_total{status=~"5.."}[5m]))' 2>/dev/null | head -c 300
# 饱和度
curl -sS 'http://<prometheus>:9090/api/v1/query?query=node_load5' 2>/dev/null | head -c 3001
2
3
4
5
6
7
8
2
3
4
5
6
7
8
第 2 步:补齐缺失的信号
常见缺失项按优先级:
- 端到端拨测:从用户侧定时请求关键接口(最贴近真实体验)
- 业务级错误率:HTTP 5xx 之外,还包括"业务返回失败"的自定义指标
- P99 延迟:只有平均值会掩盖长尾
- 依赖健康度:下游调用耗时与错误率
- 饱和度:线程池队列、连接池使用率、磁盘 inode
bash
# 用 curl 做最简拨测,记录耗时与状态码
curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' -m 5 https://<域名>/health1
2
2
第 3 步:检查告警规则是否有效
bash
cat /etc/prometheus/rules/*.yml 2>/dev/null | grep -A 8 'alert:' | head -60
curl -sS 'http://<prometheus>:9090/api/v1/rules' 2>/dev/null | head -c 4001
2
2
静态阈值在流量波动下失效
固定 QPS 阈值在夜间会误报、在高峰会漏报。应使用同比/环比或基于分位数的动态基线。
第 4 步:确认采集端没有盲区
bash
curl -sS 'http://<prometheus>:9090/api/v1/targets?state=active' 2>/dev/null | grep -c '"health":"up"'
curl -sS 'http://<prometheus>:9090/api/v1/targets' 2>/dev/null | grep -c '"health":"down"'1
2
2
新扩容的实例未纳入采集,是"部分实例故障却无告警"的典型原因。
第 5 步:验证告警真的能触达
bash
curl -sS 'http://<alertmanager>:9093/api/v2/alerts' 2>/dev/null | head -c 4001
补告警后不做抑制会引发告警风暴
大量新增告警同时触发会淹没关键告警,反而降低响应效率。应配置分组、抑制与分级路由。
验证
bash
# 触发一次可控的失败请求,确认指标与告警链路端到端可用
curl -sS -o /dev/null -w '%{http_code}\n' https://<域名>/nonexistent-probe-path
curl -sS 'http://<prometheus>:9090/api/v1/query?query=up' 2>/dev/null | head -c 3001
2
3
2
3
常见坑
只监控资源,不监控业务
CPU、内存全绿但订单成功率掉到 0,是最典型的监控盲区。
健康检查通过不代表可用
只探活不探业务的健康检查会让"假死"完全不告警。
告警太多导致麻木
长期大量无效告警会让团队忽略告警,等同于没有监控。定期清理无行动价值的告警。
为消除告警直接调高阈值或静默
静默不等于修复。应记录每条被静默告警的责任人与恢复条件,避免永久失效。