lionhg 发表于 2013-10-11 09:33:34

zabbix添加自定义的Discovery rules

研究了半天,终于搞定了zabbix添加自定义的“自动发现”。目前实现了自动获取lvs服务器上的vip以及realserver的当前连接数的监控。我们之前通过ipvsadm的输出,对每个vip和realser的连接数做监控,但是由于这两个都是经常发生变化的,尤其是realserver,经常会出现添加或者修改的事,这样在zabbix上做它们连接数的监控就会消耗人力,每次变更的同时,都要去zabbix上去修改item的配置。所以,研究了一下zabbix的自动发现。入正题,ipvsadm的输出如下:# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.255.253.223:80 wrr
-> 10.255.253.220:80 Route 100 0 0实际上,我们要做的就是对10.255.253.223:80以及10.255.253.220:80后面的ActiveConn 和InActConn的和做监控(这里都是0)。首先,你要先抛开“自动发现”,你应该先实现在不使用自动发现的情况下,拿到数据是正常的。于是就有了这个脚本:# cat lvs_connections
#!/bin/bash
if [ $# -eq 1 ]
then
VIP_PORT=$1
else
echo “Usage:$0 VIP:VPORT”
exit 1
ficase ${VIP_PORT} in
all)
ALL_con=`tail -n14 /proc/net/ip_vs|awk ‘{if (($3 == “Route”)){printf $5″+”$6″+”}}’`
echo $((${ALL_con}0))
;;
*)
NOW_con=`tail -n14 /proc/net/ip_vs|awk ‘{if (($1 == “TCP” || $1 == “UDP”)){printf “\n”$2″–”}else{ if (($3 == “Route”)){printf $5″+”$6″+”}}}’`for VIP_PORT_16 in `tail -n14 /proc/net/ip_vs|awk ‘/^TCP/||/^UDP/ {print $2}’`
do
VIP_10=`echo ${VIP_PORT_16%%:*} | awk ‘{for(i=1;i<=NF;i++) $i=strtonum(“0x”$i);print}’ FIELDWIDTHS=”2 2 2 2″ OFS=”.”`
VPORT_10=`echo $((16#${VIP_PORT_16##*:}))`
VIP_VPORT=`echo ${VIP_10}:${VPORT_10}`
if [ ${VIP_VPORT} = ${VIP_PORT} ]
then
connect=`tail -n14 /proc/net/ip_vs|awk ‘{if (($1 == “TCP” || $1 == “UDP”)){printf “\n”$2″–”}else{ if (($3 == “Route”)){printf $5″+”$6″+”}}}’|grep “${VIP_PORT_16}”|awk -F– ‘{print $2}’`
Connect_num=`echo “${connect}0″`
echo “$((${Connect_num}))”
fi
done
for RIP_PORT_16 in `tail -n14 /proc/net/ip_vs|awk ‘/Route/ {print $2}’`
do
RIP_10=`echo ${RIP_PORT_16%%:*} | awk ‘{for(i=1;i<=NF;i++) $i=strtonum(“0x”$i);print}’ FIELDWIDTHS=”2 2 2 2″ OFS=”.”`
RPORT_10=`echo $((16#${RIP_PORT_16##*:}))`
RIP_RPORT=`echo ${RIP_10}:${RPORT_10}`
if [ ${RIP_RPORT} = ${VIP_PORT} ]
then
connect=`tail -n14 /proc/net/ip_vs|grep ${RIP_PORT_16}|awk ‘{printf $5″+”$6″+”}’`
Connect_num=`echo “${connect}0″`
echo “$((${Connect_num}))”
fi
done
;;
esac####################### ./lvs_connections 10.255.253.223:80
0
#这样就能拿到“10.255.253.223:80”的连接数是0,但是由于10.255.253.223:80是不固定的,所以就引入了自动发现。前提是lvs_connections已经融入了zabbix监控。接下来,我们为自动发现写个脚本,# cat lvs_ip_discovery
#!/bin/bash
echo ‘{“data”:[{"{#IP}":"10.255.253.223:80"},{"{#IP}":"10.255.253.220:80"},{"{#IP}":"10.255.253.221:80"}]}’这里投机了,最终其实是要以上面的输出方式,拿到当前服务器的ipvsadm的相关信息。同时也要将这个脚本融入zabbix,相关的配置如下:UserParameter=lvs.connect[*],/bin/bash /usr/local/zabbix/etc/script/lvs/lvs_connections $1
UserParameter=lvs.ip.discovery,/bin/bash /usr/local/zabbix/etc/script/lvs/lvs_ip_discovery好了,接下来,就是怎么搞定zabbix前端的配置了。首先,进入Template–Discovery rules–Create discovery rules–NAME里填discovery IPKEY里填lvs.ip.discoveryFilter的Macro里填{#IP}其他可以默认好了,规则添加好了,接下来就是怎么让规则和item关联起来了。在你刚建好的discovery IP里面的items中新建一个items,Name里填connect of $1key里填lvs.connect[{#IP}]其他的可以默认,好了。完成了。=============================其实说白了,自动发现是自动发现,与之前添加的item互不影响,只需要一个“{#IP}”把他们关联起来。

wendu 发表于 2013-10-12 18:41:58

月经不仅仅是女人的痛苦,也是男人的痛苦。

chunjihong 发表于 2013-10-16 00:47:04

为中华而努力读书!一包中华好多钱啊~~~

kaiser_cn 发表于 2013-10-19 22:59:31

.其实我是一个天才,可惜天妒英才!

sdoghds88888 发表于 2013-10-24 03:26:27

比我有才的都没我帅,比我帅的都没我有才!

鸦鸦 发表于 2013-10-30 02:08:59

不知该说些什么。。。。。。就是谢谢

窝窝插件 发表于 2013-11-7 16:14:34

男人偷腥时的智商仅次于爱因斯坦!
页: [1]
查看完整版本: zabbix添加自定义的Discovery rules