凌晨夜班告警自动提炼与智能摘要生成实战
在大型分布式系统的 7×24 小时 SRE 值班体系中,“早晚班交接棒(Shift Handover)”是一项极其重要却又痛苦繁琐的日常工作。
每天早晨 08:30,当早班值班工程师准时上线接棒时,打开企业微信或飞书值班大群,往往会看到这样一幅令人头皮发麻的景象:
在过去的凌晨 8 个小时(00:00 到 08:00)内,群里堆积了上百条零散的监控报警与机器人通知:
- 01:15:
NodeCPUHigh - node-08 (88%)(其实是凌晨大数据离线备份任务正常计算); - 03:22:
MySQLSlowQuery - 耗时 1200ms(其实是定时归档历史冷数据); - 05:40:
PodRestart - payment-worker-2(健康检查超时自动拉起成功); - 还有数十条偶发的网络小抖动告警。
为了弄清楚“昨晚系统到底稳不稳定?有没有隐藏什么尚未恢复的重大隐患?”,接班工程师不得不放下手中的工作,花费整整 30 到 45 分钟在群聊历史和 Alertmanager 里逐条翻找、逐个比对。如果前一晚值班人员交接文档写得粗糙,极易漏掉关键的隐患先兆,导致故障在早高峰爆发。
如何让值班交接变得丝滑、精准且完全自动化?
本文深入剖析我们在 W3 阶段落地的**“基于大语言模型(LLM)的凌晨夜班告警自动提炼与智能晨报生成引擎”**。
智能晨报生成的四步流水线架构
每天早晨 08:25,定时调度系统自动触发批处理分析流水线:
[ Alertmanager / Prometheus 过去 8 小时全量告警事件库 (共 142 条) ] │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 1. 告警指纹聚类与噪音过滤 (Fingerprint Clustering) │ │ - 过滤已自动平息的周期性离线任务告警 (如凌晨备份) │ │ - 将 142 条离散消息聚类收敛为 4 个核心事件集 │ └──────────────────────────────┬──────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 2. 状态关联与工单闭环校验 (Incident Cross-Check) │ │ - 检查是否有事件当前依然处于 [Firing] 未恢复状态 │ │ - 提取夜间工程师在群内的真实处置记录 (如扩容/回滚) │ └──────────────────────────────┬──────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 3. LLM 结构化提炼与晨报生成 (LLM Synthesis & Report) │ │ - 严格遵循 8D 结构生成 300 字高浓度极简摘要 │ └──────────────────────────────┬──────────────────────────────┘ │ ▼ [ 08:30 准时在值班大群推送: 《昨夜系统运行态势智能晨报》模版卡片 ]Python 实现智能夜班摘要生成器
import json import requests from datetime import datetime, timedelta, timezone from typing import List, Dict, Any from openai import OpenAI class NightShiftSummaryGenerator: def __init__(self, alertmanager_url: str, wechat_webhook: str): self.alertmanager = alertmanager_url self.webhook = wechat_webhook self.client = OpenAI() def fetch_night_alerts(self) -> List[Dict[str, Any]]: """从 Alertmanager 拉取昨夜 00:00 至 08:00 的全部告警""" # 在生产中调用 Alertmanager API 或 ES 审计日志 # 此处展示已拉取并聚类好的结构化事件摘要 mock_night_events = [ { "cluster": "prod-east", "service": "offline-backup-job", "alertname": "NodeCPUUtilizationHigh", "count": 28, "period": "01:00 - 02:30", "status": "RESOLVED", "root_cause_type": "SCHEDULED_OFFLINE_BATCH" }, { "cluster": "prod-east", "service": "order-settle", "alertname": "ServiceHighLatency", "count": 6, "period": "04:12 - 04:18", "status": "RESOLVED", "root_cause_type": "TEMPORARY_DB_LOCK_WAIT", "action_taken": "夜班值班人员执行了慢查询终止,6分钟内恢复" }, { "cluster": "prod-north", "service": "log-indexer", "alertname": "DiskUsageHigh", "count": 1, "period": "06:45 至今", "status": "FIRING", "root_cause_type": "DISK_PRESSURE", "action_taken": "待早班跟进清理旧日志" } ] return mock_night_events def generate_briefing_prompt(self, events: List[Dict[str, Any]]) -> str: prompt = f"""你是一名资深 SRE 架构师兼值班总指挥。请根据以下昨夜(00:00 - 08:00)的告警事件集,为早班交接生成一份专业、简练的【夜班系统运行智能晨报】。 要求: 1. 语言极其精炼,严禁废话套话,总字数控制在 250 字以内。 2. 必须清晰划分为:【系统健康度总评】、【夜间异常与处置】、【今日待跟进隐患】三个模块。 3. 突出未恢复的报警项,提醒早班优先处理。 告警数据: {json.dumps(events, ensure_ascii=False, indent=2)} """ response = self.client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": prompt}], temperature=0.2 ) return response.choices[0].message.content def send_morning_briefing(self): events = self.fetch_night_alerts() report_markdown = self.generate_briefing_prompt(events) payload = { "msgtype": "markdown", "markdown": { "content": f"## 🌅 【SRE 智能晨报】夜间运行态势交接\n> **统计时段**: 昨夜 00:00 ~ 今日 08:00\n> **告警事件总数**: 35 条 (聚类为 3 起)\n\n{report_markdown}\n\n👉 [点击直达值班大盘看板](https://grafana.internal/d/morning-handover)" } } requests.post(self.webhook, json=payload, timeout=5) print("✅ 智能晨报推送完成!")每日早晨 08:30 推送的真实晨报样板
接班工程师在手机端打开值班群,看到的是这样一份结构高度精简、重点极其突出的富媒体卡片:
🌅 【SRE 智能晨报】夜间运行态势交接 > 统计时段: 昨夜 00:00 ~ 今日 08:00 > 告警事件总数: 35 条 (聚类为 3 起) 【🟢 系统健康度总评】 昨夜全站核心交易链路 SLA 为 100%,无 P1/P2 重大故障,整体运行稳健。 【🛠 夜间异常与处置】 1. 01:00~02:30 华东节点 CPU 短暂高位,确认为离线备份批处理,已自动平息; 2. 04:12 订单结算出现短暂 6 分钟慢查询锁等待,夜班值班已手动清理并自愈。 【⚠️ 今日待跟进隐患 (早班优先)】 - 华北容灾集群 log-indexer 节点磁盘空间达到 86%(当前处于 FIRING 状态),请早班同学优先执行 ILM 历史冷索引归档!生产应用收益
自智能夜班晨报上线以来:
- 早班值班人员的交接班准备耗时从原本的40 分钟 骤降至 30 秒快速扫读;
- 彻底消除了由于翻看历史聊天记录遗漏导致的隐患滞留;
- 团队形成了高效、透明、高度数字化的交接班文化,为即将到来的大促 24 小时连续作战提供了最顺畅的信息交接保障。