ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

运维不是不归路:从手工运维到工程化运维的转型指南

运维不是不归路:从手工运维到工程化运维的转型指南

干运维是条不归路,这话我在机房里、在凌晨三点的告警群里、在年会的酒桌上都听过,不下二十遍。说这话的人第二天照样爬起来看监控大盘,一边骂一边把告警处理掉。真把这句话当真的,往往不是干了十年的老运维,而是刚入行一两年、每天被值班表和巡检单追着跑的年轻人。我自己也在这条路上走过一段,后来确实“跑路”了一回,从纯运维岗挪到了偏工程的岗位。所以这篇不写劝退,也不写鸡汤,就把这几年看到的东西摊开讲:运维这份工作到底卡在哪,哪些能力是真资产、哪些是平台绑定负债,想转型有几条路、每条路的门槛和代价是什么,以及在不辞职的前提下,怎么把日常那些琐碎的活儿攒成能拿得出手的东西。不管你是刚入行的新人,还是干了五六年正在犹豫的老兵,都能从里面找到能直接抄的部分。

1. “不归路”这三个字,到底在吐槽什么

1.1 一个运维的普通工作日长什么样

我先还原一个真实的工作日。早上九点到工位,第一件事不是写代码,是翻夜班告警记录:昨晚十一点半磁盘水位告警,凌晨两点一条网络抖动,凌晨四点某个定时任务失败。三条告警里两条是噪音,一条需要跟进但不紧急。九点半处理积压工单,业务方要开一台测试机、要一个域名解析、要临时放开一条访问策略。十点半被拉进需求评审会,讨论下周大促要扩多少台机器、带宽够不够。下午两点开始做变更,本来计划半小时,结果中间卡在一个权限审批上,等了一个多小时。四点半处理一个“页面慢”的反馈,查了半小时发现是前端资源加载问题,不属于你的范围,但你还得给出结论。六点准备下班,六点十分一条 P2 告警进来,处理到八点。

这一天里你干了十几件事,但没有一件是“完成”的。每一件都是被打断、被插队、被临时加塞。这就是运维工作最核心的特征:高度碎片化、强中断驱动、成果难以沉淀。写代码的人一天能提交三个 commit,你能说清楚今天到底产出了什么吗?很难。你能说清楚今天“没出事”,但“没出事”在绩效体系里从来不算成绩。这种日复一日的消耗感,才是“不归路”三个字真正的情绪来源,而不是工作本身有多难。

1.2 让人想跑路的四件事

把这些年的吐槽归归类,其实就那么四条,而且每一条背后都有具体的机制问题,不是单纯的情绪。

第一是值班与告警疲劳。很多团队的值班是“全员轮转、7×24 响应”,但告警规则是历年累积下来的,没人清理。一条磁盘使用率超过 85% 就发短信,一条接口响应超过 2 秒就打电话,结果一晚上响五次,四次是误报。人被训练成了“看到告警先关掉再说”,真正的故障反而被淹没。这种状态下干一年,热情基本磨没了。

第二是责任边界模糊。业务说页面慢,第一个找运维;数据库连接数满了,找运维;代码里死循环打爆了 CPU,还是找运维。运维成了所有问题的第一接收站,但排查到最后往往不是自己的问题。更麻烦的是故障复盘时,“为什么没提前发现”这句话通常落在运维头上,哪怕这个指标压根没人提过要监控。

第三是成长曲线扁平。前两年学东西很快,装系统、配服务、写脚本、搭监控,每天都有新东西。第三年开始重复,第五年还在做同样的事。三年经验用十年,这句话在运维圈不是玩笑。技术栈更新了,但你的日常没变,因为业务还在跑那套老架构,没人有动力重构。

第四是价值不被看见。研发做出一个功能,能写进发布会;运维保证系统全年可用,是“本来就该这样”。成本中心和创新中心的差别,体现在预算、编制、话语权的每一个细节里。你想引入一套新工具,要论证三个月;业务想加一个功能,一周就上线了。

注意:这四条不是让你认命,而是要认清——它们全都是“组织机制 + 个人能力结构”共同作用的结果,其中至少有一半是你可以主动改变的。

1.3 我的结论:手工运维才是死路,工程化运维还有很长的坡

我见过两种运维,差别大到像两个职业。

第一种叫手工运维:靠人肉登录、靠记忆敲命令、靠 Excel 记 IP、靠口头传交接。这类岗位的天花板非常明确,因为它的核心价值是“有人在”,而不是“有系统在”。一旦组织要降本,这类岗位最先被合并、被外包、被要求“一人多岗”。说它是“不归路”,某种程度上没说错。

第二种叫工程化运维:把重复劳动变成工具,把经验变成规则,把故障变成可复用的检测项。这类人的产出是可积累的——今天写的巡检框架,明年还在跑;今天定的 SLO,明年还在用。这类岗位不但不是死路,反而是很多公司最缺的人,因为懂业务又懂基础设施、还能自己写工具的人,从来都稀缺。

所以真正该问的问题不是“运维是不是不归路”,而是“我现在做的事情,有多少能沉淀成明年还能用的东西”。如果答案是零,那确实该动一动了,但动的方式未必是辞职,也可能是先把手上的活儿改造一遍。

2. 跑之前先盘账:你的技能到底值多少钱

2.1 运维能力的四层结构

我习惯把运维能力分成四层,从下往上,每往上一层,可替代性就低一档。

执行层:装系统、配服务、拉网线、开机房、按手册操作。这一层的核心是“照着做不出错”,门槛低,可替代性最高,也是自动化最先吃掉的部分。你在这层待得越久,越危险。

工程层:能写脚本、能搭监控、能做 CI/CD、能搞定一套自动化流程。这一层的核心是“把重复的事情交给机器”,产出可以量化,比如“把一个部署流程从 40 分钟压到 6 分钟”。这层是转型的基本盘,绝大多数跑路成功的人,都是从这层开始发力的。

架构层:能做容量规划、能设计多活方案、能定技术选型、能在成本和稳定性之间做权衡。这一层的核心是“做判断”,判断错了要担责任,所以值钱。这层需要的不只是技术,还有对业务的理解和对风险的直觉。

业务层:知道系统为什么这么设计、钱花在哪里、哪些指标真正影响收入。这一层的人往往已经不叫运维了,叫平台负责人、稳定性负责人、基础设施负责人。他们的会议桌上讨论的不是磁盘,是预算和 roadmap。

大部分人卡在“执行层到工程层”这道坎上。不是能力不够,是日常被琐事填满,没有整块时间去搭东西。这个问题后面第 5 节会给具体的破局办法。

2.2 可迁移资产与平台绑定负债

转型时最痛的一件事,是发现自己引以为傲的技能换个环境就不值钱了。我把技能分成两类:

可迁移资产:Linux 系统原理、TCP/IP 协议、HTTP 与负载均衡原理、脚本与编程能力、数据库原理与调优思路、容器与编排的基本模型、监控与可观测性的方法论、故障排查的思维框架。这些东西换个公司、换个云、换个架构,照样能用。

平台绑定负债:某家云厂商控制台上那几个按钮的位置、某套自研发布系统的操作流程、某个内部工具的特殊写法、靠记忆记住的一堆 IP 和密码。这些东西只在当前环境有效,一旦离职归零,甚至会成为负资产——因为它给了你“我很熟练”的错觉。

判断方法很简单:把这项技能写进简历,投给一家用完全不同技术栈的公司,面试官还会追问吗?会追问,就是资产;看一眼就跳过,就是负债。

我见过一个挺典型的例子。某位同行在一家公司干了六年,对内部的发布平台熟到闭眼能操作,任何发布问题找他五分钟解决。后来公司整体迁移到容器化平台,新平台用的是标准化的声明式配置,他一下就不会了。六年里他积累的全部是“操作熟练度”,而不是“原理理解”,迁移成本高得吓人。这不是他一个人的问题,是很多人共同的坑。

2.3 一张自检表,给自己打分

下面这张表我给自己打过一次,也给几个朋友打过,说实话挺扎心的。每项 0 到 2 分,0 是完全不会,1 是会用但不熟原理,2 是能讲清原理还能教别人。

序号能力项判断标准分值
1编程能力能用 Python/Go 写一个 300 行以上、有异常处理和日志的工具0-2
2系统原理能解释一次请求从网卡到进程的完整路径,能定位 CPU 飙高的三类常见原因0-2
3容器与编排能独立写编排配置、能排查 Pod 起不来的五类原因0-2
4可观测性能设计一套指标体系,说清 SLI、SLO、错误预算的关系0-2
5自动化能用配置管理工具或 IaC 完成一套环境的从零交付0-2
6数据库能看懂执行计划,能判断慢查询是索引问题还是锁问题0-2
7网络能独立排查 DNS、连接超时、丢包三类问题0-2
8故障复盘能主持一次复盘,产出可跟踪的改进项并推动闭环0-2
9成本意识能说清当前系统的主要成本构成,并提出过被采纳的优化方案0-2
10表达与文档写过被人转发的技术文档或分享0-2

总分 20。我的经验是:12 分以下,先别急着跑,先补课;12 到 16 分,可以考虑内部转岗或平级跳;16 分以上,主动权在你手上。这个分数线不是科学标准,只是个参考锚点,但它能帮你把“我感觉自己还行”变成“我知道自己差在哪”。

3. 四条主流出口,门槛和代价都摆在桌面上

3.1 SRE 与平台工程:最平滑,但要真会写代码

这是运维转型最自然的路径,没有之一。因为工作对象没变,还是那套系统,变的是工作方式——从“我把它运维好”变成“我做一个东西让别人能把它运维好”。

门槛很明确:代码能力是硬门槛。不是“会写脚本”那种,是“能维护一个有测试、有文档、有版本管理的项目”那种。面试里常见的考察点包括:写一个带重试和超时的 HTTP 客户端、解释一段并发代码的问题、设计一个配置下发流程。语言上 Python 和 Go 覆盖了绝大多数场景,先把一门写熟,别贪多。

代价是学习曲线陡。白天上班,晚上写代码,前三个月会非常难受,因为你写的工具可能还不如手工快。但过了那个坎,你会发现思路完全变了:以前遇到问题想“怎么解决”,现在想“怎么让它以后不再发生”。

提示:准备转型期,别一上来就啃大部头。找一个你每天都在做的重复动作,用代码把它自动化掉,从 20 行开始。真实的小项目比教程里的完整项目有用十倍。

3.2 基础设施研发与云原生方向

这条路比 SRE 更偏“造轮子”,做的是平台本身:调度、网络、存储、发布系统、配置中心。门槛最高,收益也最高。要求你对底层原理有真正的理解,比如容器网络是怎么打通的、调度器的打分逻辑是什么、一次滚动更新背后发生了什么。

我不建议工作三年以内的人直接冲这条路,因为你缺少“系统在真实压力下会怎么坏”的直觉,写出来的东西容易纸上谈兵。但如果你已经干了五六年,处理过几十次线上故障,那这条路反而适合你——你知道痛点在哪,造出来的东西才有人用。

实际切入方式通常是从“给现有平台做二次开发或插件”开始,比如给监控系统写 exporter、给发布系统写插件、给调度平台写自定义控制器。这些活儿不大,但能让你从“使用者”变成“建设者”,简历上的含金量完全不同。

3.3 可观测性、稳定性与安全方向

这三个方向的共同点是:它们都是“专业深度型”岗位,靠判断力吃饭,不靠体力。

可观测性方向做的是指标体系、链路追踪、日志治理。核心能力是把“系统出了什么问题”变成“系统在哪个环节、以什么形式、以多大概率出问题”。这活儿需要很强的抽象能力,因为你要从海量数据里提炼出少数几个真正有信号量的指标。

稳定性方向更偏管理和机制,做的是 SLO 体系、变更管控、预案演练、容量规划。这个岗位在很多公司叫“稳定性工程师”或者“SRE 的一部分”,需要跟业务方大量沟通,技术只占一半。

安全方向的运维分支主要是基线加固、权限治理、应急响应。这个方向的特点是合规驱动强,需求稳定,但也要注意别陷进“天天填表”的泥潭。

3.4 离开技术岗:售前、交付、项目管理、业务运营

不是所有人都适合继续往技术深水区走。如果你发现自己最强的能力其实是“跟人打交道”和“把复杂事情讲清楚”,那技术岗反而是浪费。

常见的平滑出口有几个:技术售前,把产品讲给客户听,需要的是广度和表达;交付实施,把方案落地到客户环境,需要的是动手能力和抗压;项目管理,管进度、管风险、管协调,需要的是结构化思维;业务运营,往数据、成本、效率方向走,需要的是业务敏感度。

这几条路的共同优点是转型成本低、见效快,缺点是技术深度会停止增长,几年后如果还想回技术岗会比较难。这是个单向门,想清楚再迈。

3.5 四条路的对比表

我把上面几条路的现实情况整理成表,方便对照自己的处境。

路径核心门槛典型准备周期薪资弹性主要风险
SRE / 平台工程能独立维护工程项目6-12 个月中高代码基础不牢会被打回原形
基础设施研发底层原理 + 工程能力12-24 个月高缺少真实故障经验容易空谈
可观测性 / 稳定性抽象能力 + 沟通能力6-12 个月中高岗位数量相对少,集中在较大团队
非技术岗(售前/交付/项管)表达 + 协调 + 抗压1-3 个月中技术深度停止增长,回头难

看这张表的时候,别只看薪资弹性那一列。真正决定你能不能走下去的,是“准备周期”这一列——你能不能接受半年到两年的投入期,在投入期内收入不涨甚至下降。

4. 把苦劳改成功劳:简历和面试的实操改造

4.1 量化公式:把“做了什么”变成“改变了什么”

运维简历最大的问题是全是职责描述,没有结果。看十份简历,八份写着“负责服务器日常维护、监控告警处理、故障排查”,看完不知道这人到底干得怎么样。

我总结了一个简单的改写公式,五要素齐全,一句话就能立住:

动作 + 对象 + 基线 + 结果 + 时间窗

举个例子。原句是“负责公司监控体系建设”。按公式改:

主导监控体系重构,将核心服务告警条数从日均 800 条收敛到 60 条,误报率由 70% 降至 15%,P1 故障平均发现时间从 12 分钟缩短到 2 分钟,历时 4 个月。

差别在哪?原句说的是“我参与过”,改后说的是“我让什么指标从多少变到了多少”。前者是苦劳,后者是功劳。而且这几个数字都不是编的,全是能从监控系统里导出来的真实数据。

关键是基线。很多人卡在“我记不清改造前是多少”。解决办法是现在就去翻:监控平台的历史数据、工单系统的统计、发布记录的时间戳、故障复盘文档。这些东西一般都还留着,花两个晚上能捞出来一大半。

4.2 简历条目的改写示范

我把常见的几条运维简历条目做了改写对照,可以直接参考这个思路。

原始写法改写后改写要点
负责服务器日常维护维护 300+ 台混合云主机,通过配置管理工具将基线配置漂移率从 23% 降至 2%,季度安全扫描高危项清零规模 + 手段 + 指标
负责发布上线重构发布流程,将单服务发布耗时从 35 分钟降至 6 分钟,支持一键回滚,年度发布 1200+ 次,发布相关故障下降 60%前后对比 + 频次 + 结果
处理线上告警建立告警分级与抑制规则,日均告警量下降 92%,值班人员夜间被打断次数从每周 14 次降至 2 次机制 + 双指标
参与容器化改造主导 40 个服务容器化迁移,资源利用率从 18% 提升至 47%,年度基础设施成本下降约三成范围 + 效率 + 成本
编写运维文档沉淀 60+ 篇故障处理手册,新人独立值班周期从 3 个月缩短至 3 周数量 + 对人效的影响

改写的核心不是把话说漂亮,是把不可验证的表述换成可验证的数字。面试官看到数字一定会追问,所以每一个数字你都得能说清楚是怎么算的、口径是什么、有没有水分。这一点后面第 6 节会专门讲。

4.3 面试高频问题答题框架

运维转岗的面试有个特点:技术问题不会特别刁钻,但追问会非常深。因为面试官要判断你是“真做过”还是“看过文档”。我整理了几个必问问题和对应的答题结构。

问题答题结构常见失分点
讲一次你主导的故障排查现象→影响面→假设→验证→根因→修复→长期改进只讲过程不讲根因,或根因停留在“重启好了”
你怎么设计一套监控业务目标→SLI 选取→指标采集→告警分级→抑制与收敛→复盘迭代上来就报工具名,说不出为什么选这个指标
你如何做容量规划当前水位→增长趋势→峰值模型→冗余系数→扩容触发条件只会说“看监控加机器”,没有量化模型
自动化你做过什么痛点→方案对比→选型理由→落地过程→效果数据→踩坑只说用了什么工具,说不出为什么不用另一个
你为什么想转岗能力匹配→具体事件触发→已做的准备→目标岗位的理解抱怨原岗位,或只说“想学新技术”

第三条我多说两句。容量规划是区分“操作型”和“判断型”运维的分水岭。一个合格的回答大概是这样的:先看过去 90 天的 CPU 和内存水位曲线,找出日峰值和周期峰值;再按业务给出的增长预期做外推,比如月增 15%;然后算冗余系数,核心服务按峰值 1.5 倍预留,非核心按 1.2 倍;最后定触发条件,水位连续 3 天超过 60% 就启动扩容评审。这一套讲下来,面试官基本能判断你有系统思维。

4.4 没有大项目怎么办:把小事做出工程味道

很多人卡在这里:我在小公司,没做过百万级并发的系统,没搞过多活架构,简历拿不出手。

我的看法是:项目的“大小”不是关键,“深度”才是。你维护十台机器,和人家维护一万台,方法论是相通的,只要你能把一个具体问题挖到底,就能讲出深度。

举个真实的思路。你发现每次新服务上线,都要手工做二十几步操作,容易漏。这个事小到不值一提,但如果你这么做:

  1. 把二十几步操作全部写下来,标出哪些是必需的、哪些是历史遗留的;
  2. 把必需步骤写成脚本,加上参数校验和失败回滚;
  3. 把脚本封装成模板,其他人改几个参数就能用;
  4. 统计使用次数,记录每次上线耗时和出错率的变化;
  5. 写成文档,讲清楚设计取舍,比如为什么用脚本不用现成平台。

做完这五步,这就是一个有完整闭环的工程项目,可以写进简历、可以在面试里讲十五分钟。它解决的问题不大,但它体现了你的思维方式:发现问题 → 抽象建模 → 工具化 → 度量效果 → 沉淀文档。这套东西,比“参与过亿级流量系统”更能说明你是个工程师。

5. 日常干活时顺手攒资产:三个可落地的工程化动作

5.1 巡检脚本的三级演进

巡检是运维最日常的活儿,也是最好的练手素材。我把它的演进分成三级,你可以对照自己在哪一级。

第一级:命令堆叠。一堆df -h、free -m、ps aux拼在一起,输出一大坨文本,靠人眼看。

#!/usr/bin/env bash # 第一版:能跑,但只能人看 echo "===== 磁盘 =====" df -h echo "===== 内存 =====" free -m echo "===== 负载 =====" uptime

这个版本的问题很明显:输出没有结构,无法判断异常,无法自动告警。但它有价值——它把“要检查哪些项”这件事显性化了。很多人连这一步都没做,全靠脑子记。

第二级:结构化 + 阈值判断。加退出码、加阈值、加机器可读的输出格式。

#!/usr/bin/env python3 """第二版:结构化输出 + 阈值判断,可被调度系统直接消费""" import json import shutil import subprocess THRESHOLDS = { "disk_used_pct": 85, "mem_used_pct": 90, "load_per_core": 1.5, } def check_disk(): total, used, _ = shutil.disk_usage("/") pct = used / total * 100 return {"name": "disk_used_pct", "value": round(pct, 2), "ok": pct < THRESHOLDS["disk_used_pct"]} def check_mem(): with open("/proc/meminfo") as f: info = {line.split(":")[0]: int(line.split()[1]) for line in f if ":" in line} total = info["MemTotal"] available = info["MemAvailable"] pct = (total - available) / total * 100 return {"name": "mem_used_pct", "value": round(pct, 2), "ok": pct < THRESHOLDS["mem_used_pct"]} def check_load(): cores = subprocess.check_output(["nproc"], text=True).strip() load1 = float(open("/proc/loadavg").read().split()[0]) ratio = load1 / int(cores) return {"name": "load_per_core", "value": round(ratio, 2), "ok": ratio < THRESHOLDS["load_per_core"]} if __name__ == "__main__": results = [check_disk(), check_mem(), check_load()] abnormal = [r for r in results if not r["ok"]] print(json.dumps({"items": results, "abnormal": abnormal}, ensure_ascii=False)) raise SystemExit(1 if abnormal else 0)

这一版的关键变化有三个:阈值集中配置(改一个地方就够)、输出机器可读(能被调度系统或监控采集)、用退出码表达结果(0 正常,1 异常)。这三件事看起来很小,但它们是“脚本”和“工具”的分界线。

第三级:平台化。把采集和执行分离,采集端只负责上报,判断逻辑放到服务端,支持动态调整阈值、支持多机器汇总、支持历史趋势。

走到第三级,你就已经不在做“巡检脚本”了,你在做一个小型的采集与告警系统。这时候简历上可以写的东西就变成了:“设计并实现轻量级巡检采集框架,覆盖 300+ 主机,支持动态阈值与多维度聚合,替代原有的人工巡检流程,异常发现时间从小时级降至分钟级。”

同一件事,三种写法,含金量差了好几倍。差别不在事情本身,在于你做到哪一步。

5.2 告警治理:从日均上千条到百条以内

告警治理是运维最容易出成绩、也最容易被忽视的一块。因为它不产生新功能,只是让噪音变少,而噪音变少在很多人眼里等于“什么都没做”。

我做过一次比较完整的治理,思路可以复用。整个过程分四步。

第一步,先量化现状。把过去 30 天的告警全部拉出来,按服务、按规则、按时间段做统计。重点看三个数字:总量、Top 10 规则占比、夜间(0 点到 7 点)占比。我当时统计的结果是:日均 860 条,Top 10 规则贡献了 71%,夜间占 34%。这三个数字一出来,问题就很清楚了——少数几条烂规则制造了大部分噪音。

第二步,给每条规则打标签。四个维度:是否可行动(收到后有没有明确处置动作)、是否准确(触发后是否真的有问题)、是否紧急(能不能等到第二天)、是否有归属人。任何一条规则,只要“不可行动”或“不准确”,直接下线或改造。

第三步,做收敛和抑制。这块有几个常用手段,我按效果从大到小排:

  • 聚合:同一服务、同一类问题在 5 分钟内合并成一条,避免刷屏。
  • 抑制:上游故障时,抑制下游的衍生告警。比如数据库挂了,所有依赖它的服务都会报错,这时候只保留数据库那一条。
  • 分级:P1 打电话,P2 发消息,P3 进日报。分级标准要写进文档,不能靠感觉。
  • 延迟触发:瞬时抖动不告警,持续 3 个采集周期才触发。这一条能干掉大量毛刺。

配置示例大概长这样,注意抑制规则是治理噪音最有效的手段:

groups: - name: service-availability rules: - alert: HighErrorRate expr: sum(rate(http_requests_total{code=~"5.."}[5m])) by (service) / sum(rate(http_requests_total[5m])) by (service) > 0.05 for: 3m labels: severity: P1 annotations: summary: "服务 {{ $labels.service }} 错误率超过 5%" - alert: SlowResponse expr: histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service)) > 2 for: 5m labels: severity: P2 inhibit_rules: # 数据库不可用时,抑制上层服务的衍生告警 - source_matchers: ['alertname="DatabaseDown"'] target_matchers: ['severity=~"P1|P2"'] equal: ['cluster']

第四步,建立复盘机制。每周看一次告警复盘:哪些告警处理了但没解决根本问题、哪些规则一个月没触发过、哪些新问题没有对应告警。这个动作坚持三个月,规则库就会变得干净。

治理完之后我这边的结果是:日均告警从 860 条降到 74 条,夜间打断次数从每周 14 次降到 2 次,P1 故障的平均发现时间反而缩短了,因为噪音少了,人对告警的敏感度回来了。

提示:告警治理最容易犯的错是“一次性大刀阔斧下线规则”。别这么干。下线前先静默观察两周,确认这段时间内该类问题确实没有发生过、或者有别的告警能覆盖,再正式删。我踩过一次,删掉一条“看起来没用”的规则,结果那正是唯一能发现某个慢故障的信号。

5.3 值班手册与故障复盘模板

这两样东西看着不起眼,但对个人成长的价值极高,因为它们把你的经验变成了组织资产,而组织资产是会被记住的。

值班手册的核心不是“写得多全”,是“新人拿着它能独立处理 80% 的常见问题”。我的写法是倒着来:先列出过去半年所有在夜间发生过的告警,按出现频率排序,前 20 个每个写一段处置流程。每段包含四部分:怎么判断是不是真问题、第一步查什么、常见原因有哪些、什么情况下必须升级。写完之后找个人按手册实操一遍,卡住的地方就是需要补的地方。

故障复盘模板我更看重结构,不看重文采。固定五块内容:

  1. 时间线:精确到分钟,从第一个信号出现到完全恢复,每一分钟发生了什么。
  2. 影响面:影响了多少用户、多少订单、多长时间,用数字说话。
  3. 根因:用连续追问的方式往下挖,至少挖三层。第一层通常是“某个服务挂了”,第三层才是“因为某个配置项的默认值和预期不符,而变更流程里没有校验这一项”。
  4. 处置评价:哪些做对了、哪些慢了、慢在哪。
  5. 改进项:每条必须有负责人和截止时间,否则就是空话。

我个人的体会是,复盘的真正价值不在于搞清楚这一次为什么坏,而在于把“这次靠人救回来”变成“下次机器能发现”。每一次复盘至少应该产出一条新的监控规则或者一个自动化检查项,否则这次故障就白坏了。

6. 踩过的坑与常见问题速查

6.1 转型期的六个典型误区

误区一:把“学新技术”当成转型。学了一堆新工具的名字,简历上列了二十个关键词,但每个都只在教程里跑过。面试官问深一层就露馅。转型的本质是解决问题的能力升级,不是工具清单加长。

误区二:裸辞备考。我见过不止一个人这么干,想着脱产三个月把技术补上来。实际结果是前一个月效率极高,第二个月开始焦虑,第三个月只想赶紧找个工作,最后接受了一个并不比原来好的机会。在职准备虽然慢,但心态稳,而且你有真实场景练手。

误区三:只补技术不补表达。面试里技术过关但讲不清楚的人太多了。你做的项目再牛,讲不出背景、方案对比、取舍理由、效果数据,对方就没法判断你的水平。这个能力可以练,方法就是反复给别人讲,讲到对方能复述出来为止。

误区四:盲目追求“大厂背书”。有些人在小团队做得挺好,非要挤进大平台,结果进去之后发现自己只是庞大流水线上的一个螺丝钉,接触面反而变窄了。判断标准不是公司大小,是这个岗位能不能让你接触到完整的系统。

误区五:忽视业务理解。纯技术视角的运维很容易被替代,因为工具和方案是通用的,谁都能学。但如果你知道这套系统支撑的是什么业务、哪些指标影响收入、哪个环节最脆弱,你就有了不可替代性。

误区六:把跳槽当解药。如果问题出在“我不擅长把重复工作工具化”,换个环境一样会遇到。环境的变量改变不了能力的常量。

6.2 面试官追问“你为什么想离开运维”怎么答

这个问题几乎必问,而且答得不好会直接减分。我总结了几种答法和效果。

减分答法:“原来公司太乱了,天天背锅”“领导不懂技术”“运维没前途”。这类回答的问题不在于真假,而在于它传递的信息是“你在抱怨环境”,面试官会担心你来了以后也这样抱怨。

中性答法:“想接触更大的系统”“想学新技术”。不算错,但太泛,任何人都能这么说,没有信息量。

加分答法:先讲能力匹配,再讲具体触发事件,最后讲已做的准备。比如:“我过去几年主要在做稳定性和自动化,慢慢发现自己更喜欢的是把重复问题变成工具这个过程,而不是执行本身。去年我们做了一次告警治理,把日均八百条降到七十条,那件事让我确认了方向。所以这一年我在补工程能力,自己写了一个采集框架,也做了一些开源项目的小贡献。贵司这个岗位做的是平台方向,跟我想走的路是一致的。”

这个答法的关键点在于:你不是在逃离什么,你是在走向什么,而且你已经走了几步,不是空想。

再补一句实话:如果你的真实原因就是“钱少事多”,那也得包装成能力与岗位的匹配问题。这不是虚伪,是职业表达的基本礼貌。

6.3 常见问题速查表

现象大概率原因排查动作
简历投出去没回音条目全是职责描述,无可量化结果用“动作+对象+基线+结果+时间窗”重写前三条
面试技术问题答得上,但没下文追问深度不够,暴露只有使用经验每个用过的技术准备三层原理追问
转型准备半年没进展没有明确目标和deadline定一个可交付的小项目,两个月内上线
想转但不知道转哪自我评估缺失用第 2 节的自检表打分,找最低分的两项补
学了新技术用不上缺少真实场景在自己环境里复刻一个生产级小系统
值班疲于奔命告警规则无人治理按第 5.2 节四步走,先量化再动手
故障复盘流于形式改进项没有负责人和时间每条改进项强制绑定人和日期,每周过一遍
感觉成长停滞日常全是执行层工作每周留半天做一件“明年还能用”的事

最后说个我自己的做法。每年年底我会做一次“资产盘点”:把这一年做过的所有事列出来,逐条问自己——这件事明年还在产生价值吗?如果答案是“不在了”,说明那一年基本是在消耗;如果有一半以上还在产生价值,那这一年就没白过。这个方法帮我做过两次重要的选择,也帮我避开了几次“看起来在进步、实际上在原地”的假象。

跑路不是目的,把手上的活儿做成能带走的东西才是。真到了那一天,你会发现走不走已经不由别人决定了。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进