当前位置:首页>python>手把手——写一个 Python 脚本自动巡检你的全网设备

手把手——写一个 Python 脚本自动巡检你的全网设备

  • 2026-10-11 06:23:38
手把手——写一个 Python 脚本自动巡检你的全网设备

一个脚本,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应用、数据库、负载均衡、运维工具、云计算、容器化、微服务、大模型等主流技术领域;

而且两个阶段(就业+架构)还分别对应不同基础、不同目标的不同学员,学员反馈都说好:

扫码添加专业指导老师,备注【运维课程】

获取完整版超详细版课程大纲↓

最新文章

随机文章