主机服务端口状态监控

痛定思痛。 2021-12-22 21:19 409阅读 0赞

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

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

具体源代码(3.0.2版本):

  1. # cd /home/zabbix/zabbix-3.0.2/src/libs/zbxsysinfo/linux
  2. # cat net.c
  3. if (0 < (n = proc_read_tcp_listen("/proc/net/tcp", &buffer, &buffer_alloc)))
  4. {
  5. ret = SYSINFO_RET_OK;
  6. zbx_snprintf(pattern, sizeof(pattern), "%04X 00000000:0000 0A", (unsigned int)port);
  7. if (NULL != strstr(buffer, pattern))
  8. {
  9. listen = 1;
  10. goto out;
  11. }
  12. }

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

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

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

  1. #!/bin/sh
  2. res=`/bin/netstat -an|grep $1|grep LISTEN|wc -l`
  3. if [ "$res" -gt 0 ]
  4. then
  5. {
  6. echo 1
  7. }
  8. else
  9. {
  10. echo 0
  11. }
  12. fi

自定义key

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

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

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

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

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

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

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

自定义key值

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

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

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

  1. port.check[192.168.12.12,9170]

监控成功

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

转载于:https://www.cnblogs.com/tonnytangy/p/10312717.html

发表评论

表情:
评论列表 (有 0 条评论,409人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Nginx服务状态监控

    [Nginx服务状态监控][Nginx]   在Nginx的插件模块中有一个模块stub\_status可以监控Nginx的一些状态信息,默认安装可能没有这个模块,手动编