2分钟搞定全网巡检:一个脚本+五大必备 Python 库,让你一天干别人一周的活
大家好,我是你们的老朋友,一名在运维圈摸爬滚打多年的技术博主。今天,我要分享一个“偷懒”秘籍——用 Python 写一个全网巡检脚本,2 分钟搞定原本需要一整天的活儿。别不信,这背后是五大 Python 库的功劳,它们就像你的“超级工具包”,让网络设备巡检变得像点外卖一样简单。这篇文章会带你从零开始,用代码示例一步步实现,保证你看完就能上手。### 为什么全网巡检这么耗时间?先说说痛点。在网络运维中,巡检是日常任务:检查路由器、交换机、防火墙的状态,比如 CPU 使用率、内存占用、接口流量等。传统做法是手动 SSH 登录到每台设备,敲命令、记录结果、再导出报表。如果你有 100 台设备,每台花 5 分钟,那就是 500 分钟,差不多一整天。更别提设备类型不同、命令不同,还得手动处理异常。累不累?累!但有了 Python,我们可以自动化这一切。### 五大 Python 库:你的巡检“神器”要让脚本跑起来,我们需要五个关键库。它们各司其职,像一支特种部队:1.Paramiko:SSH 连接专家,负责远程登录设备并执行命令。2.Netmiko:基于 Paramiko 的“升级版”,专门简化网络设备操作,支持 Cisco、华为、H3C 等主流品牌。3.Pandas:数据处理大师,把巡检结果整理成表格,方便导出为 Excel 或 CSV。4.Openpyxl:Excel 操作员,直接生成格式化的报表,不用手动复制粘贴。5.Schedule:定时任务管家,让脚本自动每天、每周跑一次,彻底解放双手。这些库安装很简单:用pip install paramiko netmiko pandas openpyxl schedule一键搞定。接下来,我们直接上代码。### 代码示例 1:用 Netmiko 连接一台设备并获取基本信息我们先从最简单的开始——连接一台 Cisco 交换机,获取它的主机名和运行时间。Netmiko 的封装让 SSH 操作变得极其直观。python# 导入 Netmiko 库from netmiko import ConnectHandler# 定义设备连接参数device = { 'device_type': 'cisco_ios', # 设备类型,这里是 Cisco IOS 'host': '192.168.1.1', # 设备 IP 地址 'username': 'admin', # 用户名 'password': 'password123', # 密码(生产环境建议用密钥) 'port': 22, # SSH 端口}try: # 建立 SSH 连接 connection = ConnectHandler(**device) print(f"成功连接到 {device['host']}") # 发送命令并获取输出 output = connection.send_command("show version | include uptime") print("设备运行信息:") print(output) # 关闭连接 connection.disconnect() print("连接已关闭")except Exception as e: print(f"连接失败:{e}")运行结果:你会看到类似Cisco IOS Software, Version 15.2(7)E, uptime is 2 weeks, 3 days, 14 hours, 22 minutes的信息。这只是开始,我们还可以用send_command获取接口状态、路由表等。### 代码示例 2:批量巡检多台设备并生成 Excel 报表现在,我们把规模扩大到全网。假设你有一个设备列表(IP 地址和类型),脚本会自动巡检每台设备,检查 CPU 使用率和内存占用,然后输出到一个 Excel 文件。这里用到了 Netmiko、Pandas 和 Openpyxl。pythonimport pandas as pdfrom netmiko import ConnectHandlerfrom datetime import datetime# 模拟设备列表(实际可从 CSV 或配置文件读取)devices = [ {'host': '192.168.1.1', 'device_type': 'cisco_ios', 'username': 'admin', 'password': 'password123'}, {'host': '192.168.1.2', 'device_type': 'cisco_ios', 'username': 'admin', 'password': 'password123'}, {'host': '192.168.1.3', 'device_type': 'cisco_ios', 'username': 'admin', 'password': 'password123'},]# 用于存储结果的列表results = []for device in devices: try: # 连接设备 conn = ConnectHandler(**device) print(f"正在巡检 {device['host']}...") # 获取 CPU 使用率(Cisco 命令) cpu_output = conn.send_command("show processes cpu | include CPU utilization") cpu_percent = cpu_output.split("%")[0].split()[-1] # 提取百分比 # 获取内存信息 mem_output = conn.send_command("show memory statistics | include Processor") mem_parts = mem_output.split() total_mem = mem_parts[4] # 总内存(KB) used_mem = mem_parts[5] # 已用内存(KB) # 记录结果 results.append({ 'IP': device['host'], '巡检时间': datetime.now().strftime("%Y-%m-%d %H:%M:%S"), 'CPU 使用率 (%)': cpu_percent, '总内存 (KB)': total_mem, '已用内存 (KB)': used_mem, }) conn.disconnect() except Exception as e: print(f"设备 {device['host']} 巡检失败:{e}") results.append({ 'IP': device['host'], '巡检时间': datetime.now().strftime("%Y-%m-%d %H:%M:%S"), 'CPU 使用率 (%)': 'Error', '总内存 (KB)': 'Error', '已用内存 (KB)': 'Error', })# 用 Pandas 创建 DataFrame 并导出为 Exceldf = pd.DataFrame(results)excel_file = f"network_check_{datetime.now().strftime('%Y%m%d_%H%M')}.xlsx"df.to_excel(excel_file, index=False, engine='openpyxl')print(f"巡检完成,结果已保存到 {excel_file}")运行效果:脚本会依次连接 3 台设备,抓取数据,然后生成一个 Excel 文件,里面包含每台设备的 CPU、内存信息。如果有设备连不上,也会标记为 “Error”,方便你排查。### 进阶技巧:用 Schedule 定时自动巡检手动运行脚本还是不够“懒”。我们可以用 Schedule 库让脚本每天凌晨 2 点自动执行,生成日报表。pythonimport scheduleimport timedef job(): print("开始每日巡检...") # 这里直接复用上面的代码逻辑 # 为了简洁,我用注释代替实际代码 # 你把示例2的代码封装成一个函数,比如 run_check() # run_check() print("巡检完成!")# 每天凌晨 2 点执行schedule.every().day.at("02:00").do(job)while True: schedule.run_pending() time.sleep(60) # 每分钟检查一次这样,你只需部署到服务器上,每天起床就能看到最新的巡检报表。一天干别人一周的活,不是梦。### 总结通过一个简单的 Python 脚本和五大库(Paramiko/Netmiko、Pandas、Openpyxl、Schedule),我们实现了全网巡检的自动化。从手动登录到批量处理,从纯文本到 Excel 报表,整个过程只需 2 分钟(脚本执行时间)就能搞定,而手动做可能需要一整天。这背后是 Python 的灵活性和生态的强大。最后几点建议:-安全第一:生产环境中,密码建议用密钥或加密存储,避免硬编码。-扩展性:你可以添加更多巡检项(如接口流量、错误计数器),或集成告警功能(如发送邮件)。-错误处理:网络设备可能不稳定,多加点 try-except 和重试机制。现在,打开你的终端,装好库,试试这个脚本吧!如果你有任何问题或优化想法,欢迎留言交流。下次见,让我们都做个“懒”得聪明的运维人!