我们搭建了***,主要是利用公网地址上tcp端口映射进行连接,从而达到访问的目的。但是有时候,网络不稳定,或者是公网地址震荡异常,导致***连接异常,所以我们很有必要监控tcp端口的连接的时延情况,当时延大于1000ms时,会严重的影响到使用体验,这时就要排查网络原因了。

    如果能利用zabbix监控tcp端口的情况,并统计,当达到一定阈值的时候就告警,方便及时排查。


一、思路

    1.linux上,可以使用nmap程序扫描端口之外,还可以统计大致的扫描结果,可以利用每次扫描端口的耗时来衡量网络连接质量,例如时延;

    2.编写shell脚本,定期检测nmap扫描结果,截取耗时的字段,生成监控项,衡量时延

    3.zabbix上可以使用外部检查的方式使用自定义脚本

    4.zabbix上利用脚本,定期检查,生成图形和告警


二、脚本编写

    使用nmap程序,获取指定端口连接信息

nmap -Pn xxxx.xxxx.xxxx.xxxx -pxxxxx

获取信息如下所示

image.png

其中(0.0081s latency),指的就是监测指定端口扫描的时延,这个就是我们需要获取的信息

为了获取指定信息,我们就必须使用正则表达式和相关的文本处理,按照如下方式进行

nmap -Pn xxxx.xxxx.xxxx.xxxx -pxxx|grep  'Host'  |awk '{print $4}'|sed  's/^(//'|sed 's/s$//'

完成处理后,显示结果就是我们需要的信息

image.png

按照以上,就可以编写脚本了,记得加上可执行权限


zabbix上的外部脚本是以zabbix用户身份运行的,而nmap的运行需要root权限,这时我们需要必须使用visudo让zabbix用户能够以root权限运行nmap,网上关于visudo的教程很多,本文不再说明
在20行下添加

zabbix ALL=(root)/usr/bin/nmap

image.png


完成脚本编写后,将脚本放在/usr/lib/zabbix/externalscripts/路径下


三、监控实现

在zabbix上,配置监控项,使用外部检查的方式

image.png

注意,信息类型改为浮点,而非数字;更新间隔推荐60秒以上


配置触发器,当延迟超过1000ms,则开始报警

触发器定义方式为在平均5分钟内检查到监控项的平均值大于1(1000ms)时告警

image.png

最后,定义图形,如下所示

image.png


最后完成效果如下所示

image.png