前言
很多情况下自定义监控项需要手动创建,重复的工作耗时耗力,全面自动化的时代如何实现同一类型的监控项批量添加。zabbix提供了自动发现的功能,实现监控项批量添加。
实现思路
(1)zabbix 监控linux系统端口状态
批量发现存活端口转换json格式
#!/bin/bash
#设置数组item为需要得到的所有监控项键值数据,变量itemnum为数据的个数
item=`netstat -ntlp|awk '{print $4}'|sed '1,2d'|awk -F ":" '{print $NF}' |sort |uniq`
itemnum=`netstat -ntlp|awk '{print $4}'|sed '1,2d'|awk -F ":" '{print $NF}' |sort |uniq |wc -l`
#输出json格式数据
num=0
echo "{"\"data\"":["
for name in ${item[@]}
do
let num=num+1
if [ "$num" -eq "$itemnum" ]
then
echo "{"\"{#CONNECT}\"":"\"${name}\""}"
else
echo "{"\"{#CONNECT}\"":"\"${name}\""},"
fi
done
echo "]}"
测试脚本
TCP/UDP 端口监控
#!/bin/bash
#tcp/udp port check
ipaddr=$1
port=$2
case $3 in
tcp)
nc -z ${ipaddr} ${port} && echo 1 || echo 0
;;
udp)
nc -uz ${ipaddr} ${port} && echo 1 || echo 0
;;
esac
zabbix-agent配置
UnsafeUserParameters=1
UserParameter=Portdiscovery,bash /etc/zabbix/ncjson.sh
UserParameter=checkport[*],bash /etc/zabbix/nc_port.sh $1 $2 $3
zabbix_get测试
自动发现规则
监控项原型
触发器类型
最新数据
(2)zabbix批量监控目标IP连通性
IP地址列表
cat /etc/zabbix/ip.txt
192.168.99.12
192.168.99.22
192.168.99.50
192.168.99.55
192.168.99.99
将IP地址转换Json 格式
#!/bin/bash
echo -n {\"data\":[
i=0
for address in `cat /etc/zabbix/ip.txt`
do
if [ "$i" = "0" ]; then
echo -n "{\"{#IP}\":\"$address\"}"
else
echo -n ",{\"{#IP}\":\"$address\"}"
fi
i=`expr $i + 1`
done
echo -n "]}"
脚本测试
[root@zabbix-server zabbix]# bash ipjson.sh
{"data":[{"{#IP}":"192.168.99.12"},{"{#IP}":"192.168.99.22"},{"{#IP}":"192.168.99.50"},{"{#IP}":"192.168.99.55"},{"{#IP}":"192.168.99.99"}]}
fping 探测 IP 连通性
#!/bin/bash
case $2 in
icmppingloss)
icmppingloss=`fping -q -c3 "$1" 2>&1 |awk -F '[/ %]+' '{print $9}'`
echo $icmppingloss
;;
icmppingsec)
icmppingsec=`fping -q -c3 "$1" 2>&1 |awk -F '[/ %]+' '{print $16}'`
if [ -z "$icmppingsec" ];then
echo "-1"
else
echo $icmppingsec
fi
;;
icmpping)
icmpping=`fping -q -c3 "$1" 2>&1 |awk -F '=' '{print $2}' |awk -F '/' '{print $2}'`
if [ $icmpping = 0 ];then
echo "0"
else
echo "1"
fi
;;
esac
脚本测试
zabbix-agent配置
UnsafeUserParameters=1
UserParameter=fpingdiscovery,bash /etc/zabbix/ipjson.sh
UserParameter=fping[*],bash /etc/zabbix/fping.sh $1 $2
zabbix_get测试
zabbix_get -s 127.0.0.1 -k fpingdiscovery
自动发现
监控项原型
最新数据
(3)zabbix 批量监控网站 web code 状态
#!/bin/bash
web=('www.jd.com' 'www.taobao.com' 'www.baidu.com' 'http://192.168.99.185:5601/login' 'http://192.168.99.50:6989/zabbix/index.php')
function webdiscovery(){
length=${#web[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
printf '\n\t\t{'
printf "\"{#NAME}\":\"${web[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ','
fi
done
printf "\n\t]\n"
printf "}\n"
}
function web_site_code()
{
/usr/bin/curl -I -m 10 -o /dev/null -s -w %{http_code} "$1"
}
$1 $2
脚本测试
zabbix-agent 配置
UnsafeUserParameters=1
UserParameter=webdiscovery,bash /etc/zabbix/webcode.sh webdiscovery
UserParameter=web_site_code[*],bash /etc/zabbix/webcode.sh web_site_code $1
zabbix-get 测试
zabbix-agent -t 检查监控项是否正常
注意:创建监控项原型(键值[]中的数值必须大写,否则会报错如下)
Cannot create item: item with the same key "*********" already exists