Python定时巡检脚本开发与分布式调度 - 第1节
为什么需要定时巡检
先问一个实在的问题:你的服务器有没有半夜出过事?我记得有一次,凌晨三点,监控报警说磁盘满了。我爬起来一看,日志文件把根分区撑爆了,系统直接挂了。那次之后我就养成了一个习惯——定时巡检。
定时巡检,说白了就是让脚本按计划去检查系统状态。不是等出问题了再救火,而是提前发现苗头。你想想看,一个磁盘从 80% 到 100% 可能需要一周,但你如果每天都看一眼,就能在 85% 的时候清理掉。
运维中的“隐形炸弹”
系统里有很多坑,平时不显眼,积攒到一定程度就炸。比如:
- 磁盘空间:日志、临时文件、缓存,慢慢吃掉你的空间。
- 内存泄漏:进程悄悄占着内存不释放,一周后 OOM。
- 证书过期:SSL 证书还有 30 天,你不查,那天全部提示不安全。
- 服务假死:端口还开着,但已经卡死,请求无响应。
我在项目中见过最惨的一次:一家电商公司,大促前几天所有 https 请求中断,就是因为没有人巡检证书到期日。嗯,从那以后,他们把证书巡检脚本加到了核心流程里。
核心观点:巡检是“预防性维护”,不是“事后补救”。成本比故障恢复低一个数量级。
高频场景一览
我把常见的巡检场景整理了一下,方便你快速对照:
| 巡检对象 | 检查内容 | 触发条件 |
|---|---|---|
| 服务器硬件 | CPU 温度、风扇转速、磁盘健康(SMART) | 每天一次 |
| 操作系统 | 磁盘使用率、内存占用、进程数、负载 | 每 5~10 分钟 |
| 中间件 | Tomcat / Nginx / Redis 进程存活、响应时间 | 每分钟 |
| 数据库 | 连接数、慢查询、主从延迟、表空间 | 每 1~5 分钟 |
| 安全 | SSH 登录失败次数、异常端口、文件完整性 | 每 10~30 分钟 |
| 业务 | API 接口可用性、页面打开速度、登录成功率 | 每分钟 |
| 证书 | SSL 证书有效期(距离过期天数) | 每天一次 |
我的小习惯:不要把巡检频率设得太高。比如磁盘容量这种变化慢的指标,1 分钟查一次纯属浪费资源。我通常设 5~15 分钟一次,关键业务指标才提到 1 分钟。
定时巡检能带来什么收益
直接算一笔账:
- 减少宕机时间:提前发现磁盘、内存、CPU 的异常趋势,在出问题之前扩容或清理。
- 降低抢救压力:半夜被电话吵醒的概率从每月 2~3 次降到几乎为 0。
- 节省成本:一台服务器因为磁盘写满而挂掉,恢复可能需要小时级;巡检脚本提前通知,你只需要 5 分钟处理。
- 合规要求:很多行业(金融、医疗)要求必须有自动化巡检记录,审计时需要出示日志。
我曾经给一家物流公司做过巡检方案。他们原来全靠人工——每天早晨登录服务器看下磁盘和进程。后来上了定时巡检脚本,不仅解放了运维,还发现了一个持续半年的内存泄漏。你说省了多少事?
巡检 vs 监控,到底有啥区别?
很多人会混淆这两个概念。我区分的方式很简单:
- 监控:7×24 小时实时采集数据,展示在仪表盘上,出阈值就告警。它负责“当下”。
- 巡检:定时运行一组检查逻辑,生成报告。它负责“趋势”和“周期性检查”。
举个例子:监控告诉你现在内存用了 90%,但巡检可以告诉你——过去一周内存使用率从 60% 涨到了 90%,而且每晚都在缓涨。你看到趋势,就能判断是不是内存泄漏。监控管不了趋势,巡检恰恰擅长这个。
注意:不要用巡检替代监控。两者是互补的。监控报警让你即时响应,巡检报告帮你做趋势分析和预防。我见过有团队只做巡检不做监控,结果半夜还是被喊起来——因为巡检脚本不是实时报警的。
定时巡检的核心流程
搞清楚概念后,我们来拆一下整个巡检的骨架。我习惯把它画成一个流程图,每次做新项目都执行这个步骤:
这套流程我用了差不多十年,从最早的手工执行,到后来自动化调度,再到现在的智能自愈。每一步都踩过坑,后面章节我会具体展开。
本章小结
说了这么多,其实核心就三句话:
- 定时巡检是运维的“体检”,没它你就在裸奔。
- 它能帮你省钱、省人、省时间,还能过审计。
- 流程很简单:定项 → 写脚本 → 调度 → 处理 → 优化。