告警分类与分级

搞告警处置,第一件事就是把告警分清楚。别急着搭平台、写规则,先问自己三个问题:谁该响应?多快响应?怎么响应?答案都在分类分级里。

我记得刚做SRE那会儿,团队把Prometheus所有告警都往一个群里怼。结果呢?半夜告警刷屏,大家先瞪眼“这是啥?”,然后挨个查,最后干脆集体开静音。说白了,没有分类分级,告警就是噪音。

我习惯先按类型划分,再定级别。为什么?因为类型决定处理团队,级别决定响应速度,两个维度一交叉,处置路径就清晰了。

告警类型:基础设施、应用、安全、业务

告警按来源可以分为四大类。我在项目中踩过一个坑:把数据库连接池告警归到“应用层”,结果数据库团队没收到,应用团队又没权限看DB日志,硬生生拖了15分钟才发现是连接泄露。从那以后,我坚持类型归属必须明确。

类型典型场景响应方特点
基础设施CPU ≥ 90%、磁盘满、网络丢包、节点宕机基础设施/SRE规模效应明显,一个告警可能代表一批机器
应用接口延迟、错误率突增、进程OOM、慢SQL应用开发/业务SRE和代码强相关,通常需要看日志和调用链
安全暴力破解、异常登录、SQL注入、WAF拦截安全团队涉及攻击溯源,需要保留现场证据
业务下单失败率、支付超时、转化率下降业务运营/产品直接关联收入,指标往往需要自定义

实际生产中还会有网络、存储、中间件等细分,但大类上跑不出这四块。你想想看,如果一个告警同时涉及多个类型,比如“应用部署后CPU飙高”,那就得靠标签(tags)来区分侧重点——别怕标签多,后期告警聚合全靠它。

告警级别:P0~P4,响应行为驱动

级别不是拍脑袋定的。我见过最糟的做法:把所有告警等级设成“紧急”。结果呢?真出大故障时,大家都麻木了。分级的核心原则是:级别越高,对人的打扰越深,越需要自动化兜底。

一个实用的分级参考(P0-P4):

级别含义响应要求示例
P0核心服务不可用,资损、大规模故障立即响应(≤5分钟),需要拉起War Room全站502、数据库主库宕机
P1重要功能受损,影响大量用户10分钟内响应,需指定责任人订单列表接口超时、支付成功率下降20%
P2非核心功能异常,或部分用户受影响30分钟内响应,工作时间优先某地域节点网络抖动、后台报表延迟
P3低风险问题,不影响用户工作日8小时内响应,可放入工单磁盘使用率80%、证书即将到期
P4信息提示,无需立即处理不强制响应,记录归档即可业务指标日报、版本发布通知

个人小技巧:给每个级别配一个响应超时自动升级的机制。比如P1级别15分钟无人认领,自动升级为P0并通知Duty Manager。我曾经在凌晨三点被P0叫醒,结果是P2没认领自动升级的猫腻——后来我们加了一条“认领后自动降级”,才解决问题。

类型 + 级别 = 处置矩阵

把类型和级别组合起来,就是一个清晰的分诊表。我习惯用一个二维矩阵来分配响应流程:

# 伪代码示例:根据类型+级别选择处理器
def dispatch_alert(alert):
    if alert.level == 'P0':
        if alert.type == '安全':
            trigger_security_war_room()
        elif alert.type == '基础设施':
            call_infra_oncall()
        # ...
    elif alert.level == 'P2':
        if alert.type == '业务':
            create_biz_ticket(alert)
        # ...

实际工程中,我会把这些规则直接写死到告警引擎(比如Alertmanager的路由配置)。别让On-Call人员自己去想“这个告警应该找谁”——系统替他决定。

一段避坑指南

我曾经把P0定成“服务不可用”,结果线上实例内存泄露,一部分客户端超时、一部分正常。仲裁失败了?告警引擎判定为“部分可用”,只发了P2。等大量用户投诉时,已经过去1小时。后来我改了定义:带影响范围的量化标准(比如“错误率>5%且持续3分钟”才算P0),而不是纯逻辑判断。

千万不要死守标准。告警级别的阈值得随着系统演变定期调整。我见过一个团队,数据库连接数P0阈值设为80%,结果版本上线后连接池增加,80%变成常态——P0告警天天响,大家直接忽略,直到真的挂掉。所以每次大版本发布后,重新审视一次告警阈值,很有必要。

下面这张图总结了我常用的分类分级体系。嗯,你照着这个结构去搭建自己的告警模型,基本不会出大错。

告警分类分级体系 告警(Alerts) 按类型分类 按级别分类 基础设施 应用 安全 P0 - 紧急 P1 - 严重 P2 - 一般 分级决定响应时效,分类决定处理团队 ——类型+级别交叉,形成完整的告警分诊矩阵

快速上手建议:先用你线上最高频的20条告警做一次分类分级,然后对照上面的矩阵看看有没有漏掉的组合。跑通一条完整链路再扩量,没必要一开始就追求完美。

记住:分类分级的最终目的是让正确的人,在正确的时间,用正确的方式去响应告警。别让工具定义流程,而是流程驱动工具。下一轮我们聊聊告警收敛和通知路由,但先把这个根基打牢——后面所有自动化都是建立在这个分类分级之上的。