多平台统一管理软件接口,如何实现多平台统一管理软件接口
435
2022-09-11
【逗老师带你学IT】PRTG自定义脚本获取H3C Loadbalance负载均衡链路状态
本文介绍如何使PRTG监控系统的自定义脚本功能,ssh登录网络设备,抓取很多snmp无法获取的监控指标。本文主要涉及的技术点:
1、python paramiko模块应用2、paramiko模块回显抓取3、PRTG value vlookup值查找功能4、H3C防火墙Loadbalance link状态查看
一般情况下,我们可以通过SNMP获取网络设备绝大部分的通用监控信息,但是各设备厂商均存在非标的功能,甚至存在通过厂商提供的MIB库也无法获取的监控信息。
例如,H3C的网络设备的负载均衡功能,其中链路状态信息关联NQA模板,来实现链路状态保活。
实现过程如下:@TOC
一、H3C、HUAWEI ssh登录功能
H3C配置举例
# ssh server enable # local-user admin class manage password hash $h$6$f+j7WzEYItlWRcVKQ== service-type ssh terminal https authorization-attribute user-role level-3 authorization-attribute user-role network-admin authorization-attribute user-role network-operator # line vty 0 63 authentication-mode scheme user-role network-admin #
HUAWEI配置举例
# stelnet ipv4 server enable # aaa local-user admin password irreversible-cipher $1a$\V >WBN:~2SM3gq!y6$ local-user admin privilege level 15 local-user admin service-type terminal ssh http # user-interface vty 0 4 authentication-mode aaa protocol inbound ssh(all) #注意,华为的user-interface接口下需要绑定入站协议,可以选择all,也可以只选ssh或者telnet user-interface vty 16 20 #
二、python paramiko模块ssh登录网络设备
下面代码片段举例介绍,如何通过paramiko模块ssh登录网络设备。如果想通过Python登录设备执行一些命令(比如 reboot),以下代码片段就够了。
import paramiko import time import re import sys client = paramiko.SSHClient() client.load_system_host_keys() know_host = paramiko.AutoAddPolicy() client.set_missing_host_key_policy(know_host) client.connect(deviceip,22,'admin','password',allow_agent=False,look_for_keys=False) # get shell ssh_shell = client.invoke_shell() # ready when line endswith '>' or other character while True: line = ssh_shell.recv(1024) if line and str(line).endswith(">'"):#登录后等待设备出现>标识,稳定后输入命令 break; # 发送命令 ssh_shell.sendall( 'dis loadbalance link brief' + '\n')
三、python paramiko模块回显抓取
本文的例子中,我们显然不能仅仅执行一个命令就完事,我们还需要获取回显结果。paramiko的回显抓取深究起来可以专门出一篇文章,涉及ssh管道、字符编码,tcp传输期间的占位符等等。我们这里不深究,直接上一个例子大家拿去用就好了。
# send command ssh_shell.sendall( 'dis loadbalance link brief' + '\n') # get result lines lines = [] while True: line = ssh_shell.recv(1024) if line and str(line).endswith(">'"): break; lines.append(line.decode(encoding='utf-8', errors='strict')) result = ''.join(lines).replace('\r\r','').split('\n')
如此,我们得到了一个list类型的返回值,其中存放着ssh命令回显的每一行,每行占一个元素。中间插个print,检验一下结果:
for i in result: print(i)
四、查找指定链路名称的链路状态
link_state='No_Link_name' for i in result: if link_name and link_name in i: #判定条件,关键词不为空且关键字存在于行内。 link_state=i.split()[2] # split根据空格切成3段,取第3段的值 #不用split,用字符串截取后面6个英文字符也可以,随便搞。 if link_state=='Active': print('0:Active') elif link_state=='No_Link_name': print('1:No_Link_name') else: print('2:%s'%link_state)
五、PRTG添加自定义传感器
写好了上面的脚本之后,我们将.py文件扔到如下路径
如果直接用PRTG的Python解释器 C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\python
如果想用操作系统安装的Python,放到如下路径 C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\exe 并编写一个bat文件如下 @echo off python H3C_FW_LB_Link_Check.py %1 %2
本文示例的Python脚本需要传递两个参数,分别是
设备IP 链路名称关键字
使用的时候根据具体情况填写
关于互斥名称,互斥名称尽量跟参数保持一致。PRTG将逐一执行 (并非同时执行)拥有相同互斥名称的所有 EXE/脚本传感器。如果您拥有大量传感器并想要避免由同时运行进程所引起的资源高度使用,这十分有用。
六、PRTG返回值状态定义
根据之前的Python脚本,程序会给出三种可能返回值。
0:Active1:No_Link_name2:防火墙给出的具体错误信息,例如Probe_Fail等
C:\Program Files (x86)\PRTG Network Monitor\lookups\custom\xxx.ovl
文件内容:
上面这个例子很简单的定义了当返回值等于0、1、2三种情况是系统的告警状态。关于PRTG的状态值查找功能,可以参阅手册原文。PRTG Manual: Define Lookups
搞定!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~