在服務器運維過程中,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,