2. 值班台架构设计

值班台(On-Call Console)是SRE团队在应急响应时的统一操作界面,其架构设计直接决定了值班人员能否在告警风暴中快速定位、隔离并恢复故障。本章从分层架构、模块划分以及与现有监控/告警系统的集成三个维度展开,给出可落地的设计参考。

2.1 整体架构分层

值班台采用经典的四层架构,从上到下依次为:用户交互层、业务编排层、数据服务层和集成适配层。各层职责清晰,层间通过标准API通信,便于独立演进与灰度发布。

架构设计原则:每一层只依赖下一层提供的抽象接口,不跨层调用;集成适配层通过插件化适配器对接外部系统,避免核心逻辑与第三方绑定。
值班台四层架构 用户交互层 Web Console | 移动端H5 | 企业微信/钉钉/飞书机器人 | 语音告警 统一入口:单点登录 + 角色权限 + 多端同步 业务编排层 告警聚合 | 事件定级 | 值班排班 | 升级策略 | 协同调度 核心逻辑:状态机驱动 + 可编排规则引擎 数据服务层 告警存储 | 事件时间线 | 操作审计 | 统计看板 | 知识库 持久化:Elasticsearch + ClickHouse + Redis 集成适配层 Prometheus | Zabbix | Grafana | 自研监控 | CMDB | 变更平台

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写入变更单的备注字段,便于事后关联分析。
值班台集成架构:南向告警源 + 北向数据源 + 闭环回写 值班台 事件引擎 · 调度 · 看板 Prometheus Zabbix 自研监控 Grafana Elasticsearch Jaeger/Tempo 自动化平台 / CMDB / 变更系统 南向告警源(Webhook) 北向数据源(API查询) 闭环回写(API调用)

2.4 集成适配器设计要点

每个外部系统对应一个独立的适配器,适配器内部遵循以下契约:

  • 输入标准化: 将不同告警源的字段映射到统一事件模型,缺失字段填充默认值。
  • 健康检查: 适配器定期探测上游系统可达性,异常时自动降级并告警。
  • 限流与熔断: 对上游系统的API调用实施令牌桶限流,连续失败超过阈值则熔断,避免级联故障。
  • 可观测性: 每个适配器暴露Prometheus指标(请求量、延迟、错误率、队列深度),便于值班台自身监控。
常见集成陷阱: 不要直接在值班台核心代码中硬编码第三方API地址或认证信息。所有外部依赖的端点、密钥、超时配置应通过配置中心(如Consul、Nacos)动态下发,适配器启动时拉取,运行时监听变更热更新。

2.5 架构决策记录(ADR)示例

在值班台架构设计过程中,建议团队对关键决策进行记录。以下是一个ADR模板示例:

决策项 选择方案 被淘汰方案 理由
告警接入方式 Webhook Receiver + 消息队列 直接RPC调用事件引擎 Webhook方式对上游系统侵入最小;消息队列削峰填谷,防止告警洪峰压垮事件引擎
事件状态存储 Elasticsearch + Redis 仅MySQL 事件需要全文检索与聚合分析,ES天然适合;Redis用于缓存当前活跃事件状态,降低查询延迟
值班排班数据源 自建排班服务 + 日历API 直接读取PagerDuty API 自建服务可灵活支持自定义轮转规则(如按技能组、按区域);避免与第三方强绑定