凌晨两点十七分,故障监控大屏上那个红色警报图标跳出来的排查瞬间,我手里的流程咖啡杯差点摔在地上。数据库主节点CPU使用率直接冲到97%,故障读写延迟飙到800毫秒。排查这不是流程第一次了,上个月同样的故障场景让我在机房里蹲了整整六个小时。
故障排查这事,排查说白了就是流程一场有章法的混战。你得先稳住阵脚,故障别被那满屏的排查报错唬住。我给自己定了个铁律:前五分钟只看监控大盘,流程不碰任何日志文件。故障为什么?排查因为90%的故障都藏着共性——要么是流量突增,要么是流程依赖服务挂了,要么是代码刚上线。看大盘就是在画地图,先知道自己在哪,才能谈得上往哪走。
那天晚上,我按老规矩来。先查入口网关的QPS曲线,平得跟死海似的,没异常。再扫一眼缓存集群的命中率,掉到62%——平时都稳定在95%以上。这就有意思了。缓存不命中,数据库必然遭殃。我立刻调出最近十分钟的发布记录,果然,半小时前有人更新了商品服务的配置项。
找到嫌疑对象,接下来就是验证。别急着回滚,先看那个配置改动具体改了什么。我翻出git提交记录,发现同事把缓存key的前缀从“product_v2”改成了“product_v3”。这他妈就是典型的低级失误——前缀一变,旧缓存全部失效,所有请求直接打到数据库上。
处理办法简单粗暴:先临时把配置改回去,让缓存重新热起来。等缓存命中率恢复到正常水平,再去处理那个误改的配置。整个过程花了大概二十分钟,比上个月那次少用了四小时。区别在哪?就在于我这次没有一上来就钻到日志堆里瞎翻。
说句实在话,很多人排查故障最大的问题不是技术不行,而是顺序搞反了。他们喜欢从最底层开始查起——看代码、看SQL、看磁盘IO,恨不得把每行日志都嚼碎了。但真正的老手都懂,排查必须自上而下。先确认入口流量,再看中间件状态,最后才轮到业务代码。就像医生看病,先量体温测血压,不会上来就给你做胃镜。
当然,这套流程也不是万能的。有一次我遇到个诡异故障,所有指标都正常,就是接口偶尔超时。按照标准排查流程走了三遍,愣是找不到原因。后来发现是新来的运维小哥在凌晨跑了个定时任务,正好和业务高峰期撞车,把带宽给挤爆了。那小子后来被调去管测试环境了,但这事给我提了个醒——流程图只是骨架,真正重要的是保持怀疑,别被任何“正常”蒙蔽。
排查故障的本质,其实是在跟时间赛跑。每一分钟的犹豫都会变成真金白银的损失。我现在处理问题时,手机永远开着秒表。不是说非得卡着时间,而是给自己一个紧迫感的锚点。超过三十分钟还定位不到根因,我就会把所有人叫到白板前,从头梳理一遍假设,把那些想当然的结论全部划掉。
说实话,干这行久了,你会发现故障永远比你想的更狡猾。但只要你心里那张流程图足够清晰,就不会彻底乱了阵脚。就像那天凌晨,等我改完配置,看着监控曲线慢慢回落,数据库连接数从三千降到八百,那种感觉比喝十杯咖啡都提神。
对了,后来我在那个配置项旁边加了条注释:“别改前缀,除非你想体验凌晨的机房。”到现在为止,还没人再犯过同样的错。
