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%,而且每晚都在缓涨。你看到趋势,就能判断是不是内存泄漏。监控管不了趋势,巡检恰恰擅长这个。

注意:不要用巡检替代监控。两者是互补的。监控报警让你即时响应,巡检报告帮你做趋势分析和预防。我见过有团队只做巡检不做监控,结果半夜还是被喊起来——因为巡检脚本不是实时报警的。

定时巡检的核心流程

搞清楚概念后,我们来拆一下整个巡检的骨架。我习惯把它画成一个流程图,每次做新项目都执行这个步骤:

定时巡检核心流程 定时巡检核心流程 1. 定义巡检项 2. 编写/配置脚本 3. 设置调度(cron等) 4. 定时执行巡检 5. 结果处理:告警 / 记录 / 自愈 6. 复盘与优化 流程说明 • 先明确查什么 • 脚本优先用 Shell / Python • cron 或 systemd timer • 输出结构化结果 • 异常告警+趋势报告 • 定期迭代脚本

这套流程我用了差不多十年,从最早的手工执行,到后来自动化调度,再到现在的智能自愈。每一步都踩过坑,后面章节我会具体展开。

本章小结

说了这么多,其实核心就三句话:

  1. 定时巡检是运维的“体检”,没它你就在裸奔。
  2. 它能帮你省钱、省人、省时间,还能过审计。
  3. 流程很简单:定项 → 写脚本 → 调度 → 处理 → 优化。