Zabbix自动发现Linux服务器的端口并监控


0,适用于服务器比较多,并启动了很多端口的情况。避免手动一个一个添加。


1,zabbix客户端配置

  • 添加zabbix用户为sudo用户,服务器远程执行脚本用
    1
    echo "zabbix  ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
  • 修改zabbix配置文件,允许root用户执行脚本
    1
    echo "AllowRoot=1" >> /etc/zabbix/zabbix_agentd.conf
  • 编写获取端口的脚本
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    mkdir /etc/zabbix/scripts/

    vim /etc/zabbix/scripts/discover_port.sh
    #!/bin/bash
    portarray=(`ss -tnlp |awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`)
    length=${#portarray[@]}

    function zabbix_json(){
    printf "{\n"
    printf '\t'"\"data\":["
    for ((i=0;i<$length;i++))
    do
    printf '\n\t\t{'
    printf "\"{#TCP_PORT}\":\"${portarray[$i]}\"}"
    if [ $i -lt $[$length-1] ];then
    printf ','
    fi
    done
    printf "\n\t]\n"
    printf "}\n"
    }

    function check(){
    sudo ss -tnlp |grep 'users' |awk -F ':' "/:$1/ {print \$NF}" |grep -oE '\".*\"' |sort |uniq |head -n1 |sed 's/"//g' |awk -F ',' '{print $1}'
    }

    [[ $1 = check ]] && $* || zabbix_json
  • 修改脚本权限
    1
    2
    chown zabbix:zabbix /etc/zabbix/scripts/discover_port.sh
    chmod +x /etc/zabbix/scripts/discover_port.sh
  • 配置获取服务器端口键值配置文件
    1
    2
    cat /etc/zabbix/zabbix_agentd.d/auto_discover_port.conf 
    UserParameter=discovery.tcpport[*],/etc/zabbix/scripts/discover_port.sh $1 $2
  • 重启zabbix服务
    1
    systemctl restart zabbix-agent.service

2,本地执行脚本测试

截图_选择区域_20220320095106.png


3,zabbix服务端执行脚本测试

截图_选择区域_20220320095404.png


4,都可以成功执行了,开始进行zabbix自动发现配置

配置–>模板–>选择Template OS Linux by Zabbix agent模板–>自动发现规则–>创建发现规则
截图_选择区域_20220320095842.png

  • 接下来在创建好的自动发现规则里操作
    监控项原型–>创建监控项原型
    截图_选择区域_20220320100425.png
  • 再来创建第二个监控项原型
    截图_选择区域_20220320100558.png
  • 最后创建触发器
    截图_选择区域_20220320100835.png
  • 都创建好之后查看你配置这台zabbix的监控项
    截图_选择区域_20220320101120.png

5,可以看到服务器上启动的端口都监控起来了,如果想排除掉某些端口,只需要改一下脚本就行

  • 如果遇到奇奇怪怪的问题,比如服务器获取不了客户端信息的情况,检查你的selinux看看