python实现监控服务器的UDP丢包情况

python实现监控服务器的UDP丢包情况

简介

利用python实现udp丢包情况,只能监控到服务器应用程序不能及时处理udp包导致的udp丢包情况。


实现原理:

1.通过netstat -su 命令周期性的获取服务器启动到当前时间udp丢包情况,packet receive errors字段的值,通过两次相邻时间获取的udp丢包值获取相邻时间内服务器的udp丢包情况
2.如果相邻时间内有udp丢包,发送警告到sentry

实现代码:

# -*- coding: utf-8 -*-
import os
import socket
import raven
from time import sleep

# change to your own sentry client key (修改为自己的sentry client key)
client = raven.Client("http://08eb7a241d1c4acd95e1b1b6978c0dfd:[email protected]:9000/6")

# How long does it take to get a packet loss data (多长时间获取一次丢包数据)
rate = 10
last_errors_packet = None

def udp_info_cmd():
    # can't get udp stat info on mac os, maybe also windows(此命令在mac下不能获取udp统计信息, windows 估计也不能)
    cmd = "netstat -su"
    return cmd


def get_host_name():
    name = socket.gethostname()
    return name


def get_udp_error_packet():
    cmd = udp_info_cmd()
    file_object = os.popen(cmd)
    for line in file_object:
        if "packet receive errors" in line:
            errors_packet_line = line.strip()
            errors_packet = int(errors_packet_line.split()[0])
            return errors_packet
    return 0


def main():
    global last_errors_packet
    while 1:
        errors_packet = get_udp_error_packet()
        if last_errors_packet:
            lost_packet = errors_packet - last_errors_packet
            if lost_packet:
                host_name = get_host_name()
                message = "%s lost packets: %s packets" % (host_name, lost_packet)
                # send message to sentry (发送丢包信息到sentry)
                client.captureMessage(message)
        last_errors_packet = errors_packet
        sleep(rate)


if __name__ == "__main__":
    main()

猜你喜欢

转载自blog.csdn.net/hu741774962/article/details/50907423