目前日常设备巡检是通过手动登录设备执行巡检命令,然后人工对命令结果进行分析。部分设备厂家也提供了自动化或可视化的巡检工具,但大都只支持自己的设备。
痛 点:
效率低下 传统巡检方式需要大量的手动操作,效率低下,无法满足现代网络管理的要求。 错误风险 人工操作容易出现疏漏和错误,导致配置不一致、安全漏洞等问题。 复杂性增加 随着网络规模的扩大,手动管理和巡检变得更加复杂,难以应对日益增长的任务量。
为了应对上述痛点,网络自动化巡检技术应运而生。这种方法利用编程和自动化工具,实现网络设备的自动管理和巡检,从而提高效率、降低错误风险,并加速故障排查过程。
Netmiko Netmiko是一个Python库,用于在网络设备上执行各种操作,如配置更改、命令执行等。它支持多种网络设备厂商和协议,使工程师能够通过编写Python脚本来实现自动化巡检和配置管理。 TTP(Template Text Parser) TTP是一个强大的模板文本解析器,可用于从设备输出中提取有用的信息。工程师可以编写模板来定义所需数据的格式,然后使用TTP来解析设备输出,提取关键信息,例如配置项、性能数据等。
下面是一个简单示例,展示如何使用Netmiko和TTP来自动化执行网络设备巡检,并提取设备配置信息:
#!/usr/bin/env python
"""
@File : snc-network-tools.py
@Author : wang6237
@Time : 2023/5/5 20:44
"""
import contextlib
import netmiko.exceptions
from netmiko import ConnectHandler
from openpyxl import load_workbook
from loguru import logger
import json
import toml
#设置日照文件
logger.add("run.log")
#
设置check.toml位置,这是配置文件
check_dict = toml.load("check.toml")
class NetworkInspection:
"""
"""
def __init__(self, config):
self.ip = config["ip"]
self.manufacturer = config["device_type"]
self.ttp_path = check_dict["config"]["template_path"]
self.output = ''
with contextlib.suppress(Exception):
self.connection = ConnectHandler(**config)
@staticmethod
def _check_output_type(self, command):
"""
判断结果是不是字典
:param self:
:param command: 和ttp模板中的name字段对应
:return: True 或者 False
"""
return isinstance(self.output[0][0][command], dict)
def get_data(self, command, template, device_model):
"""
执行命令,解析结果
:param device_model: 设备型号
:param command: 巡检命令
:param template: 对应的解析模板
:return: ttp_status: ttp模板状态, self.output:返回值
"""
ttp_status = True
try:
#判断ttp模板是否存在
…省略…
return ttp_status, self.output
@staticmethod
def _check(data, command):
if check_dict.get(command):
…省略…
return msg
def check_data(self, command):
"""
校验数据
:type command: str, display device等命令....
:return: msg
"""
msg_list = []
check = check_dict[command]["Check"][0]
logger.info(check_dict[command]["Title"])
if self._check_output_type(self, command):
data = self.output[0][0][command]
msg_list.append(self._check(data, command))
else:
data_list = self.output[0][0][command][1:]
msg_list.extend(
self._check(data, command)
for data in data_list
if len(data) > 1 and data[check] not in ["", "--"]
)
return msg_list
def start_inspection(): # sourcery skip: low-code-quality
"""
1. 通过读取xlsx文件,获取相关配置
2. 根据列表中数据,提取并组合netmiko需要的config参数
3. 批量执行相关巡检命令
:return:
"""
…省略…
if __name__ == '__main__':
start_inspection()
执行日志:
...
2023-06-30 17:05:29.361 | INFO | __main__:check_data:163 - <<<<<<< 检查 风扇的 Status 字段是否是 Normal >>>>>>>
2023-06-30 17:05:29.367 | SUCCESS | __main__:check_data:183 - < 检查风扇 > FanNum: [ 1 ] 正常,当前速度:40%(9376), 当前状态:Normal, 巡检结果:正常
2023-06-30 17:05:29.372 | SUCCESS | __main__:check_data:183 - < 检查风扇 > FanNum: [ 1 ] 正常,当前速度:40%(9408), 当前状态:Normal, 巡检结果:正常
2023-06-30 17:05:29.385 | SUCCESS | __main__:check_data:183 - < 检查风扇 > FanNum: [ 1 ] 正常,当前速度:40%(9536), 当前状态:Normal, 巡检结果:正常
2023-06-30 17:05:30.588 | INFO | __main__:run_commands_on_device:66 - IP:172.16.33.125;命令:display device tem all ,执行完毕
2023-06-30 17:05:32.811 | INFO | __main__:check_data:139 - <<<<<<< 检查 温度 的 Status 字段是否是 NORMAL >>>>>>>
2023-06-30 17:05:32.824 | SUCCESS | __main__:check_data:148 - < 检查温度 > Slot: 1 温度正常,当前温度:31°C, 当前状态:NORMAL, 巡检结果:正常
2023-06-30 17:05:33.811 | INFO | __main__:run_commands_on_device:66 - IP:172.16.33.125;命令:display cpu ,执行完毕
2023-06-30 17:05:36.028 | INFO | __main__:check_data:98 - <<<<<<< 检查 CPU 的使用 是否超过 80% >>>>>>>
2023-06-30 17:05:36.031 | SUCCESS | __main__:check_data:104 - < 检查 CPU > 当前CPU使用率 15%, 巡检结果:正常
2023-06-30 17:05:37.004 | INFO | __main__:run_commands_on_device:66 - IP:172.16.33.125;命令:display memory ,执行完毕
2023-06-30 17:05:39.224 | INFO | __main__:check_data:108 - <<<<<<< 检查 Memory 的使用 是否超过 80% >>>>>>>
2023-06-30 17:05:39.242 | SUCCESS | __main__:check_data:114 - < 检查 Memory > 当前 Memory 使用率 43%, 巡检结果:正常
2023-06-30 17:05:40.334 | INFO | __main__:run_commands_on_device:66 - IP:172.16.33.125;命令:display alarm active ,执行完毕
2023-06-30 17:05:42.550 | WARNING | __main__:start_inspection:274 - 需要手动检查 display alarm active 的结果
<<<<<<<<<<<< 巡检结果 >>>>>>>>>>>>
=========== display device 的巡检结果 ============
< 检查 Device > Slot:1, Type: CE6881-48S6CQ, Online: Present, Alarm: Normal, Primary: Master,巡检结果:正常
=========== display device power 的巡检结果 ============
< 检查电源 > PowerNo: PWR1 正常,当前 State:Supply, 当前电流:6.2A, 当前电压: 12.0V,当前功率:74W, 巡检结果:正常
=========== display device fan 的巡检结果 ============
< 检查风扇 > FanNum: [ 1 ] 正常,当前速度:40%(9808), 当前状态:Normal, 巡检结果:正常
< 检查风扇 > FanNum: [ 1 ] 正常,当前速度:40%(9856), 当前状态:Normal, 巡检结果:正常
< 检查风扇 > FanNum: [ 1 ] 正常,当前速度:40%(9888), 当前状态:Normal, 巡检结果:正常
=========== display device tem all 的巡检结果 ============
< 检查温度 > Slot: 1 温度正常,当前温度:40°C, 当前状态:NORMAL, 巡检结果:正常
=========== display cpu 的巡检结果 ============
< 检查 CPU > 当前CPU使用率 16%, 巡检结果:正常
=========== display memory 的巡检结果 ============
< 检查 Memory > 当前 Memory 使用率 44%, 巡检结果:正常

本文作者:王玉坤(上海新炬中北团队)
本文来源:“IT那活儿”公众号





