Python 脚本:监控 X 园区设备 X_T1_ACC2 运行状态并进行备份
Python 脚本:监控 X 园区设备 X_T1_ACC2 运行状态并进行备份
本脚本使用 Python 语言编写,用于监控 X 园区设备 X_T1_ACC2 的关键运行状态,包括电源、风扇、LACP、CPU、内存和 OSPF 邻居,并定期备份设备配置。脚本从文件中读取监控命令,并提供异常状态提示。
功能概述
- 定期监控 X_T1_ACC2 设备关键运行状态 (5min)
- 电源状态 (display power)
- 风扇状态 (display fan)
- LACP 状态 (display lacp statistics eth-trunk)
- CPU、内存利用率 (cpu-usage memory-usage)
- OSPF 邻居状态 (display ospf peer brief)
- 与交换机之间建立较为安全的管理
- 对状态监控结果进行分析,并在风扇出现异常状态时(两个风扇状态全部为非 normal)给出明确提示:'All fans are faulty!'
- 脚本所执行的监控相关命令不直接在代码中固定,而是以文件的形式保存,脚本从文件中读取命令并执行。
- 每隔 24h 保存一次 X_T1_ACC2 的配置文件,并通过安全的文件传输协议将配置文件备份在电脑本地,以【当天日期_设备名称】的名称命名,设备端以及本地的配置文件,如:2022_07_20_X_T1_ACC2.zip、2022_07_20_X_T1_ACC2.bak
- 打开设备的 NETCONF 功能,并通过 NETCONF 配置 X_T1_ACC2 的日志主机为 10.1.60.2
- 代码应有较好的层级结构以及复用率,应使用类、函数来构建上述功能。编写以上脚本你可能用到 paramiko、ncclient、time、datetime 等,python 编译环境以及所需的运行库或者第三方库已经在 Terminal01 上安装完成。
伪代码
import paramiko
import ncclient
import time
import datetime
class Device:
def __init__(self, ip, username, password):
self.ip = ip
self.username = username
self.password = password
self.ssh = paramiko.SSHClient()
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.ssh.connect(ip, username=username, password=password)
self.netconf = ncclient.manager.connect(host=ip, username=username, password=password, device_params={'name': 'huawei'})
def exec_command(self, cmd):
stdin, stdout, stderr = self.ssh.exec_command(cmd)
return stdout.read().decode()
def monitor(self):
power_status = self.exec_command('display power')
fan_status = self.exec_command('display fan')
lacp_status = self.exec_command('display lacp statistics eth-trunk')
cpu_usage = self.exec_command('cpu-usage')
memory_usage = self.exec_command('memory-usage')
ospf_status = self.exec_command('display ospf peer brief')
fan_faulty = True
for line in fan_status.split('
'):
if 'Normal' in line:
fan_faulty = False
break
if fan_faulty:
print('All fans are faulty!')
def backup_config(self):
date = datetime.datetime.now().strftime('%Y_%m_%d')
filename = f'{date}_{self.ip}.zip'
self.exec_command(f'save configuration to {filename}')
self.exec_command(f'copy {filename} sftp://10.1.60.2/{filename}')
def enable_netconf(self):
self.netconf.lock(target='running')
config = f'<system><netconf><ssh><server><enable/></server></ssh></netconf></system>'
self.netconf.edit_config(target='running', config=config)
self.netconf.commit()
self.netconf.unlock(target='running')
def config_log_host(self):
self.netconf.lock(target='running')
config = f'<system><log><host><ip-address>10.1.60.2</ip-address></host></log></system>'
self.netconf.edit_config(target='running', config=config)
self.netconf.commit()
self.netconf.unlock(target='running')
if __name__ == '__main__':
commands = []
with open('commands.txt', 'r') as f:
commands = f.readlines()
device = Device('192.168.1.1', 'username', 'password')
while True:
for cmd in commands:
device.exec_command(cmd)
device.monitor()
if datetime.datetime.now().hour == 0:
device.backup_config()
device.enable_netconf()
device.config_log_host()
time.sleep(300) # 5 minutes
说明
- 上述代码仅为伪代码,供参考,实际编写时可能需要根据具体情况进行调整。
- 脚本需要安装 paramiko、ncclient、time、datetime 等库,在 Terminal01 上已安装完成。
- 脚本中的 ip 地址、用户名、密码需要根据实际情况进行修改。
- 'commands.txt' 文件中保存了设备监控所需的命令,每行一个命令。
- 脚本会每 5 分钟执行一次监控,并检查风扇状态,如果所有风扇都处于非正常状态,则会输出 'All fans are faulty!' 的提示。
- 脚本每天 0 点会备份一次设备配置,并将配置文件备份到 10.1.60.2 的 sftp 服务器上。
- 脚本会打开设备的 NETCONF 功能,并配置日志主机为 10.1.60.2。
原文地址: https://www.cveoy.top/t/topic/ocxk 著作权归作者所有。请勿转载和采集!