V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
swananan
V2EX  ›  程序员

线上故障应急处理: 4 年多 on call 经验总结

  •  2
     
  •   swananan · 1 天前 · 5543 次点击

    https://jt26wzz.com/posts/0007-online-firefighting-real-world-lessions-from-4-years-on-call/

    最近写了一篇回忆过去故障应急的博客,写的还是挺开心的,发现自己博客没有被收录在 VXNA 节点,就自己在这里发出来,交流交流。已经尽力隐藏了很多公司相关的细节,希望不要被熟人看见,有点羞耻,哈哈。

    67 条回复    2025-04-19 20:53:59 +08:00
    Glauben
        1
    Glauben  
       1 天前
    粗略的看了一下,感觉是不错的分享,收藏了有空看,点个赞
    maxwellz
        2
    maxwellz  
       1 天前
    喜欢文中的配图,是最近很火的吉卜力风格的吗
    yzqn
        3
    yzqn  
       1 天前   ❤️ 1
    另外还有一个特别的技巧,如果在屏幕共享的时候,你甚至不想去问 chatGPT ,毕竟如果是一个愚蠢的问题,一般都会觉得挺尴尬的。这个时候,你可以快速的阐明你的意图,然后把验证任务打包分配出去,指派给会上在场的另外一个同学,这样就可以完美避开了这个尴尬局面

    有一个运维大哥,当时发布的时候,先去抽烟放松了一下,然后上来操作的时候,就把版本发错了中心机房,直接 game over ,引发了故障。但是在故障 review 上还是谈笑风生,甚至可以说是挥斥方遒,各种分析系统的根因,熟练的安排各种 action ,丝毫不受影响。我当时觉得不管怎么说,这种心态还是值得学习的。

    这两段太真实了...
    wuyiccc
        4
    wuyiccc  
       1 天前
    业务系统功能回滚怎么做呢,看了蛮多博客都说要做功能回滚,但是一直没看到具体的操作案例
    swananan
        5
    swananan  
    OP
       1 天前   ❤️ 1
    @maxwellz 不是,我是最简单让 chatGPT Dall.E 3 绘图模型帮我生成的,只是要求是动漫风格。用的还是免费版的 chatGPT ,虽然有冷却时间(一次只能画 3 ,4 张吧),但是我很满意,毕竟单独写文字有点干巴巴的,有图片感觉视觉上都好看不少
    kingcanfish
        6
    kingcanfish  
       1 天前   ❤️ 1
    写得挺好的
    以我在字节当了几年牛马也就是那么三板斧
    一是 出现问题先止血
    二是 发布新版的时候要做到可观察 可监控 可灰度 可回滚
    swananan
        7
    swananan  
    OP
       1 天前   ❤️ 1
    @wuyiccc 一般会分配置回滚和二进制回滚,具体得看你当前系统相关配置系统和发布系统是怎么设计的了,不过这些都是核心保命的东西,一般都是很傻瓜式的一键操作。
    kingcanfish
        8
    kingcanfish  
       1 天前
    还有一个就是 做方案是不能只做需求方案 还得做应急方案 sop, 就是出现问题了 你又不在现场 有人能按照你的 sop 恢复
    swananan
        9
    swananan  
    OP
       1 天前
    @kingcanfish 是的,sop 也是必做的,但是故障现场还是得具体问题具体分析,如果相关功能负责人不在,其余不熟悉的人无脑照着 sop 来恢复,我觉得很大概率会雪上加霜。
    另外,就是故障发生的时候,相关人士有一口气在,就必须得上线,这是隐藏红线了,哈哈(🐶🐶保命,我并没有共情资本家,只是既然干了这行,就只能拥抱这样的规则
    opengps
        10
    opengps  
       1 天前   ❤️ 1
    写的不错,运维过程中确实有很多案例非常有意思。我当年遇到过:地铁挖断光纤、机房停电、跨网通信不通、缓存泄漏、句柄泄漏、并发多异常退出。。。其中每一个拿出来都可以讲个几千字的原因分析和反思出来
    celiachu207
        11
    celiachu207  
       1 天前
    感触很深,曾经遇到过修复版本的问题会引发更大的问题,不过当时先灰度了一下,避免了这个版本。
    jydeng
        12
    jydeng  
       1 天前
    写的真不错👍
    看我司的稳定性组就在做这些事情,故障止血、指挥、复盘,蛮专业的。
    可惜我是前端,很少参与,有故障一般回滚即可。
    kuanat
        13
    kuanat  
       1 天前   ❤️ 5
    写的很好啊,有很多点我也有类似的经历。

    我补充一点关于定责和复盘这些非技术的事情。因为这些年我做过一线、负责人和老板,所以各个角度都有体验。定责复盘,实际上可以分为负责人(项目、组织经理)向老板汇报、向团队成员复盘两个部分,只是经常放在一起,而且以前者居多。

    我的建议是负责人要勇于承担责任,团队成员的失误就是负责人的失误。即使承担责任压力很大,也切忌甩锅。(开发、测试和运维团队之间可以适当相互帮忙背锅,分担一下压力。)从老板的角度上说,损失已经发生了,也不会非要把直接责任人找出来开掉。老板也需要台阶下,不然后续还怎么继续展开工作。从权责对等的角度上讲,如果一个团队总是不粘锅,那它就不重要,所以是极有可能最先被优化掉的那个。

    作为负责人,向团队成员做技术复盘的时候,更要注意对事不对人。本质上换个人并不能解决根本问题,能解决问题的只有排除人为失误的可能。那种出事临时工背锅的思路是不利于带团队的,人心散了。
    ponng
        14
    ponng  
       1 天前 via iPhone
    写的太好了
    lilyou
        15
    lilyou  
       1 天前
    学习了,前几个月出事故的时候手忙脚乱脑子空白,还是得多做些准备
    XuHuan1025
        16
    XuHuan1025  
       1 天前
    不错不错 有大帝之姿
    C0dEr
        17
    C0dEr  
       1 天前
    给 OP 点个赞,能沉下心来总结,写的太棒了
    timeisweapon
        18
    timeisweapon  
       1 天前
    运维工作类似急诊、消防,年轻没经验干不了 ,年老没精力受不了
    gxy2825
        19
    gxy2825  
       1 天前
    写的很好,感觉对我们这种刚工作几年的很有帮助
    0x663
        20
    0x663  
       1 天前   ❤️ 1
    看完了,看的血压上来了。
    真的受不了在休息的时候突然来个电话会议喊我排查问题,一点几把边界感都没有,就不能等到工作日再看问题?党的 XX 届全国代表大会都能推迟延期,什么勾八项目比党开会还重要?
    该休息休息,什么故障都没有身体熬夜加班出了故障重要。不用焦虑,天还塌不了。
    0x663
        21
    0x663  
       1 天前
    还好 OP 脱离了 ON CALL 的环境了。不然高压下必出问题。
    HENQIGUAI
        22
    HENQIGUAI  
       1 天前
    写得很好,感谢分享
    doublespout
        23
    doublespout  
       1 天前
    写的非常好,特别是青海湖团建故障,是因为没有发布,导致 fd 泄漏,也是离谱。
    yxc
        24
    yxc  
       1 天前
    写得太好了。收藏了。
    kcojkcnw
        25
    kcojkcnw  
       1 天前 via Android
    好文,感谢楼主分享
    nick1357
        26
    nick1357  
       1 天前
    做运维的,先收藏了,等上班再看[手动狗头]
    CodeWind
        27
    CodeWind  
       1 天前
    做了快三年 oncall 了,要是早看到这篇文章就好了,动作和我们一摸一样,我们多了个对研发的要求,要求发版必须可观测,可灰度,可回滚,越看越觉得你该不会是我们公司的吧
    housex
        28
    housex  
       1 天前
    怎么觉得哥们像是我们公司团队出去的呢
    skyrim61
        29
    skyrim61  
       1 天前
    6666
    egen
        30
    egen  
       1 天前
    > 但是这次变量,竟然是因为我们要去团建,那一周没有发布,导致线上服务长时间跑才暴露出来的资源泄漏。
    看到这个忍不住了
    laminux29
        31
    laminux29  
       1 天前
    为了发博客,买了阿里云域名,还进行了备案....

    话说在博客园开个专栏不香嘛?
    whusnoopy
        32
    whusnoopy  
       1 天前   ❤️ 1
    写得真好

    也分享一个我经常给伙伴们说的狗血 OnCall 给大家图一乐:我们的客户 A 被他的客户 B 找过来说我们的数据有遗漏,并且给了截图说 B 看到的界面跟 A 看到的界面数据不一致,但我们的客服在系统后台看 A 的数据里是没有 B 说的那几条的,当时我们正在团建爬黄山,负责这个模块的同学回想起出发前确实有上线发布过新版本,当时整个人都不好了,虽然说那个发布理论上绝对影响不到这才对,到山上能落脚的地方,开手机 3G 热点(对的那时候还没 4G 但还好已经有 3G 了),笔记本电脑连上(我曾经在大厂遇到过只要出去团建必然会有 OnCall 的魔咒,所以爬山也背着笔记本),看了许久,后台数据的确没有,最后发现特么的 B 给的截图里,表示他有数据的这个圈好像不太圆,是不是 B 用 P 的图来跟 A 闹,把这个猜测告诉 A 让 A 去跟 B 对质,然后 B 承认了是自己 P 的图……
    snitfk
        33
    snitfk  
       1 天前
    学习学习,转给团队去看看。
    xiaowangge
        34
    xiaowangge  
       1 天前 via iPhone
    多谢分享❤️
    nananqujava
        35
    nananqujava  
       1 天前
    @0x663 #21 我也 on call 了半年, 不是人干的, 还有压力怪一直催, 多方打电话, 甚至压力怪就看戏
    ytmsdy
        36
    ytmsdy  
       23 小时 52 分钟前
    oncall 确实挺能锻炼人的,自觉不自觉的会强迫自己去熟悉系统,学习各种各样的知识。
    不过这活最多也就干个一两年,干久了,容易神经衰弱。
    有段时间 oncall ,搞得看到微信跳出消息都冷不丁紧张一下。
    swananan
        37
    swananan  
    OP
       23 小时 7 分钟前
    @0x663 确实,好久没 on call 了 ,现在恢复了好多,居然开始怀念过去的日子了(加大剂量
    swananan
        38
    swananan  
    OP
       23 小时 6 分钟前
    @laminux29 博客园不符合我的审美,哈哈
    qingh
        39
    qingh  
       21 小时 7 分钟前 via Android
    真正的实战总结,收藏了。
    AstroProfundis
        40
    AstroProfundis  
       19 小时 31 分钟前
    写得不错,一看就是真干过的老手了,相对偏研发视角
    我第一份工作就是故障管理,楼主流程里面报故障和做复盘分锅的角色,一度怀疑楼主是熟人;特别是那个什么发错环境出故障的事情,我见过粘贴命令贴错了终端窗口搞出来的故障恍惚以为是同一件事情(

    这些东西见多了之后很自然就能明白啥叫对生产环境保持敬畏((
    AstroProfundis
        41
    AstroProfundis  
       19 小时 28 分钟前
    @AstroProfundis 发现楼主果然是前司的,怪不得这套流程那么眼熟 hhhh 只不过估计和我没有同时在职(
    Higurashi
        42
    Higurashi  
       19 小时 21 分钟前
    @0x663 #20 表示我也很遭不住这种,除非给我够多东西,我心里还是不那么舒服
    retain
        43
    retain  
       16 小时 12 分钟前
    好文, 值得看
    Int100
        44
    Int100  
       14 小时 49 分钟前 via iPhone
    写得真好,个人也有一段 on call 的经历,压力真的大,尤其是告警来的时候……
    speedmancs
        45
    speedmancs  
       11 小时 47 分钟前
    准备好详细的运维手册,sev2 15 分钟内搞不定立刻升级,开 bridge ,到处摇人,先 mitigate 然后再做 RCA.
    speedmancs
        46
    speedmancs  
       11 小时 46 分钟前   ❤️ 1
    rollback 是必须的,我们现在用 k8s, terraform 配置管理的 release ,做 release 时必须得带 rollback 选项,要不然不批。
    speedmancs
        47
    speedmancs  
       11 小时 39 分钟前   ❤️ 1
    我正在 oncall, 早上接到一个警报,一看 dashboard, 一堆超时, API 5xx
    一看还是个很重要的客户,直接上 k8s 集群看, 一看两个起了 30 多天的 pod 某个资源 util 99%.....但是系统负荷不算太大。

    不管了,直接一个一个重启 pod
    五分钟后一切正常,警报消除,开始排查日志,到处找人分析原因。最后也没查出个所以然,只能写个 tracking ticket, 然后跟经理和组里通报一下。
    speedmancs
        48
    speedmancs  
       11 小时 37 分钟前   ❤️ 1
    oncall 实际上就是值班的,可能对出错的系统也不是很了解,关键是要在短时间内处理这些问题,找到对应的人,该升级就升级,该摇人就摇人,最怕那种闷声大发财,一声不吭在那哼哧哼哧分析研究 2 个小时。。。。
    speedmancs
        49
    speedmancs  
       11 小时 29 分钟前
    我们以前有个哥们,oncall 时漏了好多警报,还有有 backup oncall, 后来这家伙说自己手机坏了。。。。然后开了个批斗大会把他狠狠批判了一顿。
    lqw3030
        50
    lqw3030  
       11 小时 26 分钟前
    值得学习,点赞👍
    dreampython
        51
    dreampython  
       10 小时 56 分钟前   ❤️ 1
    拜读 OP 的文章,其中“比如说周末拿出一张大白纸,什么都不看,在白纸上开始画自己业务系统的运作流程”对我帮助最大。
    我是一个 SRE ,一直找不到萦绕在心头的不踏实的来由,现在知道是没有熟练掌握产品架构和数据流的原因。
    已经拿着大白纸开始画数据流了。
    YOUXIAZ
        52
    YOUXIAZ  
       10 小时 44 分钟前
    写的很好,受教了
    zhoudaiyu
        53
    zhoudaiyu  
       10 小时 33 分钟前   ❤️ 1
    本人也是 SRE ,非常受用,感谢您!期待下一篇文章,分享一些通过回滚变量后仍不能解决故障的 case 。
    dustynight
        54
    dustynight  
       10 小时 29 分钟前
    写的很棒,很多时候看着文字都能回想起自己的一些工作经历,抛砖引玉分享一下我的想法。
    0. 最重要的一点,出了问题先恢复业务。不要想着当场 debug 发布修复,先把业务恢复了再说。有发版就回滚,改了配置就改回来,总之发生问题之前,对生产环境做了什么修改,赶紧改回来。
    1. 冷静。很多时候问题跟因都不复杂,只是当时太着急了,没找到原因。时刻对自己说“天塌不下来”,我只是个小虾米,捅破天+1 +2 先背锅。
    2. 每一次发布,都要做好回滚预案。新功能的开关,灰度等等。不要觉得就一行代码的变更加开关麻烦,出了事真能救命。
    3. 系统留一些人工干预的口子,保留直接上手洗数据的能力。我碰到过一些问题,最终是动用了全组人,手工一点点调用 API ,把数据洗回来了。
    vizResh
        55
    vizResh  
       10 小时 3 分钟前
    点赞+1
    unused
        56
    unused  
       9 小时 46 分钟前 via Android
    遇到过客户不接受临时止血方案,要求先找根因
    HXM
        57
    HXM  
       9 小时 21 分钟前
    看完了,很棒的分享,顺便问下博客用的主题是什么?
    levelworm
        58
    levelworm  
       9 小时 17 分钟前 via Android
    @speedmancs #47

    大佬是腾讯还是阿里的?我们公司数据部门一直在 on-call ,所以有段时间想要转 ops ,不过后来觉得自己水平还是太差,数据这块我知道一些,换成 k8s 这些就完全不懂了。
    lesismal
        59
    lesismal  
       9 小时 5 分钟前
    on call 最苦逼,兄弟注意身体
    Milesy
        60
    Milesy  
       8 小时 27 分钟前
    处理流程写到点上了,看着很舒服,心态也确实很重要
    NCZkevin
        61
    NCZkevin  
       7 小时 48 分钟前
    太真实了,在某大厂干了 3 年, 每两个月 oncall 的那周是我最痛苦的时刻
    Atma
        62
    Atma  
       7 小时 27 分钟前
    老板,收藏了
    SHIINASAMA
        63
    SHIINASAMA  
       3 小时 51 分钟前
    OP 真的厉害,刚工作不久隐隐约约能感受到一点,但没有如此细致的总结👍
    AstroProfundis
        64
    AstroProfundis  
       3 小时 37 分钟前
    @speedmancs #48 非常同意,最怕就是闷着头查根因把自己绕进去了的。

    收到报警或者故障通告不要怕,首先看是什么故障现象,不要去管根因,尽快想办法消弭掉这个现象恢复业务。当然很多时候恢复故障影响和根因排查是互相交织的甚至就是一回事,但第一时间目标一定是恢复而非搞明白 why

    如果发现短时间搞不定就要果断升级摇人并且把“我现在搞不定”喊出来,越多人知道越好,这样才有更多资源来帮助处理,甚至说难听点这是一个潜在的可能有助于事后甩锅的操作

    哪怕 oncall 的人只是接了个电话转头再打电话叫别人自己最终什么都没干也是有意义的,特别是对大公司来说故障影响时间缩短一秒都是实实在在的损失减少

    另外就是实际处理故障的人很容易因为压力或者工作量而埋头处理问题一声不吭,这个时候需要有同组的人或者主管在旁边帮忙把进度同步出来告知其他相关人员,我们曾经一度是在一些部门把这个要求制度化了的:要求任何时候处理故障必须有人去协助沟通,然后处理人员只需要和这个负责沟通的人说话,剩下的信息同步之类的都不需要管,专心修问题
    catazshadow
        65
    catazshadow  
       2 小时 57 分钟前 via Android
    写的很好,有含金量
    Cola98
        66
    Cola98  
       1 小时 48 分钟前
    @kingcanfish 但是这种会涉及到的甩锅问题吧
    swananan
        67
    swananan  
    OP
       21 分钟前
    @HXM https://github.com/XXXMrG/archie-zola/tree/main 这个主题,非常符合我的个人审美
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2683 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:15 · PVG 21:15 · LAX 06:15 · JFK 09:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.