zabbix 实现批量监控端口状态 批量监控无固定端口的进程服务状态

您所在的位置:网站首页 形容桃花的词语四字成语 zabbix 实现批量监控端口状态 批量监控无固定端口的进程服务状态

zabbix 实现批量监控端口状态 批量监控无固定端口的进程服务状态

2024-07-09 12:53:17| 来源: 网络整理| 查看: 265

在监控生产环境的服务的时候,通常需要对多个端口进行监控,如果我们手动一个一个的添加,这将是一件很麻烦的事情,为了减少这样的情况,我们采用批量添加监控端口的方法,这是非常常见的需求,zabbix也是支持这种方式的,需要使用zabbix的Discovery功能来实现。

使用zabbix监控如何监控服务器端口状态,大概的流程:zabbix监控服务自带端口监控的监控项,所以需要我们自己手动定义所监控的item,客户端获取的端口列表通过agent传送到服务端。

只需在服务端进行端口监控模板配置,然后自定义监控图形,添加监控项即可!

下面就给大家讲解一下批量添加端口的方法。

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

1. 编写脚本扫描端口

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来说更加便捷。

在/etc/zabbix/zabbix_agentd.d/下创建目录externalscripts

mkdir -p /etc/zabbix/zabbix_agentd.d/externalscripts

将脚本放在客户端 /etc/zabbix/zabbix_agentd.d/externalscripts 路径下面。并赋予执行权限。

[root@mysql-master externalscripts]# chmod +x check_port.py [root@mysql-master externalscripts]# ll -a check_port.py -rwxr-xr-x. 1 root root 672 Jul 1 01:25 check_port.py

 

2. 在 /etc/zabbix/zabbix_agentd.d/ 下创建 userparameter_checkport.conf 文件,并编辑。内容如下:

[root@mysql-master zabbix_agentd.d]# more userparameter_checkport.conf UserParameter=tcpport.listen,/etc/zabbix/zabbix_agentd.d/externalscripts/check_port.py

敢这么做是因为:

通常在zabbix_agentd.conf文件中有这段代码 include zabbix_agentd.d/*.conf。(如果注释掉的话就解除注释)

重启客户端服务。

[root@mysql-master ~]# systemctl restart zabbix-agent.service

3. 服务端测试

执行命令: zabbix_get -s 192.168.158.141 -p 10050 -k tcpport.listen

会发现zabbix报错,报错信息:(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)

解决方法:

zabbix_agentd端执行命令

chmod +s /bin/netstat

服务端再次使用zabbix_get 测试,便不会有报错信息。

 

出现上面格式的数据,说明脚本编写成功!!!

如果客户端对check_port.py赋权方式采用的 chmod u+x check_port.py  即-rwxr--r-- 则,在服务端zabbix_get进行测试时,会报没有权限。如下所示:

[root@zabbix_nginx ~]# zabbix_get -s 192.168.158.141 -p 10050 -k tcpport.listen sh: /etc/zabbix/zabbix_agentd.d/externalscripts/check_port.py: Permission denied

 

 

二 页面配置

1. 创建端口监控专用主机群组

配置 > 主机群组 > 创建主机群组

2. 创建模板

配置 > 模板 > 创建模板

 

3. 添加自动发现规则

在上面创建的模板中点击 ----> 自动发现规则 ----> 然后选择创建发现规则

 

 

 

说明:上面的key 一定要和监控客户端配置文件中的 key 保持一致。

4. 创建监控项原型

创建自动发现规则后,点击该规则下的 “监控项原型” ----> 创建监控项原型

 

上面中的键值中的 {#TCP_PORT} 和我们的脚本 check_port.py 中的参数一致

5. 创建触发器原型

其中,表达式详情如图:

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

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

 

三 将端口监控模板链接到相关主机

将端口监控模板链接到相关主机上即可

 

配置到这里我们就完成了,zabbix自动扫描端口并监控的功能。

报警效果:

 

扩展1:

批量添加指定端口

有时候我们不需要监控自动扫描出来的所有端口,要监控的这些端口需要我们指定,这个需求也是比较常见的,有了上面的基础,实现这个东西其实是比较简单,其实仔细看看脚本就能实现。

要实现这个功能我们只需要,将脚本替换成下面的内容即可(以只监控8080,3306两个端口为例):

#!/usr/bin/env python import json portlist = ["8080","3306"] 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 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

 

扩展2 自动发现批量监测指定端口方案优化

前面的方式以及扩展1的报警效果都是下面这个样子:

而我们优化后想要的报警效果则是这样的:

(报警信息上很明了的指明是哪台机器上的哪个服务挂了)

 

要实现这样的效果,那么我们要理清思路:

实现上面效果,我们从zabbix客户端传数据到zabbix服务端,就要传两个变量参数,一个是端口,另一个是端口对应的服务

 

下面开启优化之旅:

1 对 check_port.py 脚本进行优化

check_port.py 脚本优化后内容如下:

#!/usr/bin/env python #coding:utf-8 import json total_dict={"data":[{"{#TCP_PORT}":"3005","{#SERVICE_NAME}":"空气质量"},{"{#TCP_PORT}":"8009","{#SERVICE_NAME}":"自行车"},{"{#TCP_PORT}":"3118","{#SERVICE_NAME}":"实时公交"},{"{#TCP_PORT}":"3008","{#SERVICE_NAME}":"城市书房"},{"{#TCP_PORT}":"7001","{#SERVICE_NAME}":"城市图书馆"},{"{#TCP_PORT}":"3018","{#SERVICE_NAME}":"停车场"}]} jsonStr = json.dumps(total_dict,sort_keys=True,indent=4,ensure_ascii=False) #python3 #print(jsonStr) #python2 print jsonStr

或者

#!/usr/bin/env python #coding:utf-8 import json total_dict={"data":[ {"{#TCP_PORT}":"3005","{#SERVICE_NAME}":"空气质量"}, {"{#TCP_PORT}":"8009","{#SERVICE_NAME}":"自行车"}, {"{#TCP_PORT}":"3118","{#SERVICE_NAME}":"实时公交"}, {"{#TCP_PORT}":"3008","{#SERVICE_NAME}":"城市书房"}, {"{#TCP_PORT}":"7001","{#SERVICE_NAME}":"城市图书馆"}, {"{#TCP_PORT}":"3018","{#SERVICE_NAME}":"停车场"} ]} jsonStr = json.dumps(total_dict,sort_keys=True,indent=4,ensure_ascii=False) #python3 #print(jsonStr) #python2 print jsonStr

 

上面python脚本中total_dict 字典的值写在一行不好看出来,其实total_dict的值直观起来看如下图:

执行check_port.py效果如图:

2. 优化 “Template Ports Discovery”模板的 自动发现规则 Template Ports Discovery

2.1 优化 监控项原型

2.2 优化 触发器原型

3 . 将优化后的自动发现指定端口模板链接到某一台主机上比如:192.168.158.141

链接后,

在192.168.158.141 监控项列表可看到自动增加如下监控项:

在192.168.158.141 触发器列表可看到自动增加如下触发器:

如果192.168.158.141根本不存在上面指定的端口或上面指定的端口挂了,就会触发报警。

报警效果如图:

 

扩展3 自动发现批量监测指定进程服务方案优化(对于没有固定端口的服务可采用此方式)

进程服务发现脚本 check_proc.py

#!/usr/bin/env python #coding:utf-8 import json total_dict={"data":[ {"{#CMDLINE}":"accountinfo-provider","{#SERVICE_NAME}":"accountinfo-provider"}, {"{#CMDLINE}":"account-provider","{#SERVICE_NAME}":"account-provider"}, {"{#CMDLINE}":"account-user-provider","{#SERVICE_NAME}":"account-user-provider"}, {"{#CMDLINE}":"account-userSeq-provider","{#SERVICE_NAME}":"account-userSeq-provider"}, {"{#CMDLINE}":"loginLogger-provider","{#SERVICE_NAME}":"loginLogger-provider"} ]} jsonStr = json.dumps(total_dict,sort_keys=True,indent=4,ensure_ascii=False) #python3 #print(jsonStr) #python2 print jsonStr

userparameter_checkproc.conf 文件内容:

自动发现规则:

监控项原型优化:

 

触发器原型优化:



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭