Centos系统下载大全 | Redhat系统下载大全 | Windows2012系统下载大全 | Windows2008系统下载大全| CMS教程 | 网站地图 51运维网-专注Linux/Unix系统安全运维!
当前位置:51运维网 > 编程 > Shell > 正文

zabbix添加自定义的Discovery rules

时间:2013-10-10 19:40 来源:未知 作者:51ou.com 阅读:

研究了半天,终于搞定了zabbix添加自定义的“自动发现”。

目前实现了自动获取lvs服务器上的vip以及realserver 的当前连接数的监控。我们之前通过ipvsadm的输出,对每个vip和realser的连接数做监控,但是由于这两个都是经常发生变化的,尤其是 realserver,经常会出现添加或者修改的事,这样在zabbix上做它们连接数的监控就会消耗人力,每次变更的同时,都要去zabbix上去修改 item的配置。

所以,研究了一下zabbix的自动发现。

入正题,ipvsadm的输出如下:

[root@openstack lvs]# 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)。

首先,你要先抛开“自动发现”,你应该先实现在不使用自动发现的情况下,拿到数据是正常的。于是就有了这个脚本:

[root@openstack lvs]# cat lvs_connections
#!/bin/bash
if [ $# -eq 1 ]
then
VIP_PORT=$1
else
echo “Usage:$0 VIP:VPORT”
exit 1
fi

case ${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

######################

[root@openstack lvs]# ./lvs_connections 10.255.253.223:80
0
[root@openstack lvs]#

这样就能拿到“10.255.253.223:80”的连接数是0,但是由于10.255.253.223:80是不固定的,所以就引入了自动发现。前提是lvs_connections已经融入了zabbix监控。

接下来,我们为自动发现写个脚本,

[root@openstack lvs]# 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 IP

KEY里填lvs.ip.discovery

Filter的Macro里填{#IP}

其他可以默认

好了,规则添加好了,接下来就是怎么让规则和item关联起来了。

在你刚建好的discovery IP里面的items中新建一个items,

Name里填connect of $1

key里填lvs.connect[{#IP}]

其他的可以默认,好了。完成了。

=============================

其实说白了,自动发现是自动发现,与之前添加的item互不影响,只需要一个“{#IP}”把他们关联起来。

感谢您对【51运维网 http://www.51ou.com/】的支持,我们为您免费提供《zabbix添加自定义的Discovery rules》技术文章,《zabbix添加自定义的Discovery rules》详细使用和说明,有时《zabbix添加自定义的Discovery rules》可能不完善、敬请谅解!如果《zabbix添加自定义的Discovery rules》有错误请给我们留言,我们将尽快修复文章错误,如果您觉得本站不错,请分享给周围的朋友!谢谢!

顶一下
(3)
100%
踩一下
(0)
0%
上一篇:awk
下一篇:zabbix监控dns的可用性
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
验证码:点击我更换图片