主机服务端口状态监控

尝试一:用zabbix自带的模版net.tcp.listen

直接新建监控项,这种方式是直接去读取/proc/net/tcp,但取不到端口状态

具体源代码(3.0.2版本):

# cd /home/zabbix/zabbix-3.0.2/src/libs/zbxsysinfo/linux
# cat net.c
 if (0 < (n = proc_read_tcp_listen("/proc/net/tcp", &buffer, &buffer_alloc)))
                {
                        ret = SYSINFO_RET_OK;

                        zbx_snprintf(pattern, sizeof(pattern), "%04X 00000000:0000 0A", (unsigned int)port);

                        if (NULL != strstr(buffer, pattern))
                        {
                                listen = 1;
                                goto out;
                        }
                }

从主机侧查看端口是正常listen

原因是内核会频繁的写/proc/net/tcp这个文件,导致读取不正常

 

尝试二:通过在本机自定义脚本

#!/bin/sh
res=`/bin/netstat -an|grep $1|grep LISTEN|wc -l`
if [ "$res" -gt 0 ]
then
{  
  echo 1
}
else
{
  echo 0
}
fi

自定义key

UserParameter=jiankong,/etc/zabbix/scripts/netstat.sh 9170

重启agent后,通过在proxy端,用zabbix_get获取数据一直为0

且agent日志总是提示没有该脚本执行权限

脚本已给与755,在zabbix用户下面手动执行结果正常未1,且配置文件中已定义UnsafeUserParameters=1

 

尝试三:在proxy端自定义脚本

# cd /home/zabbix/zabbix-agent/etc/scripts
# cat check_port_status.sh
tcping -t 2  $1 $2 | awk '{print $4 }'|awk -F"." '{print $1}'

tcping是个非常好的端口监控工具,但使用时需要注意,一定要带-t参数,不然如果端口不通,会处于一直等待状态;另外需要注意的是-t的时间必须小于zabbix_get执行的超时时间(一般建议设置<5s)

自定义key值

# cd /home/zabbix/zabbix-agent/etc/zabbix_agentd.conf.d
# cat port_check.conf 
UserParameter=port.check[*],/home/zabbix/zabbix-agent/etc/scripts/check_port_status.sh $1 $2

通过master端的zabbix_get执行获取结果正常

界面新增监控项,带入键值

port.check[192.168.12.12,9170]

监控成功

该方法可以通过一个脚本,监控任何主机的端口信息(只要网络能达)

 

posted @ 2019-01-24 09:35  tonnytangy  阅读(1056)  评论(0编辑  收藏  举报