使用python写脚本1 所执行的监控相关命令不在代码中固定以文件的形式保存脚本从文件中读取命令并执行2代码有层级结构复用率简单易读用类、函数来构建功能编写脚本用到paramiko、ncclient、time、datetime4个库3 每5分钟对设备的关键运行状态进行监控电源风扇LACPCPU内存利用率OSPF邻居状态并输出结果4 与交换机建立安全连接5 对状态监控结果分析在两个风扇出现异常状态给
导入所需库
import paramiko from ncclient import manager import time from datetime import datetime
定义交换机IP和登录信息
switch_ip = "192.168.1.1" username = "admin" password = "password"
读取命令文件并执行
with open("commands.txt", "r") as f: commands = f.readlines() # 建立SSH连接 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(switch_ip, username=username, password=password) # 执行命令 for command in commands: _, stdout, _ = ssh.exec_command(command) print(stdout.read().decode())
建立NETCONF连接并打开NETCONF功能
with manager.connect(host=switch_ip, port=830, username=username, password=password, hostkey_verify=False) as m:
# 配置设备日志主机为10.1.60.2
config = """
监控设备状态并输出结果
while True: # 建立SSH连接 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(switch_ip, username=username, password=password) # 监控电源状态 _, stdout, _ = ssh.exec_command("show power inline") power_output = stdout.read().decode() if "faulty" in power_output: print("Power: faulty") else: print("Power: normal") # 监控风扇状态 _, stdout, _ = ssh.exec_command("show environment fan") fan_output = stdout.read().decode() if "faulty" in fan_output: print("Fan: faulty") else: print("Fan: normal") # 监控LACP状态 _, stdout, _ = ssh.exec_command("show lacp neighbor") lacp_output = stdout.read().decode() if "No neighbors" in lacp_output: print("LACP: No neighbors") else: print("LACP: normal") # 监控CPU利用率 _, stdout, _ = ssh.exec_command("show processes cpu sorted") cpu_output = stdout.read().decode() if "faulty" in cpu_output: print("CPU: faulty") else: print("CPU: normal") # 监控内存利用率 _, stdout, _ = ssh.exec_command("show processes memory sorted") memory_output = stdout.read().decode() if "faulty" in memory_output: print("Memory: faulty") else: print("Memory: normal") # 监控OSPF邻居状态 _, stdout, _ = ssh.exec_command("show ip ospf neighbor") ospf_output = stdout.read().decode() if "FULL/DR" in ospf_output: print("OSPF: normal") else: print("OSPF: faulty") # 关闭SSH连接 ssh.close() # 等待5分钟 time.sleep(300)
# 每24h保存一次配置文件并传输到电脑本地
now = datetime.now()
if now.hour == 0 and now.minute == 0:
# 建立SFTP连接
transport = paramiko.Transport((switch_ip, 22))
transport.connect(username=username, password=password)
sftp = paramiko.SFTPClient.from_transport(transport)
# 保存配置文件到交换机本地
config_filename = f"config_{now.strftime('%Y%m%d')}.txt"
_, stdout, _ = ssh.exec_command(f"show running-config > {config_filename}")
# 传输配置文件到电脑本地
sftp.get(config_filename, config_filename)
# 关闭SFTP连接
sftp.close()
transport.close(
原文地址: https://www.cveoy.top/t/topic/e8VO 著作权归作者所有。请勿转载和采集!