在现代化的网络架构中,网络设备的健康状况直接关系到整个系统的稳定性与性能。为了确保网络设备能够持续高效地运行,传统的人工巡检方法常常面临工作量大、效率低、易出错等问题。因此,网络设备自动化巡检成为了提升网络运维效率的重要手段 。
自动化巡检的必要性
- 高效性:人工巡检耗时费力,而自动化巡检能快速完成大量任务,显著提升效率。
- 减少人为失误:人工巡检易出错,自动化系统按规则执行,减少失误。
- 数据可追溯:自动化巡检结果会被记录保存,为故障排查和性能优化提供数据支持。
- 及时发现潜在的问题:自动化系统可以实时或定期检查设备状态,提前发现异常,减少故障停机时间。
自动化巡检的核心技术
(1) Netmiko
Netmiko是一个专为网络设备设计的Python库,旨在促进诸如配置调整、命令执行等操作。该库广泛兼容多种厂商的网络设备及协议,极大地便利了工程师们利用Python脚本进行自动化巡检与配置管理工作。
(2) TextFSM
TextFSM 是一个 Python 库,专门用于从结构化文本(特别是网络设备的输出)中提取信息。它利用模板来匹配和解析数据,并将结果转换成易于处理的格式(如字典或列表)。这使得从诸如路由表、接口状态等CLI输出中自动抽取关键信息变得简单,便于网络运维人员及开发者进行进一步分析。
基本用法
(1) 安装Netmiko
首先需要安装 Netmiko。可以使用 pip 安装:
pip install netmiko
(2) 基本连接
使用Netmiko连接到网络设备时,需要指定设备的 IP 地址、设备类型、用户名和密码等信息。Netmiko支持多种设备类型(如 Cisco, Huawei, Juniper 等),这些设备类型对应不同的命令和交互方式。
from netmiko import ConnectHandler
# 定义设备连接信息
device = {
'device_type': 'huawei', # 设备类型,例如 'cisco_ios'、'huawei' 等
'host': '192.168.56.10', # 设备的 IP 地址
'username': 'user01', # 登录用户名
'password': 'user01', # 登录密码
'secret': 'secret', # (可选) 如果需要启用特权模式,可以提供 secret
}
# 建立连接
net_connect = ConnectHandler(**device)
# 进入特权模式(如果需要)
# net_connect.enable()
# 执行命令并获取输出
output = net_connect.send_command('display version')
# 打印命令输出
print(output)
# 断开连接
net_connect.disconnect()
(3) 命令输出格式化
Netmiko支持将命令输出以不同的方式进行格式化。例如,可以使用 send_command 时加上 use_textfsm=True 参数来将输出解析为结构化数据(需要预先配置 TextFSM 模板)。
# 执行命令并获取输出
output = net_connect.send_command('display version',use_textfsm=True,\
textfsm_template='./templates/huawei/huawei_version.textfsm')
执行上述测试脚本后,成功运行后返回如下结果:
$ python test.py
[{'version': '5.110', 'device_model': 'S5700-28C-HI', 'uptime': '0 week, 0 day, 2 hours, 46 minutes'}]
封装脚本工具
这个脚本使用了Netmiko和TextFSM来帮助我们进行设备巡检。下面展示了该脚本目录结构的一个示意图:
- templates目录存放TextFSM解析模板。
- config.toml是项目的配置文件
- devices.xlsx文件存放巡检设备和巡检命令。格式如下图示所示:
巡检设备台账
巡检命令
使用这个脚本非常简单。首先,请根据您的具体情况调整devices.xlsx文件中的内容,然后就可以运行main.py了。
这个脚本目前实现了基础功能,为大家提供了一个很好的起点。我们非常鼓励有想法的同学根据自己的业务需求进一步开发和扩展更多实用的功能哦!