今年干下来,我觉得运维这活儿就像守夜——大多数时候风平浪静,但你得瞪着眼,一旦听见异响,三分钟内摸不到问题在哪,后面就是连锁反应。下面把我这一年的几个重点事儿掰开说说,有干的还行的,也有踩坑的,不藏着。
一、日常巡检与监控整合
全年负责12套核心业务系统,外加杂七杂八的中间件、数据库、网络设备,总共不到200台服务器。每天三遍自动化脚本巡检,早上七点半、下午两点、晚上十一点,脚本跑完再人工扫一眼告警列表,挑出真正需要动手的。
今年干的最费劲的一件事,是把zabbix、prometheus和自研的日志平台做了数据关联。以前磁盘告警归磁盘,慢查询告警归慢查询,凌晨两点爬起来看两个系统来回切,脑子不清醒的时候容易漏。我写了个简单的关联规则:当磁盘io等待超过20%,且同时段慢查询数量翻倍,系统自动把两条告警合并成一条,并且直接给出“优先排查索引命中率”的提示。效果很明显——误报率降了,而且值班的兄弟不用再自己猜先看哪个。
但这套东西有个毛病:那几台华为的old接入交换机,用的私有协议,死活纳管不进来。到现在还是每天手动telnet进去看日志。我知道该换,但每次提预算,业务那边就说“又不影响跑业务,先缓缓”。我妥协了,这事儿一直拖着。明年必须硬气一回,哪怕先换一台。
二、两次典型的故障处理
第一次:慢查询引发的连锁反应
六月中旬,业务部门反映核心交易接口响应从50ms飙到3秒多。我先看了整体负载,cpu、内存都正常,但数据库连接数暴涨到平时的4倍。凭经验,十有八九是sql出了问题。
立刻抓了30秒堆栈快照,发现一条统计sql在走全表扫描——那张表2800万行。explain输出里,type=all,extra=using where,典型的索引失效。我让dba先kill掉异常会话,业务恢复了一部分,但还在波动。接着查慢查询日志,定位到前一天上线的新版本里,开发同事把where条件里的索引字段类型从varchar改成了int,数据库做了隐式转换,索引用不上。
修复方案不复杂:改回正确参数类型,加一个联合索引。从收到告警到业务完全恢复,27分钟。事后我把这条规则写进了发布检查清单:所有涉及索引字段的变更,必须带上explain输出,否则不准上线。
第二次:雨夜的光模块故障
那天下了一整天雨,凌晨两点我被值班电话叫醒——核心汇聚交换机的









