多Agent告警收敛与智能分诊流——把"告警风暴"变成"精准触达"
场景演示
深夜,运维群里突然炸了——
📩 10:02 DB-Server-01 CPU > 90%
📩 10:02 API-Gateway-03 响应时间 > 2s
📩 10:03 Payment-Service 错误率 2.3%
📩 10:03 Redis-Cluster-02 连接数上限
📩 10:04 Nginx-Upstream 504
……
5分钟,20+条告警涌进来。工程师手忙脚乱逐条查看,结果发现:根因只有一个——DB-Server-01的慢查询拖垮了整个链路的响应速度。
问题根源:告警没有收敛,全靠人肉去重。
用多Agent告警收敛与智能分诊流,告警进来 → Agent自动去重 → 根因分析 → 智能分诊 → 精准推送给对应负责人。全程无需人工干预,告警从20条压缩到1条。
Step by Step
第一步:建立告警采集Agent(采集层)
定时从监控系统(Prometheus、Zabbix、PagerDuty等)拉取未处理的告警事件,规范化后写入飞书Bitable作为待处理队列。
核心职责:
- 定时轮询告警源(每分钟)
- 统一告警格式:时间、级别、服务、指标、阈值、当前值
- 去重基础版:相同服务+相同指标+10分钟内有记录的,标记为重复
第二步:建立告警收敛Agent(收敛层)
读取待处理队列,执行告警压缩与根因推断。
收敛策略:
- 时间窗口合并:同一服务5分钟内的多条同类告警,合并为1条
- 链路关联分析:调用链追踪(Jaeger/OpenTelemetry),找到链路中最先出现异常的节点
- 根因推断:基于规则或AI判断是DB/中间件/网络/应用哪一层的问题
- 影响评估:该告警影响了哪些上层服务/多少用户
收敛后,每组告警压缩成一条"告警组",包含:根因服务、影响范围、关联告警数量、建议第一时间动作。
第三步:建立告警分诊Agent(分诊层)
根据告警类型、级别、影响范围,自动匹配值班人和处理流程。
分诊规则:
| 告警级别 | 触发条件 | 分诊动作 |
|---|---|---|
| P0 紧急 | 影响核心业务+影响用户 > 10% | 立即电话+短信+飞书通知值班SRE,附带一键拉群 |
| P1 高优 | 影响核心业务或影响用户 1-10% | 飞书机器人@值班工程师,5分钟无响应升级 |
| P2 中优 | 非核心服务异常或影响用户 < 1% | 飞书Bitable记录,下一个工作日处理 |
| P3 低优 | 监控指标波动,无实际影响 | 仅记录,不通知 |
智能优化点:
- 夜间/节假日自动切换值班表
- 告警认领机制:有人接单后自动取消升级
- 重复告警抑制:同一根因30分钟内不重复升级
第四步:建立告警复盘Agent(闭环层)
告警处理完成后,触发复盘流程:
- 提取告警持续时长、响应时间、解决时间
- 自动生成告警复盘报告(时间线、根因、处理步骤)
- 更新知识库(知识条目→告警类型→标准处理SOP)
- 如果是已知根因,更新告警收敛规则的"已知根因库"
可复制提示词
告警收敛Agent提示词
你是一个告警收敛专家。读取以下告警列表,进行收敛处理:
## 收敛规则
1. 时间窗口:5分钟内同类告警合并为1组
2. 链路关联:找到调用链中最早异常的节点,作为根因
3. 影响范围:评估该告警影响多少服务和用户
## 输出格式(JSON)
{
"group_id": "告警组ID",
"root_cause_service": "根因服务名",
"root_cause_type": "DB/网络/中间件/应用/未知",
"related_alerts": ["告警1", "告警2"],
"affected_services": ["服务A", "服务B"],
"affected_users_pct": "估算影响用户百分比",
"first_action": "建议的第一步动作",
"priority": "P0/P1/P2/P3"
}
## 告警列表
{ALERT_LIST}
只输出JSON,不要其他文字。
告警分诊Agent提示词
你是一个告警分诊专家。根据以下告警组信息,决定分诊动作:
## 分诊规则
- P0:影响核心业务+用户>10%,立即电话+短信+飞书
- P1:影响核心业务或用户1-10%,飞书@工程师,5分钟无响应升级
- P2:非核心或用户<1%,Bitable记录,下个工作日处理
- P3:仅波动无影响,仅记录不通知
## 当前告警组信息
{ALERT_GROUP_INFO}
## 今日值班表
{ON_CALL_TABLE}
## 输出格式(JSON)
{
"priority": "P0/P1/P2/P3",
"action": "通知类型",
"notify_to": "通知对象(姓名+联系方式)",
"message": "告警通知内容(含根因、影响、建议动作)",
"escalation_after_min": "无响应升级时间(分钟)",
"create_ticket": true/false,
"ticket_title": "工单标题"
}
使用的Skills
| 步骤 | 技能 | 用途 |
|---|---|---|
| 告警采集 | browser-automation | 登录监控系统抓取告警 |
| 告警采集 | feishu-bitable | 写入/读取告警待处理队列 |
| 告警收敛 | tavily-search | 查询同类告警的历史处理记录 |
| 告警分诊 | feishu-bitable | 查询值班表、写入工单 |
| 通知触达 | feishu_chat | 飞书消息/机器人通知 |
| 复盘闭环 | feishu-bitable | 更新知识库和SOP |
| 定时调度 | OpenClaw cron | 每分钟触发告警采集 |
价值与注意事项
核心价值
- 告警压缩:从20+条降到1-2条,工程师不再"告警疲劳"
- 响应提速:P0告警从发现到电话通知,压缩到2分钟内完成
- 闭环可控:每个告警都有记录、有跟进、有复盘,知识库持续积累
避坑指南
- 不要跳过收敛直接通知:未收敛的告警直接通知,等于制造新的噪音
- 值班表必须维护:分诊依赖准确的值班表,节假日表必须提前更新
- P0定义要严格:过度泛化P0范围会导致狼来了效应,工程师不再信任告警
- 根因库持续积累:每次复盘后更新已知根因库,告警收敛准确率会越来越高
适用场景
- 有多套监控系统的研发团队(Prometheus + Zabbix + 商业监控)
- 告警疲劳严重的SRE/DevOps团队
- 需要7×24告警值班的互联网公司
- 告警通知渠道分散(飞书+钉钉+短信+电话)的复杂场景
本专栏聚焦OpenClaw在真实工作场景中的高价值应用,每周更新。