花30万外包开发的运维管理平台,核心功能还不如一个开源方案加两周二次开发,差距在数据采集层和告警引擎的扩展性上
去年有一个做数据中心的团队找到我,说他们花了30万外包了一套运维管理平台,做了8个月,上线后运维团队用了一个月就放弃了。不是不想用,是用不了。服务器加到300台以后,数据采集延迟从3秒飙升到40秒,告警风暴一来整个页面卡死,工单流转逻辑和实际运维流程对不上,最后运维组又回到了Excel+Zabbix+微信群的原始状态。
这不是个例。市面上大量外包开发的运维平台都在重复同样的坑:功能列表看起来很全,但底层的数据采集架构和告警引擎从一开始就没有为规模化设计,上线即瓶颈。另一方面,用Prometheus+Grafana+开源CMDB二次开发两周能搭出来的核心能力,外包花了半年和30万,质量和扩展性还不如开源方案。
智能运维平台的6个核心能力模块,缺任何一个都是半成品
| 1 | 统一数据采集层 — 支持Agent/SNMP/IPMI/API多协议,2000+节点时采集延迟不超过5秒 |
| 2 | 智能告警引擎 — 告警收敛、降噪、聚合、分级,不是简单地设阈值发短信 |
| 3 | CMDB资产配置库 — IT基础设施的全量元数据,自动发现+人工补全,不是Excel导入的静态表 |
| 4 | 自动化运维引擎 — 批量命令执行、脚本调度、故障自愈,不是一台台登SSH手动操作 |
| 5 | 工单与服务流程 — 事件管理、问题管理、变更管理,符合ITIL但不僵化 |
| 6 | 可视化与报表 — 大屏监控、趋势报表、SLA统计、容量预测 |
一、先搞清楚你要的是什么:监控工具、运维平台还是AIOps

很多团队在立项时就没搞清楚这三者的边界。老板说"我们要做一个运维管理平台",开发团队按照CRUD的思路堆功能,最后做出来的是一个四不像。
| 类型 | 核心能力 | 代表方案 | 适合场景 |
|---|---|---|---|
| 监控工具 | 指标采集、可视化、基础告警 | Prometheus+Grafana、Zabbix | 设备<200台,关注基础设施状态 |
| 运维管理平台 | CMDB+监控+告警+自动化+工单+报表 | 开源Adminset二次开发、乐维、卓豪 | 设备200-2000台,需要流程化管理 |
| AIOps智能运维 | 运维平台+机器学习异常检测+根因分析+预测 | 擎创、云智慧、必示科技 | 设备>2000台,告警量大到人工处理不过来 |
这三个层次的开发成本和技术难度不在一个量级。监控工具两个人一个月能搭起来,运维管理平台至少需要4-6人做6-8个月,AIOps则是一个持续迭代的系统工程,起步就是10人以上的算法+工程团队。
最常见的翻车路径:团队实际只需要一个监控工具+简单CMDB,但立项写成了"智能运维管理平台",开发团队按平台级架构设计,功能堆了一大堆,数据采集层却用单线程轮询实现,上线第一天就崩了。需求定义阶段就要想清楚:你当前的设备规模、运维人员数量、核心痛点到底是什么。
二、数据采集层是整个平台的命门,做不好后面全白费
运维平台和普通业务系统的本质区别在于:业务系统只管自己的数据,运维平台要管所有被管对象的数据。这意味着数据采集层要同时面对几十种设备类型、上百种指标、每15-60秒一轮的高频采集。
大部分外包团队做采集层的思路是写一个Python脚本,循环遍历所有设备,逐个SSH或SNMP查询。这种设计在50台设备以内还能用,到200台就开始掉队,500台直接崩。问题出在三个地方:
采集架构
单线程轮询 vs 分布式采集集群。正确的做法是采集器集群化部署,每个采集节点负责一个网段或区域,结果统一写入时序数据库。Prometheus的Pull模型+Exporter模式是这个思路的最佳实践。
协议适配
只支持SSH和SNMP不够。实际环境有IPMI(服务器带外)、HTTP API(云平台)、JMX(Java应用)、数据库直连等七八种方式。采集层要有插件化协议适配器,新增设备类型不改核心代码。
存储选型
MySQL存监控时序数据是性能灾难。监控指标必须用时序数据库:VictoriaMetrics或InfluxDB。日志用Elasticsearch。CMDB用PostgreSQL。告警事件用Redis做缓冲队列。每种数据选对引擎。
一个可供参考的性能基准:Prometheus+VictoriaMetrics方案,单节点可支撑每分钟500万样本写入,配合联邦集群可横向扩展到千万级。自研采集层如果达不到这个量级的1/10,别在架构评审里说"高性能"。
三、告警引擎最容易被低估,但它决定了运维团队用不用你的平台
告警做好了是运维的神经中枢,做坏了就是垃圾短信制造机。一个500台设备的环境,每分钟可能产生几百条原始告警,如果不做收敛和降噪,运维人员看到的就是信息轰炸,最终结果一定是关掉通知。
告警收敛
同一台交换机挂了,下面50台服务器同时报"不可达"。收敛规则应该把50条告警合并为1条"交换机X故障,影响下游50台设备",而不是发50条短信。

告警降噪
CPU瞬时冲到90%又回落,这种抖动不应触发通知。设置持续时间和触发次数阈值(连续3次超阈值才告警),过滤掉瞬时波动。
告警分级
P0(核心业务中断,电话+短信)、P1(重要服务异常,企微群通知)、P2(性能预警,邮件)、P3(信息提示,仅平台展示)。分级不清楚的结果是所有告警同等对待,重要的被淹没。
静默与升级
维护窗口期告警自动静默。告警超过15分钟无人确认,自动升级通知上级。超过30分钟未处理,自动触发预案脚本尝试自愈。
很多外包项目在告警模块只实现了"设置阈值→发邮件",这不叫告警引擎,叫定时检查脚本。一个合格的告警引擎至少需要:规则引擎(支持复杂条件组合)、静默时间窗口、告警聚合(同类型合并)、升级链路、通知渠道适配器(邮件/短信/企微/钉钉/飞书/电话)。Prometheus的Alertmanager做了其中的基础部分,自研时要在此基础上补充业务层逻辑。
四、CMDB是运维数据的中枢,但90%的自研CMDB做成了静态Excel
CMDB被叫做运维的"数据基石",但大多数自研CMDB就是一个带搜索功能的资产登记表。服务器上线时手动录一次,之后信息就再也没有更新过。半年后CMDB里的数据和生产环境完全对不上,谁也不敢信。
| 采集方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| Agent主动推送 | 每台机器装Agent,定时采集硬件+软件信息推送到API | 数据全面、实时性高 | 需要每台机器装Agent |
| SSH远程采集 | 中控机通过paramiko/ansible远程执行命令收集信息 | 无需装Agent,部署简单 | 大规模时速度慢,依赖SSH连通性 |
| SNMP协议 | 通过网络设备标准SNMP协议获取交换机/路由器信息 | 网络设备标配,无需额外安装 | 只能获取网络设备信息 |
| 云API接口 | 对接阿里云/腾讯云/AWS的API,自动同步云资源信息 | 云资源零维护,自动更新 | 仅限云环境,混合架构需多种方式互补 |
| 人工录入 | 手动填写合同信息、维保到期时间、机房位置等非技术字段 | 补充自动采集覆盖不到的信息 | 数据时效性差,容易过时 |
CMDB的关键不是"存了多少字段",而是数据的自动采集比例。一个成熟的CMDB,至少80%的资产信息应该通过Agent、SNMP或云API自动获取和更新,人工录入只占20%。如果反过来,80%靠人工维护,这个CMDB上线3个月后就是废的。
CMDB数据模型设计的三个原则
第一,模型要有层级关系。业务线→应用系统→集群→主机→组件,形成完整的拓扑关系。告警来了能立刻知道影响哪个业务。
第二,关联关系要可追溯。这台服务器上跑了哪些应用?这个应用依赖哪些数据库?关联关系是故障定位的核心。
第三,模型要支持扩展。今天只需要管服务器和网络设备,明天可能要管容器和K8s集群。数据模型设计时就留扩展空间。
五、自动化运维和工单系统,别做成两张皮
运维平台里最容易做成"两张皮"的就是自动化模块和工单系统。告警来了生成工单,工单分配给人,人手动处理,处理完关闭工单。这个流程看起来合理,实际上只是把"微信群喊人"换成了"系统里发工单",效率提升几乎为零。
错误的设计
告警 → 生成工单 → 人工查看 → 登录服务器 → 手动执行命令 → 关闭工单。告警和自动化是两个独立的模块,工单系统只是通知工具。
正确的设计
告警 → 匹配预案脚本 → 自动执行自愈操作(重启服务/切换流量/扩容) → 执行成功自动关闭工单 → 执行失败升级通知人工介入。工单和自动化深度耦合。

具体到开发层面,自动化运维引擎需要支持:批量命令执行(类似Ansible的Ad-Hoc模式)、脚本调度(定时任务+事件触发)、作业编排(多步骤有序执行+失败回滚)、文件分发、安全审计(所有操作留痕)。工单系统则要支持事件管理、问题管理、变更管理三个ITIL核心流程,以及自定义流程引擎。
一个实用的故障自愈逻辑:监控发现某服务响应时间超过500ms → 触发告警 → 自愈引擎检查该服务是否有预案脚本 → 有则执行"重启服务+健康检查" → 重启后响应恢复正常 → 自动关闭告警和工单 → 记录操作日志。整个流程从告警到恢复控制在30秒以内。如果重启失败,自动切换到备用节点,同时升级通知运维人员。
六、技术选型:别在框架上纠结,把精力花在数据流和扩展性上
运维平台的技术选型有一个核心原则:前端用什么框架、后端用什么语言不是关键,关键是数据采集层、存储层、告警引擎这三块的架构设计。用Spring Boot还是Django、用Vue还是React,对最终效果的影响不到10%。
| 层次 | 推荐方案 | 选型理由 |
|---|---|---|
| 数据采集 | Prometheus + Telegraf + 自研Agent | Prometheus生态成熟,Exporter覆盖广;Telegraf插件丰富;自研Agent补特殊场景 |
| 时序存储 | VictoriaMetrics / InfluxDB | VictoriaMetrics兼容Prometheus协议,压缩率高、查询快 |
| 日志存储 | Elasticsearch + Kibana | 日志检索和分析的事实标准,配合Filebeat做采集 |
| CMDB存储 | PostgreSQL / MySQL | 关系型数据天然适合CMDB的模型关系,JSON字段支持灵活扩展 |
| 消息队列 | Redis Stream / Kafka | 告警事件流、采集数据缓冲,小规模用Redis,大规模上Kafka |
| 后端框架 | Django REST Framework / Spring Boot | Python生态运维工具多(Ansible/SaltStack都是Python),团队Python强选Django;Java团队选Spring Boot |
| 前端框架 | Vue 3 + Element Plus / React + Ant Design | 运维平台后台管理风格,Element和Ant Design都有成熟的表格/图表/表单组件 |
一个很多人忽略的点:运维平台的前端性能和普通后台不一样。监控大屏可能要同时渲染几十个图表、实时刷新上百个指标。如果前端不做WebSocket推送+数据抽样+虚拟滚动,页面很快就会卡死。这一点在技术选型评审时很少被提及,但上线后是最容易被吐槽的地方。
七、自研、外包还是买成品?用三个问题做决定
这个问题没有标准答案,但可以用三个问题快速判断方向。
问题一:设备规模多大?
<200台:用开源方案(Prometheus+Grafana+开源CMDB)足够了,不需要开发。
200-2000台:可以考虑基于开源方案二次开发,重点做告警引擎和自动化模块。
>2000台:需要认真评估自研还是买成熟的商业产品。
问题二:团队有没有运维开发能力?
有2个以上懂运维+开发的工程师:自研可行,6-8个月能出可用版本。
没有:别自研。外包也不靠谱,运维平台不是标准CRUD,外包团队不懂运维场景。买成品或基于成熟开源方案做轻量二次开发。
问题三:业务场景有没有特殊需求?
通用场景(服务器+网络设备监控):开源方案就能满足,没必要自研。
特殊场景(物联网设备、工控设备、混合多云复杂拓扑):开源方案覆盖不全,需要自研或定制开发采集适配层。
如果你决定走自研路线,一个更高效的做法是用成熟的底层框架做二次开发,而不是从零写。比如基于Adminset(开源运维平台,含CMDB+自动化+监控)做二次开发,把精力集中在告警引擎、工单流程、大屏可视化这些差异化需求上,底层的采集和存储直接用Prometheus生态。这样开发周期可以从8个月压缩到3-4个月。
对于需要管理多个数据中心或大规模设备集群的场景,系统化架构的价值更明显。比如UC建站系统的设计理念也适用于运维平台的架构思路:统一内容中枢(CMDB作为数据中枢)+多通道推送(采集数据通过API+消息队列分发到各子系统)+独立部署(每个数据中心部署独立采集节点)+统一看板(所有节点的数据汇总到中心看板)。这种分布式+中心化的架构在管理2000台以上设备时比单体架构稳定得多,一个区域故障不会拖垮整个平台。
说到底
运维管理平台的开发,最怕的不是技术难,而是方向错。花了30万做了8个月,最后发现连数据采集都跑不稳,这种教训太多了。核心就三件事:
1)先定义清楚你要的是监控工具、运维平台还是AIOps,别一上来就ALL IN。小规模先上Prometheus+Grafana,跑3个月看清楚真正的痛点和数据量,再决定要不要做平台。2)数据采集和告警引擎是地基,这两块没做好,上面盖再多功能都是危楼。采集用分布式架构,告警要有收敛+降噪+分级+升级完整链路。3)能用开源就别从零写,能买成品就别外包。运维平台的坑不在功能多寡,在性能和扩展性。开源方案经过千万台设备的验证,外包写的代码可能500台就跑不动了。
