Zabbix实现批量监控端口状态的方法
在监控生产环境的服务的时候,通常需要对多个端口进行监控,如果我们手动一个一个的添加,这将是一件很麻烦的事情,为了减少这样的情况,我们采用批量添加监控端口的方法,下面小编给大家带来了zabbix批量监控端口状态的方法,一起看看吧
引言
在监控生产环境的服务的时候,通常需要对多个端口进行监控,如果我们手动一个一个的添加,这将是一件很麻烦的事情,为了减少这样的情况,我们采用批量添加监控端口的方法,这是非常常见的需求,zabbix也是支持这种方式的,需要使用zabbix的Discovery功能来实现,下面小编就给大家分享一下批量添加端口的占用。
使用Zabbix监控如何监控服务器端口状态,大概的流程:zabbix监控服务自带端口监控的监控项,所以需要我们自己手动定义所监控的item,客户端获取的端口列表通过agent传送到服务端,
只需在服务端进行端口监控模板配置,然后自定义监控图形,添加监控项即可!
下面就来给大家分享一下批量添加端口的方法!
第一:自动扫描端口并监控报警
1.编写脚本扫描端口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | vim check_port.py #!/usr/bin/env python import os import json portlist = [] new_port_list = [] port_dict = { "data" : None } cmd = '''netstat -tnlp|egrep -i "$1"|awk {'print $4'}|''' cmd + = '''awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort -n| uniq 2>/dev/null''' auto_localport = os.popen(cmd).readlines() for ports in auto_localport: new_port = ports.strip() portlist.append(new_port) for port in portlist: pdict = {} pdict[ "{#TCP_PORT}" ] = port new_port_list.append(pdict) port_dict[ "data" ] = new_port_list jsonStr = json.dumps(port_dict,sort_keys = True ,indent = 4 ) #python3 #print(jsonStr) #python2 print jsonStr |
脚本的作用就是从被监控的服务器上面采集数据,并且转换为特定的字典格式,这种格式是zabbix可以识别的一种数据字典格式,使用python来编写相对shell来说更加便捷。
将脚本放在客户端 /usr/lib/zabbix/alertscripts 路径下面
2.修改被监控端的zabbix_agent.conf配置文件
1 2 | UnsafeUserParameters = 1 UserParameter = tcpportlisten, / usr / lib / zabbix / alertscripts / check_port.sh |
重启客户端服务
3.服务端测试
执行命令:zabbix_get -s 192.168.92.9 -p 10050 -k tcpportlisten
出现上面格式的数据,说明脚本编写成功!!!
第二:页面配置
1.添加模板
2.添加自动发现规则
在上新创建的模板中点击-->自动发现规则-->然后选择创建发现规则
说明:上面的key 一定要和配置文件中的key 保持一致。就是我们在zabbix_agent.conf文件中添加的两行代码中的第二行中添加的参数key
3.创建监控项原型
上面中的键值 中的 #TCP_PORT} 和我们的脚本 check_port.sh 中的参数一致
4.创建触发器类型
添加按钮进入-->选择原型
注意这里的表态示count(#3,0,eq) > 1表示最近3次的返回值为0,这个条件触发一次则报警.
配置到这我们就完成了,zabbix自动扫描并监控的功能.
第三:批量添加指定端口
有时候我们不需要监控自动扫描出来的所有的端口,这些端口需要我们指定,这个需求也是比较常见的,有了上面的基础,实现这个东西其实是比较简单,其实仔细看看脚本就能实现。
要实现这个功能我们只需要,将脚本替换成下面内容即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/usr/bin/env python import json port_list = [ "80" , "10050" , "3306" , "22" , "8080" ] new_port = [] port_dict = { "data" : None } for port in port_list: pdict = {} pdict[ "{#TCP_PORT}" ] = port new_port.append(pdict) port_dict[ "data" ] = new_port jsonStr = json.dumps(port_dict,sort_keys = True ,indent = 4 ) #python3 #print(jsonStr) #python2 print jsonStr |
我们只需要在port_list中添加想要监控的端口号即可!注意格式,以逗号隔开!
总结
以上所述是小编给大家介绍的Zabbix实现批量监控端口状态的方法,希望对大家有所帮助