一个脚本,3 分钟,搞定你半天的工作。
如果你是一个网络运维工程师,每周五下午大概率在干一件事:
登录每一台设备,查 CPU、查日志、查接口状态,截图,填表。每次两三个小时。碰到有问题还得手动标红,再写邮件通报。
关键是这种事每周都要做一遍。重复,枯燥,还容易漏。
这篇文章给你一个能直接用的脚本,把全网巡检自动化。
我们需要什么
一个脚本,能做到:
1. 读取设备清单(IP、厂商、登录凭据)
2. 逐台登录,执行预设的巡检命令
3. 收集结果,按设备整理
4. 生成一份 Excel 报告,异常项自动标红
技术栈:Netmiko + 多线程 + openpyxl
第一步:设备清单
创建一个 Python 文件,把设备信息写进去:
devices = [ {"host": "10.1.1.1", "device_type": "cisco_ios"}, {"host": "10.1.1.2", "device_type": "huawei"}, {"host": "10.1.2.1", "device_type": "cisco_ios"}, # 把你的设备全部加进来]CREDENTIALS = { "username": "admin", "password": "your_password",}
如果设备多,也可以用 CSV 文件,但不影响核心逻辑。先跑通再说。
第二步:定义巡检命令
不同厂商命令不一样,我们用一个字典来做映射:
CHECK_COMMANDS = { "cisco_ios": [ ("show version | include Version", "软件版本"), ("show ip interface brief", "接口状态"), ("show processes cpu sorted | exclude 0.00%", "CPU占用"), ("show memory statistics", "内存使用"), ("show logging | include %", "异常日志"), ("show ip route summary", "路由表概要"), ], "huawei": [ ("display version | include VRP", "软件版本"), ("display ip interface brief", "接口状态"), ("display cpu-usage", "CPU占用"), ("display memory-usage", "内存使用"), ("display logbuffer | include Error", "异常日志"), ("display ip routing-table statistics", "路由表概要"), ],}
你可以根据自己的环境增减命令。关键是每个厂商都要有一一对应的映射。
第三步:并发巡检(核心)
一台一台串行太慢,我们用线程池并发:
from concurrent.futures import ThreadPoolExecutor, as_completedfrom netmiko import ConnectHandlerfrom datetime import datetimeMAX_WORKERS = 10 # 同时连接 10 台设备def inspect_device(dev): """巡检单台设备,返回结果字典""" result = { "设备": dev["host"], "厂商": dev["device_type"], "巡检时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "状态": "成功", } # 合并凭据 login = {**dev, **CREDENTIALS} try: with ConnectHandler(**login) as conn: commands = CHECK_COMMANDS.get(dev["device_type"], []) for cmd, name in commands: try: output = conn.send_command(cmd, read_timeout=20) result[name] = output.strip() except Exception as e: result[name] = f"[执行失败] {e}" except Exception as e: result["状态"] = "连接失败" result["错误信息"] = str(e) return result# 并发执行reports = []with ThreadPoolExecutor(max_workers=MAX_WORKERS) as pool: futures = {pool.submit(inspect_device, d): d for d in devices} for f in as_completed(futures): reports.append(f.result())print(f"巡检完成:共 {len(reports)} 台设备")
30 台设备,并发 10 线程,不到 3 分钟全部跑完。
第四步:生成 Excel 报告
拿到数据只是第一步,还得让老板看得懂。搞一个带颜色标注的 Excel:
import openpyxlfrom openpyxl.styles import Font, PatternFill, Alignmentwb = openpyxl.Workbook()ws = wb.activews.title = f"设备巡检报告_{datetime.now():%Y%m%d}"# 表头headers = ["设备", "厂商", "状态", "软件版本", "接口状态", "CPU占用", "内存使用", "异常日志", "路由表概要"]header_fill = PatternFill(start_color="1F4E79", end_color="1F4E79", fill_type="solid")header_font = Font(color="FFFFFF", bold=True, size=11)for col, h in enumerate(headers, 1): cell = ws.cell(row=1, column=col, value=h) cell.fill = header_fill cell.font = header_font cell.alignment = Alignment(horizontal="center")# 异常标记red_fill = PatternFill(start_color="FFC7CE", end_color="FFC7CE", fill_type="solid")red_font = Font(color="9C0006")# 写入数据for row, report in enumerate(reports, 2): for col, key in enumerate(headers, 1): value = report.get(key, "") ws.cell(row=row, column=col, value=value) # 包含异常关键词则标红 if isinstance(value, str) and any( kw in value.lower() for kw in ["down", "error", "fail", "失败"] ): ws.cell(row=row, column=col).fill = red_fill ws.cell(row=row, column=col).font = red_font# 调整列宽for col in ws.columns: ws.column_dimensions[col[0].column_letter].width = 22filename = f"巡检报告_{datetime.now():%Y%m%d}.xlsx"wb.save(filename)
运行效果
巡检完成:共 30 台设备
报告已生成:巡检报告_20260507.xlsx
打开 Excel,所有设备一目了然。状态正常的绿色,有异常的自动标红。发给领导,比你手动填的表格专业十倍。
进阶方向
这个脚本只是一个起点。你可以在此基础上:
• 接飞书/钉钉/企微机器人:异常设备自动推送告警消息
• 接数据库:每次巡检结果入库,做历史趋势对比(比如某台设备 CPU 越来越高了)
• 定时运行:crontab 每天 6 点跑一次,早上到公司直接看报告
· · ·
这篇文章的完整脚本,包括设备清单模板和异常检测规则,我打包好了:
https://gitee.com/mingge1991/Python文章转自网工自动化,侵删
如果你想快速入行云计算运维,不如试试马哥教育的《SRE+AI智能运维架构师课程》!课程一共20个模块,涵盖Linux系统、网络、shell、Web应用、数据库、负载均衡、运维工具、云计算、容器化、微服务、大模型等主流技术领域;
而且两个阶段(就业+架构)还分别对应不同基础、不同目标的不同学员,学员反馈都说好:
扫码添加专业指导老师,备注【运维课程】
获取完整版超详细版课程大纲↓
