zabbix5.2批量监控laihu3.0指定端口


主机名

ip

操作系统

服务

docker01

172.16.0.167

Centos7.6.1810

zabbix_agentd (daemon) (Zabbix) 5.2.5

docker02

172.16.0.112

docker容器

zabbix_server (Zabbix) 5.2.5+agent

一、服务端部署

说明:docker01使用rpm方式部署agent,docker02使用docker方式一键部署zabbix-server端

以下均在zabbix-server端上执行

docker run -dit  --name zabbix-mysql --network host --restart always -v /data/mysql_db/:/var/lib/mysql -v /etc/localtime:/etc/localtime -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix123" -e MYSQL_ROOT_PASSWORD="root123" mysql:5.7 --character-set-server=utf8 --collation-server=utf8_unicode_ci
 
docker run -v /etc/localtime:/etc/localtime -dit --restart=always --network host --name=zabbix-java-gateway  zabbix/zabbix-java-gateway:latest
 
docker run -dit --privileged=true --network host --mount source=zabbix-server-vol,target=/etc/zabbix -v /etc/localtime:/etc/localtime -v /usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts --name=zabbix-server --restart=always -e DB_SERVER_HOST="172.16.0.112" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix123" -e MYSQL_ROOT_PASSWORD="root123" -e ZBX_JAVAGATEWAY="172.16.0.112" --add-host zabbix-server:172.16.0.112 zabbix/zabbix-server-mysql:centos-latest
 
docker run -dit --privileged=true -v /etc/localtime:/etc/localtime --network host --name zabbix-web-nginx --restart=always -e DB_SERVER_HOST="172.16.0.112" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix123" -e MYSQL_ROOT_PASSWORD="root123" -e ZBX_SERVER_HOST="172.16.0.112" zabbix/zabbix-web-nginx-mysql:latest
 
docker run --name zabbix_agent_docker  --privileged=true --restart=always --network host -e ZBX_HOSTNAME="docker02" -e ZBX_SERVER_PORT="10051" -e ZBX_SERVER_HOST="172.16.0.112" -d zabbix/zabbix-agent

遇到的问题:部署出现过数据库少表的情况,可以到官方下载5.2源码中的mysql导入脚本重新导入一份即可,使用docker log -f 容器id查看相关容器日志

二、客户端部署

rpm -Uvh https://repo.zabbix.com/zabbix/5.2/rhel/7/x86_64/zabbix-release-5.2-1.el7.noarch.rpm

修改被监控端的zabbix_agent.conf配置文件,新增KEY值port.alert

UserParameter=port.alert,/usr/lib/zabbix/alertscripts/port_alert.sh

systemctl enable zabbix-agent

systemctl restart zabbix-agent

需要准备两个脚本,port_alert.sh为端口自发现脚本,port.conf为指定的监控端口号
 
[root@docker01 ~]# cd /usr/lib/zabbix/alertscripts/
[root@docker01 alertscripts]# pwd
/usr/lib/zabbix/alertscripts
[root@docker01 alertscripts]# ll
total 8
-rwxr-xr-x 1 root root 926 Feb 25 10:52 port_alert.sh
-rw-r--r-- 1 root root 220 Feb 25 07:06 port.conf
 
[root@docker01 alertscripts]# cat port_alert.sh 
#/bin/bash
CONFIG_FILE=/usr/lib/zabbix/alertscripts/port.conf
Check(){
    grep -vE '(^ *#|^$)' ${CONFIG_FILE} | grep -vE '^ *[0-9]+' &> /dev/null
    if [ $? -eq 0 ]
    then
        echo Error: ${CONFIG_FILE} Contains Invalid Port.
        exit 1
    else
        portarray=($(grep -vE '(^ *#|^$)' ${CONFIG_FILE} | grep -E '^ *[0-9]+'|awk '{print $1}'))
        servername=($(grep -vE '(^ *#|^$)' ${CONFIG_FILE} | grep -E '^ *[0-9]+'|awk '{print $2}'))
    fi
}
PortDiscovery(){
    length=${#portarray[@]}
    length1=${#servername[@]}
    printf "{\n"
    printf  '\t'"\"data\":["
    for ((i=0;i<$length;i++))
      do
         printf '\n\t\t{'
         printf "\"{#TCP_PORT}\":\"${portarray[$i]}\",\"{#SERVER_NAME}\":\"${servername[$i]}\"}"
         if [ $i -lt $[$length-1] ];then
                    printf ','
         fi
      done
    printf  "\n\t]\n"
    printf "}\n"
}
port(){
    Check
    PortDiscovery
}
port
 
 
[root@docker01 alertscripts]# cat port.conf 
6379 redis
80 nginx
8137 report-statistics
8128 conf
8013 register
8136 report-detail
8138 report-interface
8127 route
8085 data-center
8084 conf-view
3306 mysql
5060 opensips
8282 fileserver
8014 fs_cli
6060 freeswitch
 
配置文件port.conf每个端口号和服务名称为一行,每行的被监控端口可以有空格,空行和注释行#会被过滤

三、zabbix服务端测试及创建模板

测试成功,返回json格式的合法端口号和服务名称

新建模板:

新建自动发现规则:

键值为zabbix_agentd.conf中配置的key:port.alert参数

自动发现清单中新建监控项原型:

键值:net.tcp.listen[{#TCP_PORT}]

新的应用集:port-alert
 

触发器配置:

名称:{#SERVER_NAME} {#TCP_PORT} 端口已关闭,请检查 !!!

表达式:{Port Alert:net.tcp.listen[{#TCP_PORT}].last()}<>1

表达式<>1表示最后更新的值如果不为1则触发告警

停止相关服务测试:


adouk 2023年1月12日 10:04 收藏文档