还记得三年前那个让我刻骨铭心的周六凌晨吗?
那是我们团队业务刚起步的时候,大概凌晨3点20分,手机疯狂震动,仿佛要把床头柜震碎。我迷迷糊糊抓起手机,看到监控群里瞬间刷了99+条消息:“CPU使用率过高”、“磁盘IO延迟”、“接口响应超时”……
那一刻,我的肾上腺素飙升,手抖着打开电脑,把所有人都电话轰炸了一遍。折腾到天亮才发现,其实只是一个无关紧要的数据分析脚本在跑批,稍微占用了点内网带宽,对核心业务没有任何影响。
那一周,整个团队都顶着黑眼圈写代码,怨气冲天。
这就是很多中小团队的现状:报警靠吼,响应靠抖,复盘靠扭(推诿)。
我曾以为搞好运维就是把Prometheus搭好、Grafana大屏做得酷炫一点。但踩了无数个坑后我才明白:没有分级和SOP的监控,就是一场针对开发者的DDoS攻击。
今天想和大家聊聊,在一个没有专职运维、资源有限的中小团队,我们是如何把线上故障响应这套机制“跑”顺的。
一、 拒绝“狼来了”:报警必须分级
很多团队(包括当年的我)最容易犯的错误就是“大锅烩”。把所有监控指标——不管是测试环境的磁盘满,还是生产环境的支付失败——全部推送到同一个钉钉或飞书群里。
结果显而易见:“报警疲劳”。
当群里每天有500条无关痛痒的消息时,大家就会下意识地把这个群静音。直到那条真正的P0级故障混在其中,被所有人华丽丽地无视了。
观点:如果所有报警都是紧急的,那就没有什么是紧急的。
我们后来痛定思痛,做了一次彻底的“报警大清洗”,建立了一套极简的分级标准,这套标准我到现在还在用:
- P0(灾难级):核心业务瘫痪,直接导致资金损失或大面积用户无法使用。
- 动作:必须电话+短信轰炸OnCall人员 + 技术负责人(TL),5分钟内必须响应。
- 案例:用户无法下单、支付接口全挂、App打不开。
- P1(严重级):核心功能受损,但有降级方案,或者非核心功能不可用。
- 动作:IM群特急消息 + 电话通知OnCall人员,15分钟内响应。
- 案例:搜索功能变慢、用户无法上传头像(但不影响下单)、后台管理系统进不去。
- P2(警告级):系统指标异常,但业务暂时未受明显影响。
- 动作:仅IM群通知,无需电话,工作时间处理即可。
- 案例:某台机器CPU飙高到80%但队列在消费、磁盘剩余空间低于20%。
- P3(信息级):纯记录性质,给研发查问题用的。
- 动作:不推送,仅记录在日志或看板中。
落地实战: 去年双11前夕,我们把P0和P1报警单独拉了一个群,规定**“谁也不许屏蔽这个群”**。而P2、P3报警则丢进只有当天值班人员才会看的“噪音群”。
效果立竿见影:那个P0群平时静悄悄的,一旦响一声,所有人都会心里“咯噔”一下,立马打开电脑。这才是有效的报警。
二、 告别“个人英雄主义”:建立SOP而不是依赖大神
在中成长期团队,最怕一种情况:线上挂了,那个最懂系统的“大神”正好在飞机上/陪老婆/喝醉了。
剩下的人面面相觑,手里拿着键盘却不敢敲命令,因为不知道重启会不会导致数据丢失。
观点:SOP(标准作业程序)的本质,是把“大神的经验”固化成“小白的说明书”。
我强制推行了一套非常简单的**“故障响应SOP三板斧”**,贴在每个人的工位上:
第一板斧:止损优先,查因靠后 这违反很多技术人的直觉。技术人看到Bug的第一反应是“为什么会这样?我要看日志”。 错! 此时老板和客户在乎的不是Bug原因,而是什么时候能用。
- SOP要求:一旦确认是故障,先执行预案(重启、回滚、切流、降级)。
- 真实案例:有次Redis缓存击穿导致DB压力过大。值班的新人想去分析是哪个Key,被我拦住了,直接按照SOP执行了“限流+扩容”。虽然少卖了几单,但保住了数据库没崩。
第二板斧:角色分工,不要围观 以前一出事,七八个人围着一台电脑指指点点,效率极低。现在我们明确角色:
- 指挥官(IC):通常是TL或OnCall负责人。他不操作键盘,只负责决策(要不要回滚?)、同步信息(每15分钟向老板/客服同步进度)。
- 操作员:执行具体命令的人(手要稳,心要细)。
- 通讯员:负责去安抚业务方,挡住外面的催促。
第三板斧:升级机制(Escalation Policy) 不要让一线开发死扛。 我定了个规矩:如果15分钟内没定位到原因,或者预案无效,必须强制摇人(升级)。 不要觉得丢脸,死扛导致故障时间拉长才是最大的丢脸。
# 我们的简易升级策略示例
incident_response:
level_1:
who: 当周OnCall值班研发
time: 0-15分钟
action: 尝试重启/回滚/排查
level_2:
who: 核心架构师/Tech Lead
time: >15分钟
action: 介入决策,评估是否停服维护
level_3:
who: CTO/CEO
time: >30分钟
action: 决策是否启用灾备或发布全员公告
三、 从“背锅大会”到“无责复盘”
故障解决后,真正的挑战才开始。
很多团队的故障复盘会(COE)开成了“批斗大会”:“小张,你怎么这么不小心?”“测试怎么没测出来?”
结果就是,大家为了不背锅,开始隐藏隐患,或者互相甩锅。
观点:故障是系统的失败,不是个人的失败。
我在团队里立了一个原则:复盘会严禁指责个人,只讨论流程和机制。
我们有一个保留项目:“5 Why 分析法”。 以某次“上线导致服务雪崩”为例,我们是这样剥洋葱的:
- Why 1:为什么服务挂了?
- 答:因为上线了一个包含死循环的代码。
- Why 2:为什么Code Review没看出来?
- 答:因为Reviewer当时在忙别的,且逻辑太复杂一眼看不透。
- Why 3:为什么测试环境没测出来?
- 答:因为测试数据量太小,触发不了死循环的阈值。
- Why 4:为什么没有熔断机制保护?
- 答:因为旧系统一直没接熔断器。
- Why 5:根因是什么?
- 结论:不是“小张写了Bug”,而是**“缺乏自动化的大数据量压测机制”以及“遗留系统缺乏熔断保护”**。
Action Item(改进项):
- 不是“惩罚小张”,而是“下周补齐熔断中间件”和“引入流量回放工具进行自动化回归”。
这才是有价值的复盘。我每周五下午都会花半小时审视这周产生的Action Item有没有落地,不落地,复盘就是走过场。
结语与行动建议
运维从来不是一蹴而就的“黑科技”,它是由无数个枯燥的细节、克制的报警和严谨的流程堆出来的安全感。
对于中小团队来说,不要迷信大厂那些复杂的AIOps(智能运维)工具,先把最基础的SOP跑通,比什么都强。
最后,给大家3个明天上班就能落地的建议:
- 做减法:打开你的报警群,把最近一周没用的报警全部关掉,或者调低级别。保持P0群的绝对纯净。
- 定名单:拉一个Excel,明确未来一个月的OnCall值班表,并规定好“找不到人时的备份联系人”。
- 写文档:把你脑海里最重要的3个救命招数(比如:怎么回滚、怎么重启、怎么扩容)写成文档,置顶在群里。
小互动: 如果是你,遇到线上故障,你更倾向于让“大神”单兵作战快速解决,还是坚持走SOP流程哪怕慢一点点? A. 效率优先,大神直接上 B. 安全优先,死磕流程
欢迎在评论区告诉我你的选择,顺便吐槽一下你遇到过最离谱的报警是什么?