zabbix 监控项自动发现过滤_通过Zabbix的自动发现(规则)自动创建监控项
下圖是一個(gè)已配置并啟用的自動(dòng)發(fā)現(xiàn)規(guī)則:
應(yīng)用到165.194這個(gè)主機(jī)后,自動(dòng)發(fā)現(xiàn)的監(jiān)控項(xiàng):
服務(wù)端配置創(chuàng)建Template
創(chuàng)建Discovery rule
鍵值readPorts跟被監(jiān)控端配置的參數(shù)有關(guān),下面再提。創(chuàng)建監(jiān)控項(xiàng)原型
宏引用符號(hào){ #SERVICE }和{ #TCP_PORT }跟被監(jiān)控端返回的json數(shù)據(jù)有關(guān)。net.tcp.listen[]表示監(jiān)聽(tīng)目標(biāo)機(jī)器的端口狀態(tài),返回值為0或1,0表示Down,1表示Up。另外,$1表示鍵值里的第一個(gè)參數(shù),即。
創(chuàng)建觸發(fā)器原型
添加完監(jiān)控項(xiàng)和觸發(fā)器原型的樣子:
添加主機(jī)并關(guān)聯(lián)此模板
此略。
被監(jiān)控端配置
首先,看一下/etc/zabbix目錄下的文件。scripts目錄是新加的,zabbix_agentd.conf也作了修改。
使用自動(dòng)發(fā)現(xiàn)功能,需要返回符號(hào)zabbix要求的json數(shù)據(jù):
例如: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腳本的內(nèi)容很簡(jiǎn)單,就是讀取已準(zhǔn)備好的json數(shù)據(jù)文件ports.json,作為返回給zabbix server的值:1
2
3
4
5mypath=$(cd `dirname $0`; pwd)
cat $mypath/ports.json
為了返回給server端,需要再zabbix_agentd.conf中配置:
這樣,server端就可以使用readPorts這個(gè)鍵值,以獲取寫(xiě)在ports.json中的數(shù)據(jù)。readPorts下面定義的getPorts、getAllPorts是另外兩個(gè)可用的自定義鍵值。
自動(dòng)發(fā)現(xiàn)需監(jiān)控的服務(wù)/端口,難點(diǎn)不在于讀取,而在于自動(dòng)生成json數(shù)據(jù)文件。此處的ports.json是根據(jù)ports.ini轉(zhuǎn)換而來(lái)的。
ports.ini文件需人工填寫(xiě):
getPorts.py腳本如下,用于轉(zhuǎn)換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字符串,但每行尾部有一個(gè)多余的空格,zabbix不接受,須刪除行尾空格
p = re.compile("s+$")
for line in json_str.split('n'):
ss = re.sub(p, "", line)
print ss
轉(zhuǎn)換ports.ini為json形式:
至于getAllPorts.py,它的功能是直接返回主機(jī)上實(shí)際開(kāi)放的端口數(shù)據(jù):
總結(jié)
以上是生活随笔為你收集整理的zabbix 监控项自动发现过滤_通过Zabbix的自动发现(规则)自动创建监控项的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: snmp v3 参数_snmp v3 配
- 下一篇: # 模糊图片边缘_PS大神给你变个魔术,