环境介绍:
系统版本:cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
zabbix版本: rpm -qa | grep zabbix
zabbix-get-4.0.27-1.el7.x86_64
zabbix-web-mysql-4.0.27-1.el7.noarch
zabbix-web-4.0.27-1.el7.noarch
zabbix-release-4.0-2.el7.noarch
zabbix-server-mysql-4.0.27-1.el7.x86_64
zabbix-agent-4.0.27-1.el7.x86_64
[root@ansible-kvm zabbix]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
操作步骤:
1 写脚本 -> 2 配置zabbix_agent.conf并重启agent -> 3 zabbix_get测试 -> 4 web界面添加监控项
1 脚本:cat dis_tcpport.sh
#!/bin/bash
#portarray=(`netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`)
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"
2 # cat /etc/zabbix/zabbix_agentd.conf | grep -v ^$ | grep -v ^#
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agentd.d/*.conf
UserParameter=testkey,who | wc -l # 这是testuser登陆人数的key
UserParameter=tcp_state[*],netstat -ant|grep -c $1 # 这是tcp九种状态的被动key
UserParameter=testpasswd,md5sum /etc/shadow # 监控文件变化
UserParameter=tcpportlisten,/usr/lib/zabbix/dis_tcpport.sh "$1" # 添加此项
3 测试 得到下面数据即可 主机 #TCP_PORT 这个key 后面会用到
zabbix_get -s 127.0.0.1 -p 10050 -k tcpportlisten
{
"data":[
{"{#TCP_PORT}":"10050"},
{"{#TCP_PORT}":"10051"},
{"{#TCP_PORT}":"111"},
{"{#TCP_PORT}":"21"},
{"{#TCP_PORT}":"22"},
...
{"{#TCP_PORT}":"9100"},
{"{#TCP_PORT}":"9200"},
{"{#TCP_PORT}":"9300"},
{"{#TCP_PORT}":"9600"}
]
}
4 模板添加 先添加模板和 自动发现规则 --- 然后是item ----- 然后是 trigger
# 上面的截图 = 1不对 应该是0 另外 报警里面加上 #TCP_PORT的变量
# yinweinetstat 普通用户权限不够看所有端口,会提示权限不够 记得给 zabbix提权
chmod 660 /etc/sudoers
echo "zabbix ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers