IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 通过 PRTG EXE 高级监控脚本 + python 监控华为防火墙线路健康状态 -> 正文阅读

[Python知识库]通过 PRTG EXE 高级监控脚本 + python 监控华为防火墙线路健康状态

背景

通过 SNMP 无法获取 华为 healthcheck 健康监测状态,本机建介绍PRTG脚本 通过 EXE 脚本自定义监控参数,该传感器可以接受 json 或者 xml 格式,下来来看看如何是先吧~~~

要监控的信息
image-20220916165732362

环境及配置依赖

  • 系统:win-11
  • python : 3.10.7
pip install paramiko
pip install textfsm

编写脚本

python 脚本

import paramiko
import time
import textfsm
import json
import sys


# 连接设备
def connect_device(ip, link_name):
    ip = ip
    link_name = link_name
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 替换你的账户及密码 'name', 'password'
    ssh_client.connect(ip, 22, 'name', 'password', look_for_keys=False)
    command = ssh_client.invoke_shell()
    time.sleep(0.5)
    command.send('screen-length 0 temporary \n')
    time.sleep(1)
    command.send('display healthcheck name {} \n'.format(link_name))
    time.sleep(1)
    command.send('display healthcheck name {} verbose \n'.format(link_name))
    time.sleep(1)
    command_result = command.recv(65535).decode(encoding='utf-8').lower()
    ssh_client.close()

    # 通过textfsm模块获取数据, textfsm建议使用绝对路径
    tex_temp = open(open('C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\EXEXML\huawei_health_check_temp.txt', encoding='utf-8'), encoding='utf-8')
    result = textfsm.TextFSM(tex_temp).ParseTextToDicts(command_result)
    return result


# 传感器是从回显中获取信息的,将处理后的信息打印处理 
def print_result(dev_result, data):
    # 获取health_check的状态
    dev_state = dev_result[0]

    link_state = {
        "Channel": "{} Statu".format(dev_state['line_Name']),
        "CustomUnit": "#",
        "Mode": "Absolute"
    }
	
    # 定义状态信息,0 为正常,1 为部分地址探测异常,2 为healthcheck探测失败
    if dev_state['All_State'] == 'up' and dev_state['line_down'] == '0':
        link_state["Value"] = 0
        data['prtg']['text'] = "Link State: up"

    elif dev_state['All_State'] == 'up' and dev_state['line_down'] != '0':
        link_state["Value"] = 1
        data['prtg']['text'] = "Link State: Some lines are abnormal"
        data['prtg']['Warning'] = 1
    else:
        link_state["Value"] = 2
        data['prtg']['text'] = "Link State: down"
        data['prtg']['Error'] = 1

    data['prtg']['result'].append(link_state)

    # 处理每个目的地址监测状态
    for one_line in dev_result:
        one_link_state = {
            "Channel": "{} Check Statu".format(one_line['One_Destination']),
            "CustomUnit": "#",
            "Mode": "Absolute",
        }

        if one_line['One_State'] == 'up':
            one_link_state['Value'] = 0
        else:
            one_link_state['Value'] = 2
        data['prtg']['result'].append(one_link_state)

    print(json.dumps(data, sort_keys=True, indent=2))


def main():
    data = {
        "prtg": {
            "result": [
            ]
        }
    }

    try:
        # 通过sys接受外部数据,设备地址及接口名称
        device_ip = sys.argv[1]
        link_name = sys.argv[2]
        result = connect_device(device_ip, link_name)
        print_result(result, data)

    except Exception as e:
        data['prtg']['text'] = "Link State: {}".format(e)
        print(json.dumps(data, sort_keys=True, indent=2))


if __name__ == '__main__':
    main()

Python 获取到的数据

{
  "prtg": {
    "Warning": 1,
    "result": [
      {
        "Channel": "telecom-china-check Statu",
        "CustomUnit": "#",
        "Mode": "Absolute",
        "Value": 1
      },
      {
        "Channel": "59.36.211.193 Check Statu",
        "CustomUnit": "#",
        "Mode": "Absolute",
        "Value": 0
      },
      {
        "Channel": "223.6.6.6 Check Statu",
        "CustomUnit": "#",
        "Mode": "Absolute",
        "Value": 2
      },
      {
        "Channel": "8.8.8.8 Check Statu",
        "CustomUnit": "#",
        "Mode": "Absolute",
        "Value": 0
      }
    ],
    "text": "Link State: Some lines are abnormal"
  }
}

textfsm模板

Value Filldown line_Name (\S+)
Value Filldown line_member (\w+)
Value Filldown All_State (up|down)
Value Filldown line_init (\d+)
Value Filldown line_down (\d+)
Value Filldown line_up (\d+)
Value One_State (up|down)
Value Required One_Destination (\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})


Start
 ^${line_Name}\s+${line_member}\s+${All_State}\s+${line_up}\s+${line_down}\s+${line_init}
 ^\s+state\s+:\s+${One_State}
 ^\s+\w+\s+\S+\s+\w+\s+\S\s+ip\S${One_Destination} -> Record

bat文件

使用本地python环境调用脚本

@echo off
"C:\Users\quzq\AppData\Local\Programs\Python\Python310\python.exe" "C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\EXEXML\huawei_health_check.py" %1 %2

将文件放置PRTG探针

目录为:C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\EXEXML

image-20220916170941930

配置监信息

点击添加探针选高级exe脚本

image-20220916171316430

配置相关参数

image-20220916171603677

定义告警信息

image-20220916171651893
image-20220916171828247

当探针有一个线路异常时探诊状态为警告
image-20220916171932939

查看线路异常通道,值显示为2的为down状态
image-20220916172142436

参考链接

传感器介绍 https://www.paessler.com/manuals/prtg/exe_script_advanced_sensor
传感器字段介绍 https://www.paessler.com/manuals/prtg/custom_sensors#command_line

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:24:34  更:2022-09-21 00:25:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:09:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码