zabbix针对业务端口的监控
思考:1. 我们需要知道我们的业务跑了哪些端口,比如:前置机跑在什么端口上面,交易核心跑在什么端口上面等等,总之,对我们要监控的端口进行汇总。
2.采用什么形式去监控端口呢?
我能想到的是:
a.从zabbix服务器端去做简单探测(simple check),这种方法就像我们的telnet,不需要去客户端做事情,看似简单;但是,问题来了,我要去自定义模板(template,每个host会去关联它),每个模板上要制作items,这样会产生大量的手工操作,如果说,我们线上总共用了1000个端口,我就需要在template里面添加一千项,每项上还要添加监控项,纯手工加! 这是其一,还要给每项添加告警,如果端口宕了得让它告警;再者,每台服务器所跑的端口不尽相同,当你把模板关联到其中一台服务器的时候会发现,大部分都是不需要监控的端口(因为机器本身就没启用)。所以,这种方法不可取!
b.在zabbix客户端上下功夫,让客户端去抓取我们要监控的端口,然后反馈给服务器端。这样貌似不错,那么我就去每个客户端的配置文件里面加监控脚本,每台服务器上跑的端口不一样,所以呢,每台服务器上的监控脚本不一样;这样,问题又来了,那么多服务器,总不能一台台加,对了,咱们有自动化工具啊,可是,每个服务器上要跑的脚本又不一样,不能统一分发,这也是个问题!此外,在zabbix服务器的web端,我还是需要去做上面一点里面提到的模板,工作量太大,不行!
c.综合上面两点,我发现,要克服的困难有两点:首先,我们制作模板不能全靠手工,其次,客户端上监控脚本必须一样,不然怎么批量分发?
既然如此,为何不这样:
让zabbix服务器自己去生成items!通过脚本扫描每台机器的端口,再通过对比,筛选出我们想要的端口,而不是去 每台服务器上一个个改脚本!就这么干!
监控过程描述:
1.让zabbix服务器自己生成items没那么神秘,因为zabbix从2.0版本之后开始支持discovers功能了,它可以自动发现服务器的分区,网卡这些不固定的监控项,默认情况下,网卡、分区的自动发现功能是内置的,所以不需要额外部署脚本;而端口监控,我写了一个脚本,结合discover功能,可以实现定期扫描服务器上的监听端口,自动添加、删除监控端口。
脚本如下:
#!/bin/bash
local_path=/usr/local/zabbix/etc/monitor_scripts
portarray=(`netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^*$/) print $NF}'|sort |uniq 2>/dev/null`)
length=${#portarray[@]}
printf "{\n"
printf'\t'"\"data\":["
for ((i=0;i
页:
[1]