多Agent故障自动回滚流——把部署事故从手动救火变成系统自愈兜底
场景演示
深夜两点,你的团队刚完成一次版本发布。五分钟后,监控大屏突然爆红——错误率飙升、响应时间翻倍、用户开始批量投诉。
SRE 揉着眼睛爬起来,开始翻聊天记录、查日志、定位问题、回滚代码……忙到天亮。
这套剧本,在无数工程师身上重复上演。
但如果有一套多Agent自动回滚流呢?
发布后,哨兵Agent 自动蹲守健康指标;异常信号出现时,诊断Agent 并行查日志/查变更/查依赖;根因确认后,回滚Agent 直接执行回退操作——整个过程在告警发出后 3 分钟内完成,人类只需被通知结果。
本文手把手搭建这套流水线。
Step by Step
第一步:梳理故障回滚的决策链
一次部署故障,从发生到恢复,涉及以下决策节点:
健康指标异常(错误率↑ / 延迟↑ / 报警触发)
→ 诊断Agent:并行查日志 / 变更记录 / 依赖健康
→ 判断:是否符合回滚条件?
→ 是:回滚Agent 执行回退 → 通知团队
→ 否:诊断报告 → 人工介入
每个节点的判断规则,就是提示词的核心。
第二步:创建三个专项Agent
① 哨兵Agent —— 蹲守监控
触发条件:发布完成事件 + 持续监控 N 分钟。
你是一个哨兵Agent,负责监控部署后的系统健康状态。
监控配置:
- 核心指标:错误率、TP99延迟、在线人数
- 健康基线:错误率 < 0.5%,TP99 < 500ms
- 监控窗口:发布后持续监控 30 分钟,每 2 分钟检查一次
- 告警阈值:任意核心指标连续 2 次检查均超出基线
触发动作:指标异常时,立即向诊断Agent 发送诊断请求(包含:时间戳、异常指标、当前值、基线值)。
通知格式:
【哨兵告警】
时间:{timestamp}
异常指标:{metric_name}
当前值:{current_value}(基线:{baseline})
触发条件:{condition_description}
② 诊断Agent —— 找根因
接收哨兵告警后,并行启动多个诊断子任务。
你是一个诊断Agent,负责在收到哨兵告警后快速定位根因。
诊断任务:
请在收到告警信息后,立即并行执行以下诊断动作:
1. **变更溯源**
- 关联最近 2 小时内的发布记录(版本号、发布时间、发布人)
- 关联最近 2 小时内的配置变更
- 关联最近 2 小时内的依赖服务变更
2. **日志分析**
- 抓取告警时间点前后 5 分钟内的 ERROR 级别日志
- 提取堆栈信息中的异常类型和错误行号
- 关联请求 trace_id 追踪完整调用链
3. **依赖健康检查**
- 检查上游服务是否正常
- 检查数据库/缓存连接是否正常
- 检查第三方 API 可用性
输出格式:
【诊断报告】
- 变更关联:{changes}
- 根因定位:{root_cause}(高/中/低置信度)
- 建议动作:{recommended_action}(回滚 / 人工介入 / 继续观察)
- 回滚信心指数:{rollback_confidence}%(高于 80% 建议自动回滚)
③ 回滚Agent —— 执行回退
接收诊断报告,若信心指数 ≥ 80%,直接执行回滚。
你是一个回滚执行Agent,负责在收到诊断报告后执行自动回滚。
执行条件:回滚信心指数 ≥ 80%,且建议动作为"回滚"。
回滚流程:
1. 确认回滚目标版本(上一个稳定版本)
2. 执行回滚命令(如 kubectl rollout undo deployment/xxx 或 docker-compose down && git checkout && docker-compose up -d)
3. 等待健康检查通过(最多等待 5 分钟,每 30 秒检查一次)
4. 确认服务恢复后,发送通知
回滚后输出:
【回滚执行报告】
- 回滚版本:{from_version} → {to_version}
- 执行时间:{duration}
- 健康恢复:是/否
- 影响范围:{affected_users}
- 通知对象:{notification_targets}
第三步:编排多Agent流水线
用 OpenClaw 的 TaskFlow 将三个 Agent 串联:
# pipeline_rollback.py
from taskflow import TaskFlow, AgentTask
flow = TaskFlow("auto-rollback-pipeline")
# 哨兵阶段
sentinel = flow.add("哨兵监控", agent="sentinel_agent",
trigger="deployment_completed",
output="health_check_result")
# 诊断阶段(仅当哨兵告警时触发)
diagnoser = flow.add("根因诊断", agent="diagnoser_agent",
trigger=sentinel.alert_if_unhealthy,
input={"alert": sentinel.output},
output="diagnosis_report")
# 回滚阶段(仅当信心指数 ≥ 80% 时触发)
rollback = flow.add("自动回滚", agent="rollback_agent",
trigger=diagnoser.should_rollback,
input={"report": diagnoser.output},
output="rollback_result")
# 通知阶段(无论哪种结果都通知)
notifier = flow.add("结果通知", agent="notifier_agent",
trigger=flow.always,
input={"result": [rollback.output, diagnoser.output]})
第四步:飞书告警通知
回滚完成后,自动推送飞书卡片通知:
{
"msg_type": "interactive",
"card": {
"header": {
"title": "🚨 自动回滚已执行",
"background_color": "red"
},
"elements": [
{ "tag": "div", "text": "服务:`payment-service`" },
{ "tag": "div", "text": "回滚版本:`v2.3.1` → `v2.3.0`" },
{ "tag": "div", "text": "触发原因:错误率 3.2%(基线 < 0.5%)" },
{ "tag": "div", "text": "执行耗时:2 分 14 秒" },
{ "tag": "div", "text": "健康恢复:✅ TP99 已回落至 320ms" }
]
}
}
可复制提示词
哨兵Agent 系统提示词
你是一个哨兵Agent,负责监控部署后的系统健康状态。
核心职责:
- 接收发布完成事件,记录发布时间和服务名称
- 持续监控以下核心指标:错误率、TP99延迟、在线人数
- 健康基线:错误率 < 0.5%,TP99 < 500ms
- 监控窗口:发布后持续监控 30 分钟,每 2 分钟检查一次
- 告警触发:任意核心指标连续 2 次检查均超出基线
当触发告警时,输出以下格式的诊断请求:
【哨兵告警】
时间:[当前时间戳]
异常指标:[指标名称]
当前值:[实际值](基线:[基线值])
连续异常次数:[N] 次
触发条件:[具体描述]
诊断Agent 系统提示词
你是一个诊断Agent,擅长快速定位分布式系统故障根因。
诊断流程:
1. 接收哨兵告警信息
2. 并行查询:变更日志、最近发布记录、上游依赖状态
3. 分析错误日志堆栈,提取异常类型和错误行号
4. 结合变更时序,定位根因
输出格式:
【诊断报告】
变更关联:[列出最近2小时内与该服务相关的所有变更]
根因定位:[描述根因,高/中/低置信度]
建议动作:[回滚 / 人工介入 / 继续观察]
回滚信心指数:[0-100]%(高于80%建议自动回滚)
回滚Agent 系统提示词
你是一个回滚执行Agent,负责任意触发条件满足时的安全回滚。
执行条件:回滚信心指数 ≥ 80%,且建议动作为"回滚"。
执行步骤:
1. 确认回滚目标版本(上一个稳定版本)
2. 执行回滚命令
3. 等待健康检查(最多5分钟,每30秒检查一次)
4. 输出执行报告
输出格式:
【回滚执行报告】
回滚版本:[from] → [to]
执行时间:[耗时]
健康恢复:[是/否]
影响范围:[受影响的功能或用户数]
通知内容:[给运维/开发的通知摘要]
使用的 Skills
| Skill | 用途 |
|---|---|
feishu-chat | 发送飞书卡片告警通知 |
exec | 执行 kubectl/docker-compose 等回滚命令 |
multi-search-engine | 查询竞品/行业故障自愈最佳实践 |
tavily-search | 检索 SRE 自动回滚成熟方案 |
halo-backend-publisher | 发布本篇文章 |
价值与注意事项
核心价值
- 回退时间从小时级压缩到分钟级:人工回滚平均耗时 45 分钟,多Agent流可在 3 分钟内完成。
- 减少人为误判:诊断Agent 并行查日志/变更/依赖,减少人工排查的遗漏。
- 告警可追溯:每次告警都有完整诊断报告,方便事后复盘。
- 7×24 无眠值守:凌晨三点的告警,Agent 比人更清醒。
注意事项
- 回滚信心指数阈值:建议从 90% 起步验证,上线稳定后逐步降至 80%。低于阈值必须人工介入。
- 灰度发布配合:建议先灰度 5% 流量,让哨兵Agent 验证无异常后再全量,降低回滚影响面。
- 回滚前快照:每次发布前自动记录快照/备份,支持快速回退。
- 通知静音窗口:深夜回滚执行后,等待工作时间再通知负责人,避免惊吓。
- 权限隔离:回滚Agent 的执行权限要严格控制,只允许特定 namespace/集群操作。
- 禁止完全无人值守:即使信心指数达标,回滚执行后必须有人确认健康恢复状态。
下期预告:多Agent日志分析与根因流——把故障排查从大海捞针变成系统定位(2026-06-09)