当前位置:首页>python>用Python一键搞定1000台华为交换机的巡检

用Python一键搞定1000台华为交换机的巡检

  • 2026-10-11 06:30:06
用Python一键搞定1000台华为交换机的巡检

先说说背景吧。公司网络规模越来越大,交换机从几百台长到上千台。传统巡检靠人工,问题一大堆:

  • 效率低:一台台SSH登录,敲display version、display interface brief之类的命令,重复劳动能把人逼疯。
  • 容易出错:手抖输错命令,或者忘记某个端口的异常。
  • 数据不规范:收集的信息散落在各种Excel里,后期分析头疼。
  • 没法定时:突发故障时,想快速全网巡检根本来不及。

自动化后,这些问题基本解决。脚本可以24小时待命,定时跑任务,输出结构化的报告,还能对接邮件或企业微信通知。关键是,它解放了我们这些“救火队员”,能把精力放在更重要的优化和架构设计上。

我第一次试水的时候,只巡检了10台设备,就觉得“哇,这也太香了”。后来逐步扩展到1000台,中间踩了不少坑,但也积累了很多经验。今天全分享给大家。

工欲善其事,必先利其器。咱们需要的工具其实不多,但要选对。

  1. Python环境:推荐Python 3.8+。我用的是3.11,兼容性好。

  2. 核心库:

    • Netmiko:强烈推荐!它对华为设备支持很好,封装了SSH连接、命令发送、分页处理等细节,比原生Paramiko省心多了。安装:pip install netmiko
    • Pandas:处理数据、生成Excel报告神器。pip install pandas openpyxl
    • Concurrent.futures 或 ThreadPoolExecutor:处理并发,1000台设备不能一台台串行跑。
    • 可选:TextFSM 或 ntc-templates,用于结构化解析命令输出(后面会讲)。
    • Paramiko:Netmiko底层就是它,如果你想更底层控制也可以了解。
  3. 设备信息管理:别把IP、用户名、密码硬编码!用Excel、CSV或JSON文件存设备清单。示例CSV格式:

ip,hostname,device_type,username,password192.168.1.1,SW-01,huawei,admin,YourPass192.168.1.2,SW-02,huawei,admin,YourPass...
  1. 环境注意:
    • 交换机开启SSH,配置好Vty用户权限。
    • 巡检账号建议只读权限,减少风险。
    • 网络连通性:确保你的脚本服务器能访问所有设备。防火墙、ACL别挡路。
    • 并发控制:1000台别一股脑全上,建议分批或限流(比如并发50-100),避免把交换机或自己服务器搞崩。

我一般把这些配置写在一个devices.csv和config.py里,方便维护。

核心脚本

咱们先从最简单的一台设备开始,逐步完善。

基础连接示例(用Netmiko):

from netmiko import ConnectHandlerimport timedefconnect_and_run(ip, username, password):    device = {'device_type': 'huawei','host': ip,'username': username,'password': password,'port': 22,'timeout': 30,    }try:with ConnectHandler(**device) as conn:            conn.enable()  # 如果需要进入特权模式            output = conn.send_command("display version")            print(f"{ip} 连接成功!版本信息:\n{output[:200]}...")  # 截取一部分看效果return outputexcept Exception as e:        print(f"{ip} 连接失败: {str(e)}")returnNone

简单吧?Netmiko自动处理了很多华为设备的“脾气”,比如分页---- More ----。

常用巡检命令清单(这些是我日常必查的):

  • display version:版本、启动时间
  • display device:单板状态
  • display fan / display power:风扇、电源
  • display cpu-usage / display memory:CPU内存占用
  • display interface brief:接口摘要
  • display interface description:接口描述
  • display arp / display mac-address:ARP和MAC表
  • display current-configuration:当前配置(可选,输出大)
  • display logbuffer:日志缓冲

你可以把这些命令放一个列表里,循环执行。

commands = ["display version","display device","display cpu-usage",# ... 更多]

并发处理1000台:用ThreadPoolExecutor。

from concurrent.futures import ThreadPoolExecutor, as_completedimport csvdefmain():    devices = []with open('devices.csv', 'r') as f:        reader = csv.DictReader(f)        devices = list(reader)    results = {}with ThreadPoolExecutor(max_workers=50) as executor:  # 根据服务器性能调整        future_to_ip = {executor.submit(connect_and_run, dev['ip'], dev['username'], dev['password']): dev['ip'] for dev in devices}for future in as_completed(future_to_ip):            ip = future_to_ip[future]try:                results[ip] = future.result()except Exception as exc:                results[ip] = f"Error: {exc}"# 保存结果with open('inspection_results.txt', 'w') as f:for ip, data in results.items():            f.write(f"--- {ip} ---\n{data}\n\n")    print("巡检完成!")if __name__ == "__main__":    main()

跑起来后,你会看到终端刷刷刷地输出,效率直接拉满。实际测试中,50并发下1000台大概2-4小时搞定(取决于网络和命令复杂度)。

数据解析与报告生成

原始命令输出是文本,读起来费劲。我们可以用Pandas生成Excel,或者简单用TextFSM解析关键字段。

简单版:把每个命令结果存到字典,再转DataFrame。

import pandas as pd# 假设results是字典data = []for ip, outputs in results.items():    row = {'IP': ip, 'Version': extract_version(outputs.get('display version', '')), ...}    data.append(row)df = pd.DataFrame(data)df.to_excel('巡检报告_20250612.xlsx', index=False)

提取函数可以用正则或字符串查找实现。比如提取CPU利用率:

import redefextract_cpu(output):    match = re.search(r'CPU usage:\s*(\d+)%', output)return match.group(1) if match else'N/A'

高级点推荐TextFSM + ntc-templates,它能把display interface brief解析成结构化表格。

常见坑

  1. 连接超时/失败:设备太多,网络抖动常见。加重试机制(retry 3次),用exponential backoff。
  2. 命令输出分页:Netmiko基本能处理,但有些老设备顽固,可以conn.send_command("screen-length 0")先关分页。
  3. 权限问题:巡检账号别给太高权限。display命令大多只读就够。
  4. 性能瓶颈:服务器CPU/内存不够?降低并发或分批跑(比如按区域分10组)。
  5. 安全:密码别明文存!用key文件、环境变量或密码管理工具(比如keyring库)。
  6. 华为设备特性:有些型号device_type用huawei或huawei_vrp,测试确认。enable模式可能需要secret。
  7. 日志与异常:每个设备独立try-except,别让一台失败拖累全部。

我曾经因为没控制并发,把监控服务器搞得响应慢,领导还来问“网络是不是又出问题了”……血的教训啊。

上个月公司扩容,又加了300台新交换机。我把脚本一改,新增设备IP导入CSV,跑了一遍。全网健康情况一目了然,发现了十几处潜在隐患(比如几个电源老化、部分端口流量异常)。领导看完报告直呼“靠谱”,还给我申请了奖金。

从那以后,巡检从“每月苦哈哈”变成“每周自动跑”,大家工作幸福感up up。


自动化不是一蹴而就的。刚开始可能花一周时间调试,但后面节省的时间是指数级的。建议大家先在测试环境或少量设备上练手,熟悉Netmiko的脾气,再大规模推广。

代码我不会一次性全贴(太长了),但核心思路和片段都分享了。你可以根据自己环境改改。如果有具体问题,欢迎在评论区留言,或者私信我交流。咱们一起进步!

记得备份好现有配置,安全第一。网络运维这条路,工具是帮手,经验和责任心才是根本。

喜欢这篇文章的兄弟,点个在看、转发给需要的朋友。

最新文章

随机文章