告警应仅针对需人工介入且影响业务可用性或稳定性的确定性问题。按层级分P0基础设施、P1控制平面、P2工作负载三级告警,配合PromQL精准过滤、静默抑制及Alertmanager闭环管理。

明确告警目标:只让真正需要响应的问题“叫醒你”
告警不是越多越好,而是越准越好。Kubernetes环境复杂、指标繁多,若不加区分地将所有异常都设为告警,会导致“告警疲劳”,关键问题反而被淹没。核心原则是:**告警 = 需要人工介入的、影响业务可用性或稳定性的确定性问题**。比如:Pod 持续 CrashLoopBackOff 超过 5 分钟、API Server 不可访问、核心服务 HTTP 错误率突增至 20% 且持续 2 分钟——这些才该触发告警;而单个节点 CPU 短时飙升、etcd leader 切换(只要恢复快)通常应归入日志或仪表盘观察,而非告警。
分层设计告警策略:按对象与严重性划清责任边界
把告警按 Kubernetes 抽象层级和业务影响分级,能显著提升响应效率:
- 基础设施层(P0):节点 NotReady、kubelet 不存活、网络插件 DaemonSet 全量失败。这类告警必须立即响应,通常路由给 SRE 或平台团队,走电话/短信通道。
- 控制平面层(P1):etcd 高延迟、Scheduler/ControllerManager 持续不可用、API Server 5xx 错误率 > 5%。影响集群管理能力,需 15 分钟内响应,走企业微信/钉钉+邮件。
- 工作负载层(P2):Deployment 可用副本数不足、HPA 频繁扩缩、自定义业务指标(如订单处理延迟 > 3s)超阈值。由对应业务团队负责,仅推送到群聊或邮件。
- 观测辅助层(非告警):资源使用率趋势、Pod 重启次数周环比上升、日志关键词频次——放入 Grafana 看板或 Loki 告别告警,用于日常巡检与容量规划。
用 PromQL 和标签做精准降噪:过滤掉“假阳性”和“已知扰动”
很多无效告警源于规则太宽泛。Prometheus 告警规则(Alerting Rules)必须结合 Kubernetes 原生标签和业务语义做精细过滤:
- 排除测试/预发环境:
namespace!~"^(test|staging)-.*$" - 忽略短期抖动:用
rate()+avg_over_time()组合替代瞬时值,例如检测 5 分钟平均错误率而非单点采样。 - 关联状态避免重复:对同一故障链路,只在最上层触发告警。例如,若已告警 “Service Ingress 流量中断”,就不再单独告警 “后端 Pod 全部 NotReady”,除非后者独立存在风险。
- 利用静默(Silence)和抑制(Inhibit):对计划内维护(如节点滚动重启),提前创建静默;用 Inhibit 规则压制下游衍生告警(如抑制 “NodeDown” 时的 “PodNotScheduled”)。
告警闭环不能只靠 Prometheus:打通响应与验证链路
一个好告警系统必须支持“发现 → 分派 → 处理 → 验证 → 归档”。建议组合使用:
- Alertmanager 负责去重、分组、静默、路由,并通过 Webhook 推送至 ChatOps 工具(如 Slack、DingTalk);
- 在告警消息中嵌入可点击的 Grafana 快速视图链接、Kubectl 诊断命令模板(如
kubectl get pod -n $namespace --field-selector status.phase=Failed); - 对接 CMDB 或服务目录,自动带出负责人、SLA 级别、应急预案文档链接;
- 设置“自动关闭”条件:例如某告警触发后,若 10 分钟内对应指标恢复正常且无新触发,则自动标记为 resolved,避免堆积陈旧告警。









