1. 先别急着选工具,想清楚这三个坑到底坑在哪
很多团队聊起智能监控系统,第一反应就是“哪个工具最火”“哪个可视化最漂亮”“哪个社区最活跃”。我见过不少项目,技术负责人带着一摞对比表格,把主流开源监控方案逐条打分,最后选了个功能最全的,结果上线三个月,业务方依然抱怨“你们监控系统就是摆设,故障还是我们运维先发现的”。
问题出在哪?出在“选型”这两个字上。选型不是选工具,是选一套和你的业务形态、组织分工、故障响应机制都匹配的监控体系。工具只是其中一环,甚至在很多场景下,工具的能力根本不是瓶颈,瓶颈在于你对监控这件事本身的拆解方式。
这篇文章我想把过去几年在多个企业落地智能监控系统的经验做个梳理,重点讲三个我反复踩过、也看别人反复踩的坑。这三个坑不是“某个参数调得不对”这种小问题,而是结构性的、会影响整个监控体系成败的决策失误。文章会讲清每个坑的形成原因、典型表现、以及我当时是怎么绕过去的,最后给出一套可以直接拿走的落地框架。
适合谁看?正在做监控选型的技术负责人、刚接手运维平台建设的同学、以及所有被“告警风暴”折磨过的一线运维工程师。
2. 第一个坑:监控对象选错了,盯了一堆不该盯的
2.1 只看基础设施指标,业务全盲
这是最普遍的一个坑。很多团队搭监控,上来就盯着CPU、内存、磁盘、网络流量,把几十台主机的指标采集齐了,画了几个花花绿绿的大盘,就觉得“监控系统上线了”。
问题是,基础设施指标正常,不代表业务正常。我遇到过真实案例:一个电商平台,所有服务器CPU使用率都在30%以下,内存充裕,磁盘IO也很平稳。但用户端已经出现大面积下单超时。为什么?因为故障出在应用层——订单服务依赖的某个第三方接口突然变慢,导致请求线程池被打满,请求堆积,超时率飙升。而这些现象在主机层没有任何明显信号。
监控对象选错,本质上是“你盯着仪表盘,但仪表盘反映的并不是乘客真正关心的指标”。基础设施指标是手段,业务可用性和用户体验才是目的。你盯着一堆手段数据,却对目的数据一无所知,那这套监控系统在关键时刻就是聋子的耳朵。
正确的做法是反过来的:先梳理业务链路,找出核心业务的“健康信号”,再反推需要采集哪些指标。比如一个电商系统,核心健康信号是“下单成功率”“支付成功率”“首页加载耗时”“购物车接口P99延迟”。这些信号一旦异常,无论底层基础设施是否正常,都要触发告警。
2.2 只盯单机指标,没有链路视角
第二个容易犯的错,是把监控做成“每台机器各看各的”。单机指标当然要采,但微服务架构下,一个用户请求会经过网关、鉴权、订单、库存、支付等多个服务,任何一个环节慢,整个请求就慢。如果只盯单机指标,你看到的是A服务CPU高、B服务内存涨,但你搞不清楚这跟用户“下单失败”之间是什么关系。
这也是为什么现在做监控选型,必须考虑链路追踪能力。不需要一开始就上完整的全链路追踪系统,但至少要能回答一个问题:一个业务请求,经过了哪些服务,每个服务耗时多少,哪一段最慢。
我见过有的团队在这个问题上走了极端——一端是只盯单机,另一端是一上来就搞分布式链路追踪,成本极高,接入周期长,最后沦为摆设。我比较推荐的中间态是:先通过业务日志里的traceId做串联,快速定位一次慢请求的完整路径,等团队和基础设施都成熟了,再考虑引入更重型的链路追踪方案。
2.3 什么才是正确的监控对象
我后来总结出一个可复用的方法,拿一张纸,把核心业务链路画出来,从用户发起到最后落库,每一步写清楚,然后在每个环节旁边写下“如果这块出问题,用户会感受到什么”,再往下推“用什么指标能提前发现”。
比如用户登录环节,用户感受到的是“登录转圈”,指标就是登录接口耗时和错误率;支付环节,用户感受到的是“支付失败或迟迟不回调”,指标就是支付回调延迟、支付网关可用性;库存环节,用户感受到的是“提示库存不足”,指标就是库存服务QPS和缓存命中率。
这样走一遍,监控对象自然就清晰了。顺序很重要:先业务,后技术;先用户视角,后系统视角。这个顺序反了,后面做再多告警优化都是白费。
3. 第二个坑:告警设计翻车,要么轰死你,要么瞒死你
3.1 阈值拍脑袋定,一堆难用的静态规则
监控对象选对了,下一步就是告警。这个环节翻车率极高。最常见的是阈值拍脑袋:CPU使用率定个80%吧,内存定个90%吧,磁盘定个85%吧。看着好像挺合理,实际上运行起来根本不是那么回事。
我见过某系统上线一周,天天夜里告警轰炸,值班工程师一看——磁盘用了75%,确实超了70%的阈值。但问题是这台机器只是日志盘,空间大着呢,写了半年也写不满。这种告警除了让人凌晨爬起来点“确认”之外,没有任何价值。连续轰炸几天之后,值班工程师直接把告警静默了。然后某天数据库服务器磁盘真的满了,反而没人响应。
阈值定得不合理,比不定阈值更糟。不定阈值你至少知道“我没发现故障”,定了错误的阈值,你会被海量无效告警淹没,产生“狼来了”效应——等真狼来了,没人信了。
3.2 没有分级、没有收敛,告警成了灾难
告警设计第二个问题是“一视同仁”。磁盘告警和支付成功率告警,推送方式一样、值班响应等级一样、处理时效要求也一样。这直接导致两种后果:要么所有告警都当大事处理,人累死;要么所有告警都当小事忽略,事大了没人管。
正确的设计必须分级。我常用的分法是P0/P1/P2/P3四级:
P0:核心业务不可用,比如下单成功率骤降、支付接口全局超时,需要立即电话通知,5分钟内响应。P1:重要功能受损,比如某个核心接口P99显著恶化但业务还在跑,需要15分钟内响应。P2:局部异常,比如某个非核心服务的错误率升高,工作时间处理即可。P3:信息类通知,比如某台机器磁盘快满了但还有较大余量,记录跟踪就好。
除了分级,还要做告警收敛。收敛包含几层意思:一是聚合,比如同一个服务在不同机器上的同类型告警,合成一条;二是抑制,比如某个下游服务故障时,上游所有调用方的错误率告警都被自动抑制,因为根因已知,不需要重复轰炸;三是静默,比如已知的变更窗口期,暂停相关告警。
3.3 一套有效的告警规则是怎么长出来的
告警规则的制定,我强烈建议不要一步到位。先定一个“宁可漏报不可误报”的宽松版本,跑两周,把噪音告警全部标记出来,逐条优化,然后逐步收紧。这个过程需要业务方、开发、运维三方一起参与,不是运维单方面拍板的事。
阈值的设定,能不用静态值就不用静态值。很多开源监控系统支持动态基线,自动根据历史数据计算“什么算异常”。比如某个接口的耗时,周一到周五白天和深夜本身就有不同分布,静态值很难适配。动态基线用历史分位数判断,比如连续5分钟超过P99历史基线,才算异常,误报率会低很多。
你可能会觉得动态基线很难搞。其实不需要多复杂,最简单的做法就是按周维度看趋势,取过去四周同一时间段的P95/P99值作为参考基线,超过基线一定比例或绝对值,判定异常。这个逻辑用定时任务就能实现,并不依赖某个特定工具的“智能算法”。
告警频率、重复告警的处理也要想清楚。同一类告警,30分钟内只发一次就够,不需要每分钟都发。很多系统支持“告警沉默时间”,但默认设置不一定合理,要主动去调。
4. 第三个坑:存储容量拍脑袋,跑一年磁盘先崩
4.1 指标数据的高基数、高写入、高扇出特征
监控系统上线之初,大家很少会认真算存储容量。反正采集服务把指标收上来,往存储里写就是了。等到系统跑了半年一年,突然发现存储快满了,查询也越来越慢,才回过头来做容量规划,这时候已经有点迟了。
监控数据的特点是三高:高写入,每秒可能几万个数据点写入;高基数,指标的标签组合爆炸式增长;高扇出,一份数据既要服务实时告警,又要服务历史查询,还要服务大盘展示。这些特性决定了它的存储规划和普通业务数据库完全不是一回事。
以一套500台主机的集群为例,每台主机采集大约300到400个指标,采集频率设为15秒一次,你算一下:500台 × 350个指标 ÷ 15秒,大约每秒需要写入11667个数据点。如果加上业务指标和链路数据,这个数字很轻松就到每秒几万。
4.2 算一次容量,你就知道该买多大的盘子
容量估算其实不复杂。上面那个例子每秒大约1.2万个数据点,每个数据点在主流开源时序存储里压缩后大约需要3到5字节,加上索引和副本开销,放大约按每个数据点10字节估,这样一天的数据量大约是:11667 × 10 × 86400,约等于10GB/天。单副本一年就要3.6TB左右,如果做了3副本,那就是10TB以上。
这只是最保守的估算。实际还会更高,因为指标会新增、采集频率可能要降到10秒、还有趋势分析需要原始高精度数据。所以我做容量规划时,会在估算结果上再乘以1.5到2的冗余系数。
很多团队栽就栽在没做这一步。某个项目跑了一年,监控存储占用快把数据盘挤爆了,运维同学临时清数据,把三个月前的历史指标全删了。代价是什么?业务方想回溯半年前的一次故障分析,数据没了。监控数据的价值恰恰在历史——故障复盘、容量规划、性能回归,都依赖历史数据。删历史数据等于烧档案。
4.3 存储方案要在选型时就定好,别等爆了再换
存储方案的核心决策点有三个:一是数据保留策略,不同粒度的数据保留多久;二是降采样规则,原始数据保留多久,之后降为分钟级、小时级分别保留多久;三是冷热分层,热数据放高性能存储,冷数据放低成本对象存储。
降采样是最容易被忽略的。我的经验是:原始15秒粒度数据保留7天,1分钟粒度保留30天,5分钟粒度保留一年。这样既保住近期故障分析需要的精细度,又不至于让一年前的数据还占着高成本存储。规则可以定期调整,但要在选型的时候就把机制定下来,而不是等存储满了再手动折腾。
存储方案选型的时候,务必把“未来三年的数据量增长”作为一个核心约束条件,别只看当前规模。按照现代业务增速,监控数据量每一年到两年翻一番很正常。选型时如果只按当前规模选了存储,大概率第二年就要重新架构迁移,那个成本可比一开始选大一点高多了。
5. 一套实操落地的选型框架,照着做就能避开这些坑
5.1 选型前先回答四个关键问题
我已经把三个坑的成因和表现讲清楚了。接下来是实际操作层面的东西。我建议任何一个团队在做智能监控系统选型前,先坐下来回答四个问题,回答清楚了再去看具体工具:
第一个问题:我们最核心的三条业务流程是什么,它们在用户侧的关键体验指标有哪些?这个问题的答案决定监控对象,答不上来,后面全白搭。
第二个问题:出故障时,我们的响应机制是什么?谁负责看告警,什么级别的告警需要什么级别的响应?这个问题决定告警设计,和工具本身关系不大,但直接影响工具配置。
第三个问题:我们预计三年后会有多少台机器、多少个服务、多少条业务链路,监控数据的增长曲线大概是什么形状?这个问题决定存储选型。
第四个问题:我们的团队有多少人,有没有专职监控开发,能接受多么复杂的部署运维成本?这个问题决定技术选型的天花板。
四个问题里,前两个往往被忽略,但恰恰是最影响成败的。工具选错可以换,监控对象错了、告警设计错了,那是推倒重来。
5.2 技术选型时重点考察什么
确定四个问题之后,再去看具体技术方案。我着重考察五个维度:
采集能力,能不能覆盖主机、容器、中间件、应用、业务指标多种数据源。不是所有场景都适合上代理,有些环境更适合无侵入式采集,要确认方案对无侵入采集的支持程度。
数据存储能力,是不是专门为时序数据设计的,压缩率、写入吞吐、高基数下的性能表现如何。高基数场景是很多存储方案的“杀手”,我实测过,标签组合一旦上百万,有些存储的性能会断崖式下降,这个必须在选型前提出来做压测。
告警引擎,规则配置是否灵活,支不支持聚合、抑制、静默、分级,告警触发的延迟是多少秒。告警引擎看着不起眼,实际决定你半夜能不能睡好觉。
可视化与多租户能力,能不能按业务线、按团队拆分视图,权限能不能隔离。很多企业做到后面,不同团队想在自己视图里看自己业务的数据,如果选型时没考虑到,后面再补功能很难受。
还有被很多人忽略的一点:可运维性——部署起来多麻烦,升级要不要停服,出问题好不好排查。一个“理论上功能很强”但日常维护要一个专人全职伺候的系统,在小团队就是灾难。
5.3 分阶段落地路线,别想着一步到位
最后一个建议,也是最重要的经验:不要追求一步到位。落地智能监控系统,我推荐分三个阶段走。
第一阶段,做“看得见”。只用一到两周时间,把核心业务指标和基础设施指标采起来,出核心链路的大盘。目标只有一个:当业务出问题时,能快速定位到大概率的故障范围。这个阶段不需要追求完美,更不需要把告警配满。
第二阶段,做“告得准”。在“看得见”的基础上,把告警规则逐步完善,分级、聚合、抑制机制都建立起来,经过一到两个月的持续优化,把误报率压到可接受的水平。这个阶段是耗时最长的,需要团队耐心打磨。
第三阶段,做“用得深”。当监控数据稳定积累半年以上,可以做容量预测、性能优化、SLO管理这些更高级的应用了。这些依赖长期历史数据的场景,前两个阶段没做好根本无从谈起。
每个阶段都有明确的交付物和验收标准,做完一个再做下一个。这套路线我实践过多次,节奏稳定,风险可控,推荐你直接抄作业。
6. 真实的坑和排查速查:如果已经踩了,怎么爬出来
6.1 如果监控对象错了,从业务盘点重新开始
如果你发现现有监控对业务故障几乎“无感”,最直接的办法是停下来,别继续加新指标,别优化大盘。先花一到两周做业务链路盘点,把核心链路和关键体验指标梳理出来,和现有采集项对比,缺什么补什么。
注意,这里最容易出现的阻力是“习惯”:团队已经习惯看旧大盘了,业务方已经习惯“监控没用”了。我做过几次这样的切换,经验是别一上来就推翻旧大盘,新大盘先跟旧大盘并行跑两周,用真实的故障案例证明新大盘能更快定位问题,再逐步迁移,阻力会小很多。
6.2 如果告警风暴已经发生,先止血再优化
告警风暴的控制分两步。第一步是止血:把噪音最大的告警直接静默或降低级别,宁可先“漏报”,先把信任感找回来。第二步是重建:按前面说的分级和收敛机制重新设计,每次只改一小批规则,观察效果再继续。
止血阶段最怕的是有人反对,“这个告警虽然经常误报,但万一真出事了怎么办”。我的回答是:如果一个告警经常误报,它已经在培养团队“忽略告警”的习惯,真出事时它的价值已经是负的了。先把负价值去掉,再逐步构建正价值。
6.3 如果存储已经吃紧,先保住历史再谈扩展
存储吃紧的紧急处理,原则只有一个:保住高价值历史数据,快速释放低价值空间。具体做法是立即配置降采样规则,把超过保留周期的原始数据汇总成粗粒度数据,释放原始数据占用的空间,而不是直接删除。
我之前遇到过一个实例,团队直接把半年前的原始数据全删了,理由是“当时监控存储库查询太慢,领导让清数据”。后来做性能回归分析,需要对比去年同期的业务耗时分布,数据没了,整个分析只能靠估计。这种损失是无法补救的,而且完全可以通过降采样避免——粗粒度数据虽然细节少了,但趋势分布还在,足够支撑大多数分析场景。
7. 写在最后:选型最大的坑,是把工具当答案
三个坑讲完了,但我想说一句更深层的话:这些年做智能监控系统,我发现真正决定成败的,不是那个监控工具,而是使用工具的人对“监控”这件事的理解。
我见过用着最简单的开源组件、但把业务指标梳理得清清楚楚的团队,一套轻量方案就把故障发现时效从小时级提升到分钟级;也见过功能大而全的商业平台,因为告警规则乱配,落得“全员静默,故障靠吼”的下场。工具是放大器,你的监控设计是对的,工具帮你放大效率;你的监控设计是错的,工具帮你放大混乱。
如果你问我,现在要从零开始搭建一套智能监控系统,我会建议你按这个顺序做:先花一周梳理业务链路定监控对象,再花两周搭采集和基础大盘,然后用一两个月打磨告警规则,存储容量按三年算好、按一年备份。工具选择放最后,等前面都想清楚了,你自然知道该选什么,甚至发现其实你早就拥有足够好用的工具了。
这是我反复实践过的路径,希望你不用像我一样,把三个坑一个不落地都踩一遍。