告警设计与值班运行

本节目标

将运行信号转化为少而可操作的告警,并为每个告警定义用户影响、紧迫性、所有者、runbook、抑制、恢复和审计流程。

告警不是异常检测器的全部输出

一个好的实时呼叫(page)应满足:

  1. 有正在发生或即将发生的用户/业务影响;
  2. 人现在可以采取行动;
  3. 等到工作时间会显著放大损失;
  4. 有明确的所有者和起始runbook。

不满足实时响应条件的容量趋势、质量缓慢下降或成本优化机会,可以建立工单或定期审查,不应在凌晨叫醒人。

优先为症状告警

症状告警回答“用户正受什么影响”,根因信号帮助诊断“可能为什么”。例如:

  • 叫醒人:交互请求错误预算正高速燃烧;
  • 诊断面板:模型供应商限流、某工具超时、队列饱和。

如果顶层用户延迟仍正常,一个内部组件短暂慢通常不需要同时叫醒另一组人。但非用户可见但后果严重的数据泄露、安全越权或费用失控,仍可需要紧急告警;这些应有独立风险策略。

一条告警的完整契约

字段应回答什么
名称与意义发生的用户症状是什么?
严重级别何时响应,应否叫醒人?
条件与持续时间如何抑制短暂抖动?口径版本是什么?
范围哪个环境、release、任务或切片受影响?
所有者谁应第一响应,如何升级?
runbook前5分钟查什么,可安全做什么?
Dashboard/Trace哪个视图和示例Trace可下钻?
抑制/聚合哪些下游告警应被根事件抑制?
恢复条件何时结束,是否需人工核对?
验证规则如何测试,通知链路如何演练?

告警消息应包含当前观察、目标/预算、窗口、影响范围和直接链接,而不是“指标异常,请处理”。

消抖、聚合、抑制与静默

  • 持续时间/消抖:信号持续足够久才触发,避免短尖峰;严重安全事件可能不适合等待。
  • 聚合:将同一事件的多个实例合并,保留范围信息。
  • 抑制:当已知根事件触发时,暂不通知预期的下游症状。
  • 静默:在受控维护时窗禁止通知;必须有范围、原因、所有者和过期时间。

不要通过永久扩大静默范围“解决噪声”。噪声告警应被修复、降级为工单或删除,不能把值班人员训练成忽略告警。

若使用Prometheus Alertmanager,应区分其当前产品语义:grouping把相关告警合成通知,routing按label与接收策略分发,deduplication避免重复通知,inhibition在某告警存在时抑制匹配的其他告警,silence按匹配器和时段屏蔽通知。这些词有助于设计,但具体配置字段、默认行为和版本支持必须按部署版本核对,不能把本节当可直接粘贴的配置。

AI系统特有的告警取舍

  • 质量标签延迟时,用快速代理信号做早期警告,但明确其不是真值;
  • 低流量高风险任务不能只用总体比率,可对高损失单事件直接升级;
  • 漂移本身一般先产生调查或工单,不应无条件触发再训练/发布;
  • 费用告警同时看总额、单任务、重试/循环和质量,防止“通过停止服务降低费用”被当成优化。

监控系统也要被监控

通知链路、采集器、查询后端和规则评估器可以故障。建立端到端合成心跳、采集新鲜度、丢弃计数和通知演练。只监控每个组件进程存活,可能漏掉“所有组件都活着,告警却到不了人”。

练习与自测

为一个在线RAG Agent写三条告警:快速错误预算燃烧、高风险越权工具调用、单成功任务成本突增。每条补齐契约表的字段。回答:

  1. 为什么内部模型延迟上升但用户SLI正常时不一定要page?
  2. 为什么漂移告警不应直接连接“自动重训练并上线”?
  3. 你如何证明告警从规则评估到值班人员的链路真的可用?

小结与下一步

告警是一个需要版本化、测试和运营的人机接口。下一步用 Dashboard 与诊断视图 给值班人员一条从症状到证据的路径。

参考资料