Python3监控IP丢包率

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
 
这里的代码是监控区域内的所有IP地址,故障数量达到某个值后就触发告警

import os
import time
import re
import subprocess
import threading
from queue import Queue


ip_queue = Queue()
abnormal_num = 0
call_num = 1
name = os.path.split('C:/Users/Administrator/Desktop/zone')[-1]    # 获取文件名用于告警通知是哪个zone的网络故障
with open('C:/Users/Administrator/Desktop/zone', 'r') as z_ip:
    for line in z_ip:
        z_file = line.strip()
        ip_queue.put(z_file)


def zone(name):
    while not ip_queue.empty():
        ip = ip_queue.get()
        status1 = subprocess.Popen('ping -n 5 {}'.format(ip), stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                                   stderr=subprocess.PIPE, shell=True)
        res1 = str(status1.stdout.read(), encoding='gbk')
        regex1 = re.findall(r'\w*%\w*', res1)[0]  # 获取丢包率,百分比
        loss1 = int(re.findall(r'\d*', regex1)[0])     # 获取丢包率数字

        if loss1 >= 80:
            time.sleep(10)
            status2 = subprocess.Popen('ping -n 5 {}'.format(ip), stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                                       stderr=subprocess.PIPE, shell=True)
            res2 = str(status2.stdout.read(), encoding='gbk')
            print(res2)                               # ping输出值
            regex2 = re.findall(r'\w*%\w*', res2)[0]  # 获取丢包率,百分比
            loss2 = int(re.findall(r'\d*', regex2)[0])     # 获取丢包率数字
            print('loss {}%'.format(loss2))

            if loss2 >= 80:
                global abnormal_num, call_num
                abnormal_num += 1
                down_time = time.strftime("%Y-%m-%d %H:%M:%S")
                print('down time: [{}]; zone: {}; ip: {}; abnormal num: {}'.format(down_time, name, ip, abnormal_num))
                if abnormal_num >= 3 and call_num == 1:   
                    call_num += 1  # 设置只触发一次告警
                    send_sms('down {}'.format(name))  # 这里就可以调用你编写的告警函数,我的代码未贴出来


if __name__ == '__main__':
    for t in range(10):
        z_th = threading.Thread(target=zone, args=(name,))
        z_th.start()
上一篇:ElasticSearch(九)e代驾使用Elasticsearch流程设计(Yii1版本)


下一篇:LinuxCon | Kubernetes中的服务亲和性路由,引导更智能的服务发现