前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >zabbix 自动发现

zabbix 自动发现

作者头像
Kevin song
发布2021-09-15 10:41:36
1.3K0
发布2021-09-15 10:41:36
举报

前言

很多情况下自定义监控项需要手动创建,重复的工作耗时耗力,全面自动化的时代如何实现同一类型的监控项批量添加。zabbix提供了自动发现的功能,实现监控项批量添加。

实现思路

  1. 通过脚本获取动态key并将key转换成zabbix识别的 json 格式
  2. 配置 zabbix agent 调用自定义脚本
  3. 创建自动发现规则获取json格式动态key数据
  4. 添加监控项原型,传入动态key变量
  5. 动态监控项生成(按照自动发现周期失效的key到期会自动删除)

(1)zabbix 监控linux系统端口状态

批量发现存活端口转换json格式

代码语言:javascript
复制
#!/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 端口监控

代码语言:javascript
复制
#!/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配置

代码语言:javascript
复制
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地址列表

代码语言:javascript
复制
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 格式

代码语言:javascript
复制
#!/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 连通性

代码语言:javascript
复制
#!/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配置

代码语言:javascript
复制
UnsafeUserParameters=1
UserParameter=fpingdiscovery,bash /etc/zabbix/ipjson.sh
UserParameter=fping[*],bash /etc/zabbix/fping.sh $1 $2

zabbix_get测试

代码语言:javascript
复制
zabbix_get    -s   127.0.0.1  -k fpingdiscovery

自动发现

监控项原型

最新数据

(3)zabbix 批量监控网站 web code 状态

代码语言:javascript
复制
#!/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 配置

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源搬运工宋师傅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NAT 网关
NAT 网关(NAT Gateway)提供 IP 地址转换服务,为腾讯云内资源提供高性能的 Internet 访问服务。通过 NAT 网关,在腾讯云上的资源可以更安全的访问 Internet,保护私有网络信息不直接暴露公网;您也可以通过 NAT 网关实现海量的公网访问,最大支持1000万以上的并发连接数;NAT 网关还支持 IP 级流量管控,可实时查看流量数据,帮助您快速定位异常流量,排查网络故障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档