Python 实现服务器自动故障处理工具:从监控到自愈的完整方案
在服务器运维过程中,80% 的故障都是重复性的简单问题(如磁盘空间不足、内存泄漏、服务进程挂掉等)。本文将介绍如何使用 Python 开发一款轻量级自动故障处理工具,通过状态监控、异常诊断、自动修复三个核心模块,实现服务器常见故障的无人值守处理。
核心依赖库
- psutil:跨平台系统监控库,用于获取磁盘、内存、进程等硬件及运行时信息,替代传统的 shell 命令调用方式
- requests:HTTP 客户端库,用于故障处理结果的消息推送(支持企业微信、钉钉、邮件等多渠道)
- subprocess:Python 内置模块,用于执行系统命令(如日志清理、服务重启等修复操作)
安装命令:
pip install psutil requests
工作流程图
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 状态采集 │───>│ 异常检测 │───>│ 自动修复 │───>│ 结果通知 │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│ │ │ │
└─────────────────┴─────────────────┴─────────────────┘
循环执行(默认60秒/次)
工具采用轮询机制,默认每 60 秒执行一次检测流程:
- 状态采集模块通过 psutil 获取系统关键指标
- 异常检测模块将采集数据与预设阈值对比,判断是否存在故障
- 自动修复模块针对不同故障类型执行预设修复命令
- 结果通知模块将处理过程及结果通过 Webhook 推送至指定渠道
核心模块实现
1. 配置参数模块
将可配置项集中管理,便于根据不同服务器环境调整:
class Config:
# 监控阈值配置
DISK_THRESHOLD = 10 # 磁盘可用空间低于此值(%)触发清理
MEM_THRESHOLD = 90 # 内存使用率高于此值(%)触发减负
CHECK_INTERVAL = 60 # 检测间隔时间(秒)
# 需监控的服务列表
MONITORED_SERVICES = ["nginx", "docker", "prometheus"]
# 安全进程列表(禁止杀死)
SAFE_PROCESSES = ["systemd", "kubelet", "sshd", "python3"]
# 日志清理配置
LOG_PATHS = ["/var/log", "/var/lib/docker/containers"] # 日志路径
LOG_RETENTION_DAYS = 7 # 日志保留天数
# 通知配置
WECHAT_WEBHOOK = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx"
2. 状态采集模块
封装 psutil 库的调用,获取磁盘、内存、服务状态等关键信息:
import psutil
import subprocess
class ServerMonitor:
@staticmethod
def get_disk_usage(path="/"):
"""获取指定路径的磁盘使用率"""
disk = psutil.disk_usage(path)
return {
"total": disk.total / 1024 / 1024 / 1024, # GB
"used": disk.used / 1024 / 1024 / 1024,
"free": disk.free / 1024 / 1024 / 1024,