Python运维自动化:批量监控集群服务器,一分钟排查多台故障机器
做运维或者后端开发的朋友应该都深有体会,服务器集群机器多了之后,日常巡检真的特别折磨人。如果是十几台、几十台服务器,每次排查 CPU、内存、在线状态、磁盘使用率,一台一台登录查看,耗时又费力,遇到半夜告警、突发故障,排查效率极低,很容易错过最佳处理时间。
我之前公司线下运维,一直采用人工巡检的方式,不仅效率低下,还经常出现漏检、误检的情况。后面我用 Python 写了一套轻量化集群监控脚本,不需要部署复杂的 Prometheus、Grafana 监控体系,不用装各种依赖服务,只需一个脚本,一分钟批量检测所有集群机器,自动判断主机存活、资源负载、异常告警,极大解放了双手。
今天就把这套可直接落地的 Python 运维自动化监控方案分享出来,代码简洁、无冗余,支持批量检测、异常标记、结果汇总,个人服务器、企业集群都能直接使用。

一、传统人工运维的痛点
传统运维方式基本靠手动 SSH 登录机器,输入 top、df、free 等命令查看状态。机器少还好,一旦集群规模上来,弊端非常明显:人工巡检耗时久、容易出错、无法实时监控、故障发现滞后。
很多中小型团队没有专职运维,也不想搭建重型监控平台,这时候用 Python 做轻量化自动化监控,就是性价比最高的方案。简单、稳定、零成本、开箱即用。
二、技术选型与环境准备
本次脚本采用 paramiko 实现远程 SSH 批量执行命令,无需在被控机器安装任何客户端,主控机直接远程采集所有机器状态。整体依赖极少,兼容性非常好。
安装依赖:
pip install paramiko
三、完整集群批量监控实战代码
下面是我线上长期在用的精简版监控脚本,功能包含:主机连通性检测、CPU使用率采集、内存使用率采集、磁盘占用检测、异常机器自动标记。支持多台机器批量扫描,跑完直接输出可视化结果。
import paramiko import time # 集群服务器列表(自行替换IP、账号密码) server_list = [ {"host": "192.168.1.10", "user": "root", "pwd": "123456"}, {"host": "192.168.1.11", "user": "root", "pwd": "123456"}, {"host": "192.168.1.12", "user": "root", "pwd": "123456"}, ] # 远程执行命令工具 def exec_command(ssh, cmd): stdin, stdout, stderr = ssh.exec_command(cmd) return stdout.read().decode().strip() # 单台服务器状态检测 def monitor_server(server): ssh = paramiko.SSHClient() # 自动信任未知主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # 连接服务器 ssh.connect( hostname=server["host"], username=server["user"], password=server["pwd"], timeout=5 ) # 获取CPU使用率 cpu_cmd = "top -bn1 | grep Cpu | awk '{print 100-$8}'" cpu_usage = exec_command(ssh, cpu_cmd) # 获取内存使用率 mem_cmd = "free | awk '/Mem/{printf(\"%.2f\", $3/$2*100)}'" mem_usage = exec_command(ssh, mem_cmd) # 获取磁盘使用率 disk_cmd = "df -h / | awk 'NR==2{print $5}'" disk_usage = exec_command(ssh, disk_cmd).replace("%","") ssh.close() # 异常判断阈值 status = "正常" if float(cpu_usage) > 80 or float(mem_usage) > 85 or int(disk_usage) > 90: status = "【异常负载过高】" return { "host": server["host"], "cpu_usage": cpu_usage, "mem_usage": mem_usage, "disk_usage": disk_usage, "status": status } except Exception as e: return { "host": server["host"], "status": "【连接失败/机器宕机】" } # 批量监控所有集群机器 if __name__ == "__main__": print("====== 集群服务器批量监控开始 ======\n") start_time = time.time() for server in server_list: res = monitor_server(server) print(f"机器IP:{res['host']}") print(f"运行状态:{res['status']}") if "异常" not in res["status"] and "失败" not in res["status"]: print(f"CPU使用率:{res['cpu_usage']}%") print(f"内存使用率:{res['mem_usage']}%") print(f"磁盘使用率:{res['disk_usage']}%") print("-" * 50) print(f"\n监控完成,总耗时:{round(time.time()-start_time,2)}s")
四、脚本功能与运行效果讲解
脚本逻辑非常通俗易懂,首先配置集群所有服务器的 IP、账号、密码,程序会自动遍历每一台机器,远程执行系统命令,采集核心资源指标。
我设置了通用告警阈值:CPU超过80%、内存超过85%、磁盘占用超过90%,自动标记为负载异常;如果服务器关机、端口不通、密码错误,会直接标记为连接失败/机器宕机。
原本需要十几分钟的人工巡检,现在几秒钟就能跑完十几台机器,所有故障机器一目了然,不用逐台登录排查,极大提升运维效率。
五、生产环境优化与安全改造
很多同学直接使用会担心账号密码明文泄露,这里给大家分享生产落地的优化方案。首先可以改为 SSH 密钥登录,彻底抛弃明文密码,安全性拉满。其次可以增加定时任务,配合 crontab 实现每分钟自动巡检,持续监控集群状态。
进阶优化还可以接入钉钉、企业微信机器人,检测到异常机器自动推送告警消息,实现无人值守监控;同时可以将监控数据写入日志或 SQLite,实现简单的数据留存与趋势查看。
六、适用场景总结
这套自动化监控脚本非常适合中小型企业、个人开发者、小团队使用。不想部署笨重的监控系统、机器数量不多、追求轻量化运维方案的场景,用它完全够用。
相比于专业监控平台,它部署零成本、无需维护、开箱即用,相比于人工巡检,效率提升几十倍,彻底解决日常运维重复、枯燥、低效的问题。
七、写在最后
运维自动化的核心就是用代码替代重复人工操作。Python 在运维场景的优势真的无可替代,短短几十行代码,就能解决集群巡检、故障排查的核心痛点,实现一分钟批量排查整集群故障机器。
如果你的日常工作还在手动一台一台查服务器状态,非常建议把这套脚本部署到自己的运维环境中,极大减少无效工作量,让运维工作更轻松、更高效。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)