运维的一天:从监控告警到凌晨下班

运维的一天是什么样的?

如果有人问我,我会说:"就像在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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注