3. 常见巡检场景与需求分析
脚本巡检说白了就是干活。但干的是什么活?
我刚开始做运维那会儿,觉得巡检就是跑几个命令,看看CPU、内存就完事了。后来被现实狠狠教育了几次——有一次线上服务挂了,检查日志才发现磁盘早就写满了,而我每天跑的"巡检"根本没检查磁盘分区。嗯,从那以后我彻底明白了:没有需求分析的巡检脚本,就是在裸奔。
所以这一章,我们来聊聊常见的巡检场景,以及怎么从场景中提炼出真正的需求。你想想看,场景不同,需求完全不同——
- 机房巡检:关注硬件健康、电源、温湿度
- 服务器巡检:关注系统资源、进程状态、日志错误
- 业务巡检:关注接口响应、数据一致性、用户访问
这三者混在一起写脚本,那注定是两头不讨好。
3.1 巡检场景的分类
我个人习惯把巡检场景分成三大类。每一类关注的东西、采集方式、输出要求都不一样。
| 场景类型 | 子场景 | 典型设备/对象 | 关注指标 | 采集方法 |
|---|---|---|---|---|
| 基础设施巡检 | 硬件、网络、电源、机房环境 | 服务器、交换机、UPS、空调 | 温度、湿度、电压、风扇转速、链路状态 | SNMP、IPMI、SSH、传感器API |
| 系统资源巡检 | 操作系统、中间件、数据库 | Linux/Windows主机、Nginx、MySQL、Redis | CPU、内存、磁盘、进程数、连接数、慢查询 | 系统命令、agent、日志解析 |
| 业务应用巡检 | Web服务、API、交易链路 | 应用服务、消息队列、负载均衡 | 响应时间、状态码、错误率、TPS、队列积压 | HTTP请求、数据库查询、日志聚合 |
你看,这三大类从底层到上层,关注的东西完全不一样。我在项目中遇到过最典型的问题:团队把硬件巡检和业务巡检混写在一个脚本里,结果脚本跑了三年,硬件的PCIe错误从来没输出过——不是没发现,而是业务日志太多,硬件告警被淹没了。
3.2 如何提炼巡检需求
场景分类只是第一步。真正难的是:这个场景下到底要检查什么?说白了,就是在浩如烟海的指标里,选出那几个真正会出事的。
我一般会问自己三个问题:
- 这个东西如果出问题,能不能被快速发现?
比如CPU冲到90%,不一定有问题。但磁盘写满/var分区,分分钟让日志服务崩溃。 - 这个指标有没有明确的阈值或趋势?
有阈值就可以告警,有趋势就可以预测。我最烦那种"感觉有点高"的模糊指标。 - 这个数据能不能稳定采集到?
我遇到过用snmpwalk采集交换机端口状态,结果设备MIB库不标准,返回数据是空的。白忙活。
举个例子,假设我们要巡检MySQL数据库——你可能会写一堆检查项:
# 错误示例:大而全但没重点
CHECK: 查询QPS
CHECK: 缓存命中率
CHECK: 连接数
CHECK: 慢查询数
CHECK: 二进制日志大小
CHECK: 表碎片率
CHECK: 主从延迟
CHECK: 死锁数
CHECK: 临时表创建量
# ...一共二十多项
但实际需要重点关注的,可能只有这几项:
# 核心检查项(很多事故都在这里起源)
CHECK: 连接数是否接近 max_connections
CHECK: 慢查询是否突然增长(对比前1小时)
CHECK: 主从延迟是否超过3秒
CHECK: 关键业务表的空间剩余是否低于阈值
3.3 常见的需求痛点与解决思路
你以为提炼完需求就结束了?太天真了。我在几个项目中摸索出一套经验,把这些痛点列出来,你最好对照着看看自己的脚本有没有踩坑。
教训:别只看表面指标,想想这个指标背后真正影响什么。
常见的痛点归纳如下:
- 痛点一:指标选择过于乐观
比如只检查CPU idle,不检查load average或CPU iowait。实际上,iowait高的时候CPU idle可能还很高,但系统已经卡死了。 - 痛点二:忽略基线对比
同样的CPU使用率,白天和半夜的意义完全不同。不做趋势分析、不做历史对比,等于让脚本猜天气。 - 痛点三:采集方式不可靠
用ps aux检查进程存在性?如果进程挂了被systemd自动拉起呢?用API检查服务状态?如果API本身也挂了呢? - 痛点四:输出信息淹没在噪音中
脚本把几十个正常项和异常项混在一起打印,运维根本分不清哪个是重点。我见过一份巡检报告,500行输出只有两行是真正的告警。
为什么会出现这些问题?说白了,就是写脚本的人没有站在"使用者"的角度思考问题。你写脚本的时候,心里想的是"我要检查什么";你应该想的是"我拿到这个输出后,怎么才能一秒看出问题"。
下面这张SVG图,就是我在做需求分析时常用的框架。你可以把它当作一个"需求检查清单"——每次写新脚本前,过一遍这几层,基本不会漏项。
这张图看起来简单,但我在实际项目中一直用这套流程。打个比方,就好比你要装修房子——先想好是装厨房还是卧室(场景),再决定买什么家电(候选指标),然后挑最常用的几件(筛选),最后找人安装、拍照发朋友圈(采集和输出)。
绕开这些步骤直接写脚本,大概率会写出一个"能用但不好用"的东西。而一个"不好用"的巡检脚本,最终的下场就是被运维人员手动关闭,或者干脆没人看。
总结一下这一节的核心:巡检脚本的质量,80%由需求分析阶段决定。写代码只是最后的"翻译"工作。场景分清楚、指标精简化、采集可靠化、输出结构化,做到了这四点,你再去写具体的脚本,基本上不会跑偏。