当前位置: 首页 > news >正文

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,

http://www.lryc.cn/news/602110.html

相关文章:

  • PCS液相色谱柱:专为碱性化合物设计的高性能色谱柱
  • Python 异常 (Exception) 深度解析
  • 项目进度如何控制
  • 新手向:破解VMware迁移难题
  • 元宇宙经济与数字经济的异同:虚实交织下的经济范式对比
  • 【实时Linux实战系列】在实时应用中进行负载均衡
  • PyTorch武侠演义 第二卷:高塔中的注意力秘境 第1章:残卷指引
  • 安宝特案例丨AR+AI赋能轨道交通制造:破解人工装配难题的创新实践
  • 绳子切割 图论
  • RPC 详解
  • 图论(BFS)构造邻接表(运用队列实现搜索)
  • 持续集成CI与自动化测试
  • 鱼皮项目简易版 RPC 框架开发(三)
  • Redis反弹Shell
  • UniappDay04
  • 【跳跃游戏】
  • Vue、微信小程序、Uniapp 面试题整理最新整合版
  • Entity Framework Core (EF Core) 中Database
  • uniapp,uview icon加载太慢了,老是显示叉叉,将远程加载改到本地加载。
  • 设计模式(二十三)行为型:模板方法模式详解
  • 常用设计模式系列(十四)—模板方法模式
  • 开源智能体-JoyAgent集成ollama私有化模型
  • C#与C++交互开发系列(二十六):构建跨语言共享缓存,实现键值对读写与数据同步(实践方案)
  • 基于百度 iframe 框架与语音解析服务的数字人交互系统实现
  • 元宇宙工厂前端新形态:Three.js与WebGL实现3D产线交互的轻量化之路
  • Python系统交互库全解析
  • CentOS 7 安装 dnsmasq 解决nginx无法指定dns的问题
  • 新能源行业B端极简设计:碳中和目标下的交互轻量化实践
  • GitLab 18.2 发布几十项与 DevSecOps 有关的功能,可升级体验【三】
  • Windows 系统分辨率切换** 与 **Qt4 无边框窗口管理机制** 的交互