最近在部署zabbix监控 有些服务器上开启的服务端口非常多 如果一个个添加监控会很繁琐,于是想到了自动发现规则 自动发现服务器上的服务端口并进行监控。
在zabbix客户端服务器上进行操作
1)编写端口自动发现的脚本
cat /usr/local/zabbix/scripts/discover_port.sh
#!/bin/bash
portarray=(`sudo netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`)
length=${#portarray[@]}
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"
chmod +x discovertcpport.sh ##增加执行权限
2)配置zabbix客户端的配置文件
在最后添加
tail -5 /usr/local/zabbix/etc/zabbix_agentd.conf
##自动发现端口并监控
UserParameter=tcpportlisten,/bin/bash /usr/local/zabbix/scripts/discover_port.sh "$1"
3)重启zabbix_agent服务
/etc/init.d/zabbix_agentd restart
4)在zabbix客户端进行脚本测试
sh /usr/local/zabbix/scripts/discover_port.sh
{
"data":[
{"{#TCP_PORT}":"10050"},
{"{#TCP_PORT}":"10509"},
{"{#TCP_PORT}":"111"},
{"{#TCP_PORT}":"12871"},
{"{#TCP_PORT}":"228"},
{"{#TCP_PORT}":"25"},
{"{#TCP_PORT}":"3001"},
{"{#TCP_PORT}":"32555"},
{"{#TCP_PORT}":"38312"},
{"{#TCP_PORT}":"8001"},
{"{#TCP_PORT}":"8002"},
{"{#TCP_PORT}":"8003"},
{"{#TCP_PORT}":"8004"},
{"{#TCP_PORT}":"8005"},
{"{#TCP_PORT}":"9000"}
]
}
5)在zabbix服务端进行测试
/usr/local/zabbix/bin/zabbix_get -s 10.128.10.93 -k tcpportlisten
{
"data":[
{"{#TCP_PORT}":"10050"},
{"{#TCP_PORT}":"10509"},
{"{#TCP_PORT}":"111"},
{"{#TCP_PORT}":"12871"},
{"{#TCP_PORT}":"228"},
{"{#TCP_PORT}":"25"},
{"{#TCP_PORT}":"3001"},
{"{#TCP_PORT}":"32555"},
{"{#TCP_PORT}":"38312"},
{"{#TCP_PORT}":"8001"},
{"{#TCP_PORT}":"8002"},
{"{#TCP_PORT}":"8003"},
{"{#TCP_PORT}":"8004"},
{"{#TCP_PORT}":"8005"},
{"{#TCP_PORT}":"9000"}
]
}
测试通过后再zabbixweb页面上进行配置
创建自动发现规则
创建监控项原型
创建 触发器原型
6)查看是否成功
在配置---主机----触发器中进行查看 说明已经成功
问题总结
5.1.服务器测试与客户端通信时:
zabbix sudo: no tty present and no askpass program specified
解决:
zabbix客户端修改zabbix_agentd.conf:
AllowRoot=1
重启客户端:
# /etc/init.d/zabbix_agentd restart
脚本添加权限及修改属主:
# chown zabbix. discover_port.sh
# chmod +x discover_port.sh
5.2.测试通信报错2:
zabbix sudo: sorry, you must have a tty to run sudo
解决:
vi /etc/sudoers (最好用visudo命令)
注释掉 Default requiretty 一行
#Default requiretty