2. 值班台架构设计
值班台(On-Call Console)是SRE团队在应急响应时的统一操作界面,其架构设计直接决定了值班人员能否在告警风暴中快速定位、隔离并恢复故障。本章从分层架构、模块划分以及与现有监控/告警系统的集成三个维度展开,给出可落地的设计参考。
2.1 整体架构分层
值班台采用经典的四层架构,从上到下依次为:用户交互层、业务编排层、数据服务层和集成适配层。各层职责清晰,层间通过标准API通信,便于独立演进与灰度发布。
架构设计原则:每一层只依赖下一层提供的抽象接口,不跨层调用;集成适配层通过插件化适配器对接外部系统,避免核心逻辑与第三方绑定。
2.2 模块划分与职责
在四层架构基础上,值班台进一步拆分为七个核心模块,每个模块对应一个独立的微服务或功能域:
| 模块名称 | 所属层级 | 核心职责 | 关键输出 |
|---|---|---|---|
| 告警接入网关 | 集成适配层 | 统一接收多源告警,完成格式归一化、去重、速率限制 | 标准化告警事件 |
| 事件引擎 | 业务编排层 | 告警聚合为事件,执行定级、分派、升级、抑制 | 事件状态机 |
| 值班调度 | 业务编排层 | 管理排班日历、轮转规则、值班组、个人忙闲状态 | 当前值班人列表 |
| 协同工作台 | 用户交互层 | 提供事件详情、操作面板、一键拉起工具链、共享时间线 | 值班操作界面 |
| 通知分发 | 用户交互层 | 多渠道触达(电话、短信、IM、邮件),支持确认与回执 | 通知送达记录 |
| 数据看板 | 数据服务层 | 实时展示MTTA/MTTR、告警趋势、值班统计、SLO达成率 | 运营指标报表 |
| 审计与回溯 | 数据服务层 | 记录所有操作日志、事件变更、通知历史,支持故障复盘 | 不可篡改的审计轨迹 |
模块拆分建议:告警接入网关和事件引擎建议独立部署,前者处理高吞吐写入,后者维护事件状态机,两者之间通过消息队列解耦,避免告警洪峰压垮核心状态机。
2.3 与现有监控/告警系统的集成方式
值班台不替代现有监控系统,而是作为上层调度与协作中枢。集成适配层通过以下三种模式对接外部系统:
2.3.1 告警源集成(南向集成)
值班台通过Webhook Receiver、Prometheus Alertmanager Webhook、Zabbix Action Script等方式接收告警。每种告警源对应一个适配器,负责将原始告警转换为内部统一的事件格式。
// 标准化告警事件结构示例(JSON)
{
"event_id": "evt-20250321-001",
"source": "prometheus",
"alert_name": "HighCpuUsage",
"severity": "critical",
"status": "firing",
"labels": {
"instance": "web-01",
"cluster": "prod-cn"
},
"annotations": {
"summary": "CPU usage > 90% for 5 minutes",
"runbook_url": "https://runbook.internal/cpu"
},
"started_at": "2025-03-21T14:30:00Z"
}
2.3.2 数据源集成(北向集成)
值班台的数据看板与事件详情页需要从监控系统拉取时序数据、日志、链路追踪信息。集成方式包括:
- Grafana API: 嵌入指定面板的iframe或直接调用API获取图表数据。
- Prometheus HTTP API: 按事件标签查询实时指标,用于值班台内展示“当前CPU/内存/延迟”。
- 日志平台API: 根据事件时间窗口和实例标签,自动关联异常日志片段。
2.3.3 动作回写集成(闭环集成)
值班人员在值班台执行的操作(如屏蔽告警、拉起自愈脚本、发起变更)需要回写到源系统,形成闭环:
- 告警屏蔽: 调用Prometheus Alertmanager的Silence API或Zabbix的Acknowledge API。
- 自愈触发: 通过Webhook调用自动化平台(如Ansible Tower、Rundeck)执行预定义恢复剧本。
- 变更关联: 将事件ID写入变更单的备注字段,便于事后关联分析。
2.4 集成适配器设计要点
每个外部系统对应一个独立的适配器,适配器内部遵循以下契约:
- 输入标准化: 将不同告警源的字段映射到统一事件模型,缺失字段填充默认值。
- 健康检查: 适配器定期探测上游系统可达性,异常时自动降级并告警。
- 限流与熔断: 对上游系统的API调用实施令牌桶限流,连续失败超过阈值则熔断,避免级联故障。
- 可观测性: 每个适配器暴露Prometheus指标(请求量、延迟、错误率、队列深度),便于值班台自身监控。
常见集成陷阱: 不要直接在值班台核心代码中硬编码第三方API地址或认证信息。所有外部依赖的端点、密钥、超时配置应通过配置中心(如Consul、Nacos)动态下发,适配器启动时拉取,运行时监听变更热更新。
2.5 架构决策记录(ADR)示例
在值班台架构设计过程中,建议团队对关键决策进行记录。以下是一个ADR模板示例:
| 决策项 | 选择方案 | 被淘汰方案 | 理由 |
|---|---|---|---|
| 告警接入方式 | Webhook Receiver + 消息队列 | 直接RPC调用事件引擎 | Webhook方式对上游系统侵入最小;消息队列削峰填谷,防止告警洪峰压垮事件引擎 |
| 事件状态存储 | Elasticsearch + Redis | 仅MySQL | 事件需要全文检索与聚合分析,ES天然适合;Redis用于缓存当前活跃事件状态,降低查询延迟 |
| 值班排班数据源 | 自建排班服务 + 日历API | 直接读取PagerDuty API | 自建服务可灵活支持自定义轮转规则(如按技能组、按区域);避免与第三方强绑定 |