Zabbix - 触发文本,仅显示部分文本

时间:2018-05-10 12:44:10

标签: zabbix

我正在监控一个显示几百项状态的网页。该页面如下所示: { “arrisId”: “a000098”, “状态”: “运行”, “开始时间”: “2018-05-10T08:02:19.563Z”},{ “arrisId”: “a000101”, “状态”:“跑“ ”开始时间“: ”2018-05-10T08:02:19.892Z“},{ ”arrisId“: ”a000107“, ”状态“: ”运行“, ”开始时间“:” 2018-05-10T08:02: 28.556Z“},...

我想要做的是当其中一件事“未运行”时触发,但我想只显示不工作的项目而不是整个页面。希望有道理。我可以使用web.page.regexp并发送一条消息,表明某些内容未运行,但是如果我使用web.page.get,是否有办法配置触发器以显示未运行和前面的25个左右的字符那? 我希望这个问题有道理。

1 个答案:

答案 0 :(得分:0)

您最好的做法是使用Low Level Discovery

您的LLD规则将运行一个脚本来提取您的主状态页面,然后解析它并使用这些字段根据"项目原型创建您的项目"你定义。

项目原型本身也需要一个脚本来获取各自的信息(除非您愿意在测试版中使用Zabbix)

我使用here中的模拟json完成了一个简单的设置:

LLD脚本:将解析模拟json并将其转换为符合Zabbix LLD的格式:

import requests
import json

jsonSource = "https://jsonplaceholder.typicode.com/users"
lld = {}
data = []
lld['data'] = data

session = requests.Session()
response = session.get(jsonSource)

for jsonObject in response.json():
    data.append ( {
        '{#NAME}':  jsonObject['name'],
        '{#ID}':  jsonObject['id'],
        '{#URL}':  jsonSource + '/' + str(jsonObject['id'])
    } )

print json.dumps(lld)

项目GET脚本:获取特定项目的特定字段(将使用Zabbix 4.0中的http代理项目过时):

import requests
import json
import sys, argparse

parser = argparse.ArgumentParser()
parser.add_argument('-i', required=True, metavar='User ID')
parser.add_argument('-f', required=True, metavar='\"Requested JSON Field\"')
args = parser.parse_args()

jsonSource = "https://jsonplaceholder.typicode.com/users/" + args.i
session = requests.Session()
response = session.get(jsonSource)

print (response.json()[args.f])

命令行用法示例:

$ jsonLLD.py
{"data": [{"{#ID}": 1, "{#URL}": "https://jsonplaceholder.typicode.com/users/1", "{#NAME}": "Leanne Graham"}, {"{#ID}": 2, "{#URL}": "https://jsonplaceholder.typicode.com/users/2", "{#NAME}": "Ervin Howell"},
[cut]

$ jsonGet.py  -i 10 -f phone
024-648-3804
$ jsonGet.py  -i 10 -f name
Clementina DuBuque

然后你必须将它设置为Zabbix:

  • 创建新模板
  • 创建" Zabbix代理"的发现规则输入并将其设置为运行system.run[/usr/bin/jsonLLD.py](请注意路径!)
  • 为您要处理的每个json字段创建一个项目原型(即:项目名称:{#NAME} telephone number,项目键system.run[/usr/bin/jsonGet.py -i {#ID} -f phone]
  • 相应地创建触发器原型
  • 将主机与模板相关联

在您的情况下,我将Zabbix服务器本身用作主机,并在其/ usr / bin中安装脚本。 观看Zabbix Agent的日志以查看发现和项目收集过程:

  1972:20180519:121849.052 Executing command '/usr/bin/jsonGet.py  -i 1 -f phone'
  1971:20180519:121850.054 Executing command '/usr/bin/jsonGet.py  -i 2 -f phone'
  1974:20180519:121851.055 Executing command '/usr/bin/jsonGet.py  -i 3 -f phone'
  1974:20180519:121852.073 Executing command '/usr/bin/jsonGet.py  -i 4 -f phone'
  1974:20180519:121853.076 Executing command '/usr/bin/jsonGet.py  -i 5 -f phone'
  1973:20180519:121854.077 Executing command '/usr/bin/jsonGet.py  -i 6 -f phone'
  1972:20180519:121855.079 Executing command '/usr/bin/jsonGet.py  -i 7 -f phone'

[cut]