Python 脚本:监控 X 园区设备 X_T1_ACC2 运行状态并进行备份

本脚本使用 Python 语言编写,用于监控 X 园区设备 X_T1_ACC2 的关键运行状态,包括电源、风扇、LACP、CPU、内存和 OSPF 邻居,并定期备份设备配置。脚本从文件中读取监控命令,并提供异常状态提示。

功能概述

  1. 定期监控 X_T1_ACC2 设备关键运行状态 (5min)
    • 电源状态 (display power)
    • 风扇状态 (display fan)
    • LACP 状态 (display lacp statistics eth-trunk)
    • CPU、内存利用率 (cpu-usage memory-usage)
    • OSPF 邻居状态 (display ospf peer brief)
  2. 与交换机之间建立较为安全的管理
  3. 对状态监控结果进行分析,并在风扇出现异常状态时(两个风扇状态全部为非 normal)给出明确提示:'All fans are faulty!'
  4. 脚本所执行的监控相关命令不直接在代码中固定,而是以文件的形式保存,脚本从文件中读取命令并执行。
  5. 每隔 24h 保存一次 X_T1_ACC2 的配置文件,并通过安全的文件传输协议将配置文件备份在电脑本地,以【当天日期_设备名称】的名称命名,设备端以及本地的配置文件,如:2022_07_20_X_T1_ACC2.zip、2022_07_20_X_T1_ACC2.bak
  6. 打开设备的 NETCONF 功能,并通过 NETCONF 配置 X_T1_ACC2 的日志主机为 10.1.60.2
  7. 代码应有较好的层级结构以及复用率,应使用类、函数来构建上述功能。编写以上脚本你可能用到 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。
Python 脚本:监控 X 园区设备 X_T1_ACC2 运行状态并进行备份

原文地址: https://www.cveoy.top/t/topic/ocxk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录