Linux系统基于mtr命令的zabbix出口网络自动发现和监测的案例

本案例编写基于mtr命令的shell脚本,实现在zabbix监控系统中对Linux服务器的出口网络的便捷监控。

1、确定要进行检测的远端网络IP,通过traceroute 指令确认当前网络路由。

 可见当前共有6跳中间网络

2、安装mtr命令(本步骤这里略过)

3、编写自动监测代码,以统一放置在/opt/monitor/checknetinfo目录下为例,共包含4个文件:

checknetinfo.sh(网络检测)

#!/bin/bash
##__author__='daigjianbing'

#解决crontab找不到mtr命令及报/usr/sbin/mtr: Failure to start mtr-packet: Invalid argument的问题
export PATH=$PATH:/usr/sbin
basepath=$(cd `dirname $0`;pwd)
cd $basepath

DIST_IP=192.168.88.5  #此处修改为需检测的目标IP地址
CHK_FILE=log/result.check
PTEMP_FILE=/tmp/${DIST_IP}result.temp
TEMP_FILE=log/result.temp
LAST_FILE=log/result.last

[ -d log ] || mkdir log
pkill mtr
while true
do
    rm -rf ${PTEMP_FILE} ${TEMP_FILE}
    echo "check net to ${DIST_IP} status"
    mtr -c 100 -r ${DIST_IP} >${CHK_FILE}
    egrep -v "Start|HOST|\?" ${CHK_FILE} |awk '{print $2"|"$3"|"$6}' >${PTEMP_FILE}
    linenum=0
    while read line
    do
        let "linenum=$linenum + 1"
        echo "${DIST_IP}_${linenum}_$line">>${TEMP_FILE}
    done < ${PTEMP_FILE}
    cat ${TEMP_FILE}  |tee  ${LAST_FILE}
    echo "Check completed."
    chmod a+r ${LAST_FILE}
done

runner.sh(监测程序启停)

#!/bin/bash
##__author__='daigjianbing'

basepath=$(cd `dirname $0`;pwd)
cd ${basepath}

APP_NAME=checknetinfo.sh
case "$1" in    
        start)    
                ps -ef|grep ${APP_NAME}|grep -v grep|awk  '{print "kill -9 " $2}' |sh
                sh ${basepath}/${APP_NAME} > /dev/null 2>&1 &;;    
        status)          
                ps -ef|grep ${APP_NAME}|grep -v grep          
                ;;    
        stop)
                ps -ef|grep ${APP_NAME}|grep -v grep|awk  '{print "kill -9 " $2}' |sh
                ;;    
        *)         
                echo 'runner.sh start|status|stop'       
        exit 1;;
esac
exit 0

zbx_discovery_pathip.sh(zabbix监控项自动发现)

#!/bin/bash
##__author__='daigjianbing'

basepath=$(cd `dirname $0`;pwd)
cd ${basepath}

LAST_FILE=log/result.last
PATH_IP=(`cat ${LAST_FILE}|awk -F '|' '{print $1}'`)
length=${#PATH_IP[@]}
printf "{\n"
printf  '\t'"\"data\":["
for ((i=0;i<$length;i++))
do     
        printf '\n\t\t{'
        printf "\"{#PATH_IP}\":\"${PATH_IP[$i]}\"}"
        if [ $i -lt $[$length-1] ];then
                printf ','
        fi
done
printf  "\n\t]\n}\n"

zbx_get_value.sh(zabbix监控项值查询)

#!/bin/bash
##__author__='daigjianbing'

basepath=$(cd `dirname $0`;pwd)
cd ${basepath}

PATH_IP=$1
ITEM=$2
LAST_FILE=log/result.last

if [ -e ${LAST_FILE} -a $# -eq 2 ];then
    if [ ${ITEM} == "PacketLossRate" ]; then
        cat ${LAST_FILE}|grep "${PATH_IP}"|awk -F '|' '{print $2}'|awk -F '%' '{print $1}'
    elif [ ${ITEM} == "TimeDelay" ]; then
        cat ${LAST_FILE}|grep "${PATH_IP}"|awk -F '|' '{print $3}'
    fi
fi

在/opt/monitor/checknetinfo运行./runner.sh start,可以观察到生成log目录及对应数据文件如下图:

 检测程序会在后台一直运行,数据会一直更新,对应结果last文件中数据以"|"为界,输出结果格式为:源IP-路由序号-途经IP|丢包率|时延

4、在zabbix客户端中添加项目,执行" vi /etc/zabbix/zabbix_agentd.d/checknetinfo.conf" ,内容如下:

##__author__='daigjianbing'
UserParameter=checknet.pathip.discovery,sh /opt/monitor/checknetinfo/zbx_discovery_pathip.sh
UserParameter=checknet.pathip.get_value[*],sh /opt/monitor/checknetinfo/zbx_get_value.sh $1 $2

重启zabbix客户端。

6、在zabbix管理页面添加模板,细节如下

 

 

 将模板关联到相应主机,待主机完成键值自动发现、数据正常获取后,在主机上定义复合图形,以丢包率为例,如下:

 同样定制一下时延视图,最后在仪表盘上添加相应图形即可,最终监控视图如下:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代先生.重庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值