Zabbix批量添加linux服务器端口监控

监控生产环境的服务时候,通常需要对多个端口进行监控,如果手动一个一个添加,这样则会台麻烦,这里可以选择批量添加端口监控,对于zabbix是支持的,需要使用zabbix的Discovery功能实现。

一、自动扫描端口并监控报警

  1. 编写脚本:check_port.py

脚本的作用就是从被监控的服务器上面采集数据,然后转换为特定的字典格式,这种格式是zabbix可以识别的一种数据字典格式,使用python来编写相对shell来说更加便捷

在被监控的客户端中的/usr/local/zabbix/shell路径下写入check_port.py脚本
在这里插入图片描述

#!/usr/bin/env python  
#coding:utf-8  
   
import os, json  
   
port_list=[]  
port_dict={"data":None}  
cmd='''''netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort |uniq   2>/dev/null'''  
local_ports=os.popen(cmd).readlines()  
   
for port in local_ports:  
    pdict={}  
    pdict["{#TCP_PORT}"]=port.replace("\n", "")  
    port_list.append(pdict)  
   
port_dict["data"]=port_list  
jsonStr = json.dumps(port_dict, sort_keys=True, indent=4)  
   
print jsonStr

注:给新建脚本赋权限:

[root@localhost shell]# chmod +x check_port.py 
  1. 修改被监控端的zabbix_agent.conf配置文件

在配置文件中更改:

[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf 
287 UnsafeUserParameters=1
296 UserParameter=tcpportlisten,/usr/local/zabbix/shell/check_port.py
  1. 重启zabbix-agent服务
[root@localhost ~]# systemctl restart zabbix-agent.service
  1. 在zabbix的server端测试
[root@localhost ~]# zabbix_get -s 192.168.88.137 -p 10050 -k tcpportlisten

出现下面则说明脚本运行成功
在这里插入图片描述
注:如果出现zabbix-get:command not found…,则需要安装zabbix-get服务

[root@localhost ~]# rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm   #配置yum源
[root@localhost ~]# yum install zabbix-get.x86_64

二、页面配置

  1. 添加模板
    在这里插入图片描述

  2. 添加自动发现规则

在新建的模板中的自动发现规则,选择创建发现规则

在这里插入图片描述

在这里插入图片描述
上面中的key一定要和配置文件中的key保持一致,这是在zabbix_agent.conf中添加两行代码中第二行添加的参数key

  1. 创建监控原型

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
上面中键值的{#TCP_PORT}和脚本check_port.py中的参数一致

  1. 添加触发器类型

在这里插入图片描述

在这里插入图片描述

注意上面的表达式中的count(#3,0,eq)>1表示最近3次的返回值为0,这个条件出发一次则报警

配置完这里,就完成了zabbix自动扫描并监控的功能

三、批量添加监听指定端口

有时候不需要监控自动扫描出来的所有端口,只需要监控指定的端口,如需要实现这个功能,只需要将脚本替换成下面内容即可:

#!/usr/bin/env python
#coding:utf-8
import os, json
portlist=["3306",
        "80",
        "22"]
port_list=[]
port_dict={"data":None}
#cmd='''netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort |uniq   2>/dev/null'''
#local_ports=os.popen(cmd).readlines()
for port in portlist:
	pdict={}
	pdict["{#TCP_PORT}"]=port
        #pdict["{#TCP_PORT}"]=port.replace("\n", "")
	port_list.append(pdict)
port_dict["data"]=port_list
jsonStr = json.dumps(port_dict, sort_keys=True, indent=4)
print jsonStr

将check_port.py内容替换成以上代码,就可以实现批量监控指定端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值