本案例编写基于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管理页面添加模板,细节如下
将模板关联到相应主机,待主机完成键值自动发现、数据正常获取后,在主机上定义复合图形,以丢包率为例,如下:
同样定制一下时延视图,最后在仪表盘上添加相应图形即可,最终监控视图如下: