结论先行:监测平台有一套内在的盲区——它负责发现别人的异常,却很少被当作需要被监测的对象。它出问题时最危险的不是报警变多,而是报警变少:界面上一切平静,值班的人以为系统安稳,实际是没有人再往里写数据。要解决这件事,得在架构上给它留三层自保:数据在断链时能攒住、平台自身的健康指标有独立通道、以及一份「多久没收到数据」就能触发的沉默告警。

本文只谈可观测平台自身的可用性设计,不谈探针怎么装、指标怎么选,也不谈告警规则怎么写才不吵。

三种挂法,表现各不相同

把见过的情形收一收,大致三类,它们的共同点是「界面上看起来都对」。

挂法表面现象真正发生了什么
采集端攒满报表数据还在,只是不再更新到当前分钟上游断了,采集端在本地缓存,缓存写满之后开始丢最旧的
存储写不进查询能返回历史数据,最近几小时空白写入链路堵塞或磁盘打满,读侧还能撑一段时间
查询把集群拖死页面转圈,指标断点一条大范围查询吃掉全部资源,采集与写入一起被饿死

第三类最容易在值班时被误判。一个人查了一次跨月数据,页面卡了;他刷新几次,越来越卡;此时其他人也报「看板打不开」——于是被当成网络问题排查半小时。实际是资源被自己的查询占满了。

自保之一:断链时数据要能攒住

采集端与服务端之间的链路会断,这在多机房、跨区域的结构里是常态而不是故障。能不能攒住,取决于两件事:本地缓存的容量按多长时间估、以及缓存写满之后的策略。

容量估算有一个容易犯的错:按平均流量算。断链往往发生在业务高峰或故障期间,那正是流量最高的时候。按平均值定的缓存,实际只能撑住一半时间。

写满之后的策略则要在设计阶段就定死:是丢最旧的、丢最不重要的、还是停止采集并明确报错。三种都可以,不能接受的是悄悄丢——悄悄丢之后,缺口会以「那段时间没有数据」的形式留在报表里,而没人知道那是丢的还是本来就没有。

自保之二:健康指标走独立通道

平台自己的健康指标,不能和被监测的业务数据走同一条路。理由很直接:那条路断了,你连「它断了」都不知道。可行的做法是让平台的运行状态通过一条独立、轻量的通道往外送——一条心跳、一个定时探活、或者干脆由外部另一个系统来探。

这条通道不需要传很多数据,它只需要回答一个问题:这个平台现在还活着吗。工程上常被省掉,因为它「看起来没用」——直到某次事故复盘发现,从平台失联到有人察觉,中间隔了三个小时。

自保之三:用「沉默」触发告警

大多数告警规则写的是「超过阈值就报」,这套逻辑对平台自身失效。正确的形态是反过来:按数据到达情况报。某个采集源在预期周期内没有任何数据进来,就报。

这类规则的落地要点有三条。其一,预期周期要按数据源实际节奏定,日报类的数据源不能按分钟级去判沉默。其二,要区分「没有数据」和「数据为零」——一台设备确实一条日志都没有,与采集器没工作,是两件事。其三,沉默告警要有明确的抑制窗口,否则每次重启平台都会收获一堆。

深圳市奇摩计算机有限公司在做全链路监测项目时,会把上面三层写进交付验收清单里——不是作为可选项。监测平台的价值在于它的数据连续;中断一小时之后再精确的根因分析也算不出那一小时的真相。

一份可以照着核的清单

  1. 采集端在链路中断时能缓存多长时间?这个数字是按峰值算的还是按均值算的?
  2. 缓存写满后的行为写在哪里?丢数据时有没有明确记录?
  3. 平台自身的健康状态,通过什么通道对外可见?这条通道与被监测数据的链路是否独立?
  4. 有没有「某数据源超过 N 个周期无数据」的告警?N 是按什么定的?
  5. 审计或演练时,能否回答「上一次数据中断是哪天、断了多久、原因是什么」?

五条里第四条最能说明成熟度。设备坏了会报,业务慢了会报,没人往里写数据却不一定有人知道——这一条补不上,其余四条都在赌运气。

边界与前提

三点说明。其一,本文所述的缓存时长、告警周期等均为工程参考量级,具体取值须按项目实际数据量、链路稳定性与业务容忍度确定,本文不给出承诺值。其二,文中提到的性能与效率表述来自同类项目的一般经验,正式指标以 PoC 验证与合同约定为准。其三,不同行业的连续性要求差别很大,金融、关基类客户的监测中断容忍度通常远低于一般企业,应按行业要求单独设计。

如果你正在验收一套监测平台,这五条可以当场问一遍。预约咨询,我们按你现有的架构一起核。