zabbix 监控项自动发现过滤_通过Zabbix的自动发现(规则)自动创建监控项

本文介绍了如何使用Zabbix的自动发现规则创建监控项,并通过配置脚本返回符合格式的JSON数据。重点在于理解如何定义监控项原型、触发器原型,以及在被监控端配置返回zabbix所需的JSON数据,包括读取和转换ports.ini文件成ports.json,以实现服务和端口的自动监控。
摘要由CSDN通过智能技术生成

下图是一个已配置并启用的自动发现规则:

应用到165.194这个主机后,自动发现的监控项:

服务端配置创建Template

创建Discovery rule

键值readPorts跟被监控端配置的参数有关,下面再提。创建监控项原型

宏引用符号{ #SERVICE }和{ #TCP_PORT }跟被监控端返回的json数据有关。net.tcp.listen[]表示监听目标机器的端口状态,返回值为0或1,0表示Down,1表示Up。另外,$1表示键值里的第一个参数,即。

创建触发器原型

添加完监控项和触发器原型的样子:

添加主机并关联此模板

此略。

被监控端配置

首先,看一下/etc/zabbix目录下的文件。scripts目录是新加的,zabbix_agentd.conf也作了修改。

使用自动发现功能,需要返回符号zabbix要求的json数据:

例如:1

2

3

4

5

6

7

8

9

10

11

12{

"data": [

{

"{#SERVICE}": "phjd_mysql",

"{#TCP_PORT}": "28001"

},

{

"{#SERVICE}": "philips_taxfree_tuangou_payment_management",

"{#TCP_PORT}": "16200"

}

]

}

其形式大致如下:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17{

"data": [

{

"{#KEY01}": "value01_01",

"{#KEY02}": "value01_02",

"{#KEY03}": "value01_03",

...

},

{

"{#KEY01}": "value02_01",

"{#KEY02}": "value02_02",

"{#KEY02}": "value02_03",

...

},

...

]

}

readPorts.sh脚本的内容很简单,就是读取已准备好的json数据文件ports.json,作为返回给zabbix server的值:1

2

3

4

5mypath=$(cd `dirname $0`; pwd)

cat $mypath/ports.json

为了返回给server端,需要再zabbix_agentd.conf中配置:

这样,server端就可以使用readPorts这个键值,以获取写在ports.json中的数据。readPorts下面定义的getPorts、getAllPorts是另外两个可用的自定义键值。

自动发现需监控的服务/端口,难点不在于读取,而在于自动生成json数据文件。此处的ports.json是根据ports.ini转换而来的。

ports.ini文件需人工填写:

getPorts.py脚本如下,用于转换ports.ini为ports.json:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28#!/usr/bin/env python

#coding:utf-8

import os, json, re

mypath = os.path.dirname(os.path.realpath(__file__))

port_list = []

port_dict = {"data":None}

with open('%s/ports.ini' % mypath, 'r') as f:

for line in f.readlines():

line = line.strip()

if line:

try:

port_srv = line.split(':')

port_list.append({"{#TCP_PORT}": port_srv[1].strip(),

"{#SERVICE}": port_srv[0].strip()})

except:

pass

port_dict["data"] = port_list

json_str = json.dumps(port_dict, sort_keys=True, indent=4)

# json_str已是json字符串,但每行尾部有一个多余的空格,zabbix不接受,须删除行尾空格

p = re.compile("s+$")

for line in json_str.split('n'):

ss = re.sub(p, "", line)

print ss

转换ports.ini为json形式:

至于getAllPorts.py,它的功能是直接返回主机上实际开放的端口数据:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值