一、问题背景
微服务、容器化与混合云架构在大型企业内部大规模落地之后,传统“主机监控 + 中间件监控 + 日志采集”各自为政的建设模式暴露出明显短板。一个典型的故障处置过程往往是:告警来自独立的监控探针,定位需要登录跳板机查日志,拓扑关系靠人脑拼接,最后再手动在工单系统里复制粘贴一堆信息。跨系统的信息割裂直接拉长了故障定位与恢复时间。
从工程视角看,这类问题可以归纳为四个层面:
- 数据割裂:指标、日志、链路分属不同系统,缺少统一的观测对象模型,同一台主机在不同系统里身份不一致;
- 告警失控:微服务环境下单次故障可触发数百条告警,缺少压缩与抑制机制,有效信号被淹没;
- 定位困难:分布式调用链横跨多个服务,基础设施层与应用层的故障缺少联动分析手段;
- 处置断裂:从“发现问题”到“执行处置”之间缺少自动化通道,运维流程无法闭环。
围绕这些问题,下文给出一条经过实践验证的建设路径,覆盖数据模型设计、采集架构、告警治理与处置闭环四个关键环节。
二、总体架构设计
一个可落地的统一可观测平台,通常划分为四层,自下而上分别是:
| 层级 | 职责 | 核心内容 |
|---|---|---|
| 采集层 | 数据采集接入 | Agent、Agentless、应用探针、协议接入 |
| 模型层 | 统一观测对象模型 | 对齐 CMDB 业务层级 |
| 分析层 | 数据消费与分析 | 指标分析、日志检索、链路追踪、拓扑渲染 |
| 处置层 | 故障处置与闭环 | 告警治理、工单联动、自动化作业、复盘知识库 |
其中模型层是最容易被忽视、但决定长期维护成本的一层,下文单独展开。
三、统一观测对象模型:与 CMDB 对齐
3.1 为什么要做模型对齐
多数企业在建设可观测平台之前,已经有了一套配置管理数据库(CMDB),承载业务—集群—模块—实例的业务层级关系。如果监控平台另起炉灶维护一套监控对象,两边的数据会迅速漂移:CMDB 里已下线的机器在监控里持续产生无效告警,新扩容的实例则因为未注册而漏监控。
实践中的做法是:监控对象不单独建模,直接复用 CMDB 的对象实例。具体规则如下:
- 观测对象的唯一标识(如
bk_obj_id + instance_id)与 CMDB 保持一致; - 业务层级(业务→集群→模块→实例)沿用 CMDB 拓扑,告警事件按此层级路由到对应责任团队;
- 指标定义走元数据管理流程——新增指标需要经过定义、评审、上线三个环节,避免各团队随意埋点导致指标口径混乱。
这样做的直接收益是:告警事件自带配置上下文(所在业务、负责人、机房、环境标签),无需在告警触发后再反查资产库。
3.2 指标生命周期管理
指标作为跨模块共享的数据资产,建议按生命周期管理:新建指标先以草稿状态录入,经过评审确认口径与采集方式后标记为“上线”状态,方可被监控、APM、告警等模块引用;指标废弃时执行下线操作并归档,归档指标的历史数据仍可查询,但不再产生新的告警。
监控、APM、告警模块共享同一套指标定义,避免出现“监控里的 CPU 利用率”和“APM 里的 CPU 利用率”口径不一致的问题。
四、采集层:多模式接入适配混合架构
混合 IT 环境下不存在万能采集方式,实际落地通常组合四种模式:
| 采集模式 | 适用对象 | 特点 |
|---|---|---|
| Agent 常驻采集 | 物理机、虚拟机操作系统层 | 采集能力强,需管理 Agent 生命周期 |
| Agentless 协议采集 | 网络设备、无法装 Agent 的系统 | 走 SNMP/IPMI/API,覆盖硬件与网络 |
| 应用探针 | Java/Go/Python 等应用进程 | 字节码注入或 SDK,实现无侵入链路埋点 |
| 第三方数据源接入 | 已有监控系统、云平台 API | 避免重复采集,做数据聚合 |
几点工程经验:
- Agent 管理平台化。Agent 的批量安装、升级、卸载要有统一作业平台支撑,否则万台规模的主机靠脚本维护会演变成新的运维负担。Agent 支持代理级联(多级级联转发)可以解决跨机房网络隔离问题。
- 插件化扩展采集能力。新增一种中间件的采集需求,应通过安装采集插件解决,而不是升级 Agent 版本,降低变更风险。
- 优先采用开放的可观测协议。应用侧的 traces/metrics/logs 采集建议统一走标准化协议,避免探针与平台强绑定,为后续架构演进保留退路。
五、告警治理:从“通知”到“降噪”
告警治理是可观测平台落地效果最直观的环节。核心思路是把告警处理拆成一条流水线,原始事件按顺序经过六个环节的处理:事件丰富、告警压缩、抑制屏蔽、分级路由、通知派发。
5.1 事件丰富
在告警进入处理流程前,附加配置上下文(CMDB 属性、责任人、最近变更记录)。一条“磁盘使用率 92%”的告警,丰富后应能直接看到这台机器属于哪个业务、上周是否有发布操作。
5.2 压缩与抑制
- 压缩(聚合):同一对象同一指标的告警在时间窗口内合并;同一故障引发的关联告警按拓扑关系聚合成一个事件。
- 抑制:维护窗口内屏蔽预期内的告警;父对象故障时抑制其下所有子对象的衍生告警(如核心交换机宕机时,抑制其下联主机的网络不可达告警)。
5.3 告警生命周期分类
明确区分四类状态:原始告警(未处理)、有效告警(通过规则过滤)、活动告警(未恢复)、历史告警(已恢复或已关闭)。运维指标统计只基于有效告警计算,避免噪声数据污染 MTTA/MTTR。
六、故障定位:纵向下钻 + 横向追踪
故障定位能力的关键在于数据关联,而非单点工具的强弱。
纵向下钻指沿着应用 → 服务 → 进程 → 主机资源的层级逐层深入。业务侧 P99 延迟上升时,可以下钻到具体服务实例,再下钻到底层主机的 CPU、内存、磁盘 IO 指标,判断是应用问题还是资源问题。
横向追踪指基于分布式链路还原单次请求的完整调用路径。通过 trace_id 把跨服务的调用序列、每一跳的耗时、以及该请求路径上落盘的日志关联起来。
两者结合的前提是数据模型统一:链路中的 service/span 需要映射回 CMDB 中的实例对象,日志中的主机标识需要与指标中的主机标识一致。这也是前文强调模型层建设的原因。
拓扑渲染方面,基于 CMDB 的静态配置关系叠加链路分析得出的动态调用关系,可以生成业务观测拓扑,并在故障复盘时回放告警的时间序列,还原故障传播过程。
七、处置闭环:打通工单与自动化
告警治理解决了“看得清”,处置闭环解决“动得了”。实践中的标准链路:
- 有效告警触发后,按告警级别和业务归属自动创建工单(对接 ITSM 系统);
- 低风险、有预案的告警(如磁盘清理、进程拉起)可触发自动化作业平台执行预置脚本,执行结果回写工单;
- 处置完成后告警自动关闭,故障数据(时间线、根因、处置动作)沉淀到复盘知识库;
- MTTA(平均告警响应时间)与 MTTR(平均故障恢复时间)作为平台运营的核心指标持续跟踪。
八、分阶段落地路径
一次性建设全量能力风险较高,建议分三个阶段:
- 第一阶段:指标与告警治理。统一主机、中间件、数据库的指标采集,完成 Agent 管理体系与告警降噪流水线建设。这一阶段直接解决告警风暴问题,见效最快。
- 第二阶段:核心链路接入。对核心业务系统接入应用探针,实现分布式链路追踪与纵向下钻能力。
- 第三阶段:日志分析与闭环建设。集中日志检索,打通指标—日志—链路的联动查询,并完成与工单、自动化平台的处置闭环。
九、小结
可观测平台建设的本质不是工具堆叠,而是数据模型的统一与流程的打通。实践中最值得投入的三件事:观测对象模型与 CMDB 对齐以消除数据漂移;告警流水线治理以提升信号质量;工单与自动化联动以缩短处置链路。平台效果最终应以 MTTA/MTTR 的持续下降来度量,而非功能清单的长度。