首页 > 其他 > 详细

zabbix自定义脚本,实现线路时延波动超出允许范围时联动mtr,并前端展示mtr结果

时间:2021-04-27 19:56:15      阅读:28      评论:0      收藏:0      [点我收藏+]

互联网故障一般表现为丢包和时延增大,持续性故障不难排查,难的是间歇性或凌晨故障,后者往往来不及等我们测试就已经恢复正常,得不到异常时的mtr无法判断故障点在哪里

故此有了根据丢包率和时延变换联动mtr的需求,丢包联动mtr在另一篇文章中有分享,今天分享下时延变化联动mtr

环境

  python3.6以上版本,pip3(pip 9.0.1以上版本),mysql,pymysql库

使用zabbix自定义脚本获取线路时延丢包率不做介绍,参考上一篇zabbix文章

如果系统当前python版本是python3.5,升级3.6时有两个注意事项

1 先升级python至3.6再升级pip3否则会导致pip3无法正常使用

2 python3.5升级到3.6后需要把lsb_release.py 文件复制到python3.6的lib里,否则pip3无法正常使用

3 上两步完成后再进行pip3升级

 

思路

zabbix监控脚本执行完后调用restime_mtr.py把目标ip和探测结果做为参数传入

restime_mtr.py把目标ip第一次的时延结果写入数据库

第二次接收到该目标ip时延结果时从数据库取该ip上一次时延进行计算,计算结果超出允许波动范围后调用shell

shell执行mtr并记录

show_mtr进行遍历log文件夹,获取当天数据传给zabbix前端展示

 

mysql相关

#安装
sudo apt install mysql-server
#初始化,初始化过程中需要设置密码和是否禁止远程登录(当前建议禁止)
mysql_secure_installation
#创建pingvalues数据库
create database pingvalues default charset utf8; 
#创建表
create table pingvalue(nid int not null auto_increment primary key, num int,ipaddress varchar(64) ) engine=innodb default charset=utf8;

查看表

 技术分享图片

 

 

zabbix脚本相关

#!/usr/bin/env python3
#-*-coding:utf-8-*-
import pymysql,subprocess
def ping_value(value,tip):
    value = int(value)
    conn = pymysql.connect(host=127.0.0.1,port = 3306,user = root,passwd = test, db=pingvalues,charset=utf8)
    coursor = conn.cursor(cursor=pymysql.cursors.DictCursor) 
#筛选出此次探测ip并根据自增id列倒序,获取最后一组数据
    coursor.execute(select num from pingvalue where ipaddress like %s order by nid  desc limit 1;,tip)
#try防止新建item从数据库select不到数据报错
    try:  
        history_value = coursor.fetchone()[num]
#在此处控制波动范围
        if value - history_value > 20:
            mtr = /etc/zabbix/bin/mtr_bash %s%tip
#满足条件调用shell,实测使用python调用系统mtr获取结果会有部分丢失,所以调用shell脚本          subprocess.Popen(mtr,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    except Exception as a:
        pass
#写入最新数据   
    coursor.execute(insert into pingvalue(num,ipaddress) values(%s,%s),(value,tip))    
    conn.commit()
#shell脚本
#!/usr/bin/env bash
IP=$1
mtr -r -n -c 30 -w -b $IP >> /etc/zabbix/bin/log/$1-$(date +%Y-%m-%d)
#前端展示
#!/usr/bin/env python 
#-*-coding:utf-8-*-
from time import strftime, localtime
import argparse,os
local_time = strftime(%Y-%m-%d,localtime())
def op(filename):
    with open(filename) as a:
        return(a.read())
#只在前端展示当天数据
if __name__  == "__main__":
    for i in os.listdir(/etc/zabbix/bin/log):
        if i[-10:] == local_time:
            filename = /etc/zabbix/bin/log/%s%i
            print(op(filename))

测试

select * from pingvalue

技术分享图片

 

 item目标ip和时延结果已写入数据库

 

zabbix前端展示配置

技术分享图片

 

 技术分享图片

 

 页面路径monitoring----latest data相关敏感信息已打码

 

zabbix自定义脚本,实现线路时延波动超出允许范围时联动mtr,并前端展示mtr结果

原文:https://www.cnblogs.com/darkchen/p/14710140.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!