有些服务器上开启的服务端口非常多 如果一个个添加监控会很繁琐,于是想到了自动发现规则 自动发现服务器上的服务端口并进行监控。
一、配置脚本
1.在被监控的服务器上创建自动发现端口脚本,存放在/etc/zabbix/script:
[root@centos6 script]# vim /etc/zabbix/script/discovery_tcpport.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(){
#ss -tnlp |grep 'users' |awk -F ':' "/:$1/ {print \$NF}" |cut -d',' -f1 |sed 's@[(,"]@@g' |uniq
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
[root@centos6 script]# chown zabbix.zabbix discovery_tcpport.sh
[root@centos6 script]# chmod a+x discovery_tcpport.sh
2.本地测试脚本
[root@centos6 script]# ./discovery_tcpport.sh
{
"data":[
{"{#TCP_PORT}":"10050"},
{"{#TCP_PORT}":"22"},
{"{#TCP_PORT}":"3306"},
{"{#TCP_PORT}":"80"}
]
}
二、修改zabbix客户端配置文件,增加参数
1.修改配置文件,增加参数
[root@centos6 zabbix_agentd.d]# vim /etc/zabbix/zabbix_agentd.d/userparameter_sa_linux.conf
UserParameter=discovery.tcpport[*],/etc/zabbix/script/discovery_tcpport.sh $1 $2
2.重启zabbix客户端
[root@centos6 script]# service zabbix-agent restart
Shutting down Zabbix agent: [ OK ]
Starting Zabbix agent: [ OK ]
三、服务端测试连通
在zabbix-server端,使用zabbix_get命令来获取agent端的脚本参数:
[root@centos6 ~]# zabbix_get -s 192.168.10.137 -k discovery.tcpport
{
"data":[
{"{#TCP_PORT}":"10050"},
{"{#TCP_PORT}":"22"},
{"{#TCP_PORT}":"3306"},
{"{#TCP_PORT}":"80"}
]
}
四、添加自动发现规则
1.创建发现规则
在自建或已有模板中创建自动发现规则:
2.配置发现规则名称
3.配置监控项原型
4.配置触发器
创建完成
五、进行测试
在agent服务器中,用nginx开启新的端口8080服务
[root@centos6 conf.d]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 26909/zabbix_agentd
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1356/mysqld
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 11462/nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11462/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1578/sshd
tcp 0 0 :::10050 :::* LISTEN 26909/zabbix_agentd
tcp 0 0 :::22 :::* LISTEN 1578/sshd
在监控页面上可以看到新端口已经添加进来并监控了
现在把端口8080关闭,则出现端口断开警告: