> 技术文档 > Python 实现服务器自动故障处理工具:从监控到自愈的完整方案

Python 实现服务器自动故障处理工具:从监控到自愈的完整方案


在服务器运维过程中,80% 的故障都是重复性的简单问题(如磁盘空间不足、内存泄漏、服务进程挂掉等)。本文将介绍如何使用 Python 开发一款轻量级自动故障处理工具,通过状态监控、异常诊断、自动修复三个核心模块,实现服务器常见故障的无人值守处理。

核心依赖库

  • psutil:跨平台系统监控库,用于获取磁盘、内存、进程等硬件及运行时信息,替代传统的 shell 命令调用方式
  • requests:HTTP 客户端库,用于故障处理结果的消息推送(支持企业微信、钉钉、邮件等多渠道)
  • subprocess:Python 内置模块,用于执行系统命令(如日志清理、服务重启等修复操作)

安装命令:

pip install psutil requests

工作流程图

┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐

│ 状态采集 │───>│ 异常检测 │───>│ 自动修复 │───>│ 结果通知 │

└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘

│ │ │ │

└─────────────────┴─────────────────┴─────────────────┘

循环执行(默认60秒/次)

工具采用轮询机制,默认每 60 秒执行一次检测流程:

  1. 状态采集模块通过 psutil 获取系统关键指标
  1. 异常检测模块将采集数据与预设阈值对比,判断是否存在故障
  1. 自动修复模块针对不同故障类型执行预设修复命令
  1. 结果通知模块将处理过程及结果通过 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,