运维的一天:从监控告警到凌晨下班
运维的一天是什么样的?
如果有人问我,我会说:"就像在ICU当护士,但病人是服务器。"
早上9点:到达战场
到公司的第一件事,不是开电脑,而是看监控。
打开大屏,CPU、内存、磁盘、网络,一切正常。
松了一口气,打开电脑,开始例行检查。
- 检查昨晚的备份日志
- 检查磁盘空间
- 检查数据库主从同步
- 检查各个服务的状态
一切正常,喝了一口咖啡,想着:今天应该能正常下班了吧?
上午10点:开发来了
"我的服务起不来,帮我看看。"
打开日志,报错信息很清楚:端口被占用。
"你的服务之前没关,再启动一次当然起不来。"
开发:"哦,那怎么关?"
我:"ps aux | grep 服务名,找到PID,kill掉。"
开发:"好的,谢谢。"
五分钟后,开发又来了。
"还是起不来。"
我:"你重启了吗?"
开发:" restarted命令找不到。"
我:"systemctl restart 服务名。"
开发:"哦,谢谢。"
又过了五分钟,开发又来了。
"还是起不来。"
我打开日志,这次不一样了:配置文件错误。
"你改配置文件了?"
开发:"改了一点点,就是加了个参数。"
我:"哪一行?"
开发:"好像是在第三行..."
打开配置文件,第三行不是配置,是一句注释。
我:"你这改的不是配置,是注释。"
开发:"我加个参数怎么是注释了?"
我:"你在注释后面加参数,当然没人认识。"
开发:"那应该加在哪里?"
我:"取消注释,把参数加到配置里。"
开发:"哦,谢谢。"
又过了五分钟,开发终于不来了。
上午11点:产品经理来了
"网站有点慢,帮我看看。"
打开监控,访问量比昨天翻了三倍。
"用户访问高峰,当然慢。"
产品:"能优化一下吗?"
我:"可以,加几台服务器,做负载均衡。"
产品:"要多久?"
我:"三天。"
产品:"太慢了,今天能好吗?"
我:"加服务器需要采购、安装、配置,一天都不够。"
产品:"那能不能做点什么?"
我:"可以,清理一下缓存,能快一点。"
产品:"好,现在就清理。"
清理了缓存,网站确实快了一些。
产品:"还是有点慢,能不能再快一点?"
我:"可以,换更好的服务器。"
产品:"要多少钱?"
我:"每台服务器每月5000,需要10台。"
产品:"太贵了,有没有便宜的办法?"
我:"有,让用户少来访问。"
产品:"……"
中午12点:吃饭时间
和开发一起吃饭。
开发:"你们运维整天干嘛?不就是重启服务器吗?"
我:"……"
开发:"我听说你们上班就是喝茶看监控。"
我:"……"
开发:"我也想当运维,轻松。"
我:"好啊,我今晚有个故障,你来处理?"
开发:"啊?晚上还要工作?"
我:"凌晨3点,监控告警,你来修?"
开发:"……"
开发:"那我还是写代码吧。"
下午1点:数据库告警
吃饭的时候,手机响了。
监控告警:数据库连接数超过阈值。
放下饭盒,打开电脑。
连接数1000,最大连接数也是1000,满了。
查了一下,有很多慢查询,还有一些查询没有关闭连接。
找到开发:"你们代码里有查询没关闭连接?"
开发:"没有啊,我们都close了。"
我:"那怎么会有这么多连接?"
开发:"可能是缓存吧,过一会儿就释放了。"
我:"等了半小时了,还在增长。"
开发:"真的close了。"
我打开代码,找到了问题:有一个循环查询,每次都创建新连接,但只有部分close了。
开发:"这个循环我改过的,怎么还有问题?"
我:"你只close了成功的情况,异常的没close。"
开发:"……"
修复了代码,部署到测试环境,没问题,部署到生产环境。
连接数开始下降了。
下午2点:磁盘告警
手机又响了。
监控告警:磁盘空间不足。
SSH连接服务器,df -h,根分区90%满了。
找到占用最大的目录,是日志目录。
查了一下,有几个服务的日志写疯了,一天写了几十GB。
找到开发:"你们的日志能不能少写点?"
开发:"日志很重要,不能删。"
我:"那要不要加日志轮转?"
开发:"可以,怎么加?"
我:"用logrotate,每天轮转,保留7天。"
开发:"好。"
配置了logrotate,清理了旧日志,磁盘空间降下来了。
下午3点:网络告警
手机又响了。
监控告警:网络延迟高。
检查网络,发现有一个服务占用了大量带宽。
查了一下,是一个同步任务,把数据从A服务器同步到B服务器。
找到开发:"这个同步任务为什么这么占带宽?"
开发:"因为数据量大啊。"
我:"能不能限速?"
开发:"可以,怎么限?"
我:"用rsync的--bwlimit参数,或者用tc。"
开发:"rsync怎么限速?"
我:"rsync --bwlimit=10000,每秒限制10MB。"
开发:"好。"
配置了限速,网络延迟降下来了。
下午4点:准备下班?
看看时间,快5点了。
今天的故障都修完了,应该能正常下班了吧?
打开微信,群里有人@我。
"晚上有个发布,运维来一下。"
我:"几点?"
"晚上7点。"
我:"好的。"
晚上7点:发布开始
到公司,产品和开发都在。
产品:"今天要上线一个新功能。"
开发:"代码已经准备好了。"
我:"准备好了就部署吧。"
部署到测试环境,测试通过。
部署到预发布环境,测试通过。
"可以部署到生产环境了。"
开始部署,进度条99%... 突然停住了。
等待... 等待...
五分钟后,超时。
"部署失败了。"
开发:"怎么会失败?测试环境没问题啊。"
我:"生产环境和测试环境不一样。"
检查日志,发现数据库连接超时。
"生产环境数据库压力大,连接超时了。"
开发:"那怎么办?"
我:"加长超时时间,或者增加连接池大小。"
修改配置,重新部署,这次成功了。
晚上9点:故障报告
功能上线了,大家都走了。
我还得写故障报告。
记录时间、问题、原因、解决方案、预防措施。
写完故障报告,快10点了。
晚上11点:回家
收拾东西,回家。
路上想着:今天应该没故障了吧?
凌晨2点:手机响了
刚睡着,手机响了。
监控告警:服务器负载高。
睁眼,看手机,告警级别P1。
起身,打开电脑。
SSH连接服务器,负载50,CPU 100%。
查进程,发现一个Python进程占用了100% CPU。
"这是啥?"
查了一下,是一个定时任务,跑了一个脚本。
看了一下脚本,是一个数据分析任务。
"这任务怎么会占这么多CPU?"
看了一下日志,发现任务跑了一个小时还没跑完。
"正常情况下不应该这么久啊。"
查了一下数据量,发现今天的数据量比平时多了10倍。
"怪不得跑这么久。"
找到开发:"今天的数据量怎么这么多?"
开发:"哦,今天搞了个活动,数据量大。"
我:"这个任务没考虑到数据量增长?"
开发:"没有想到会有这么多。"
我:"能不能优化一下?"
开发:"可以,但得明天。"
我:"那今天怎么办?"
开发:"就让它跑吧,跑完就好了。"
我:"但现在负载太高,影响其他服务了。"
开发:"那怎么办?"
我:"停掉这个任务。"
开发:"停了会有影响吗?"
我:"数据分析晚一点做,影响不大。"
停掉了任务,负载降下来了。
凌晨3点:继续睡觉
关闭电脑,继续睡觉。
躺在床上,想着:
"明天又是新的一天,希望别有故障。"
最后
运维的一天,就是和各种问题打交道。
早上的例行检查,上午的开发求助,下午的监控告警,晚上的发布,凌晨的故障。
一天24小时,随时随地待命。
为什么还干?
也许是因为,当你把问题解决后,那种平静的满足感。
也许是因为,当所有人都在等你的时候,那种被需要的感觉。
也许是因为,当你看着监控从红色变回绿色,那种成就感。
也许是因为,当你发现某个潜在问题并提前预防了,那种安心。
运维不是最酷的职业,但可能是——
最被需要的职业。
毕竟,没有运维,服务器挂了谁修?
Mr丶点心
2026-03-14





