gpt4 book ai didi

api - 如何使用 API 上传 Zabbix 模板

转载 作者:行者123 更新时间:2023-12-04 18:08:28 25 4
gpt4 key购买 nike

有谁知道如何使用 API 上传 Zabbix 模板?

我们正在尝试使用 java 和 Zabbix 2.0 API。我们的目标是通过不同的主机获取Zabbix图(png图片)并显示在我们的监控页面上。我们需要有可能通过使用模板为不同的主机定制监控​​参数。并且我们遇到了监控模板上传到zabbix服务器的问题。

有两种不同的 API 调用:

  1. configuration.import ( https://www.zabbix.com/documentation/2.0/manual/appendix/api/configuration/import ) 使用它我们可以将我们的模板上传到 zabbix 服务器,但我们无法在 UI 上看到它或以任何其他方式使用它。 Zabbix 服务器报告“true”,这意味着模板已成功上传。但是我们到处都找不到。

  2. template.create ( https://www.zabbix.com/documentation/2.0/manual/appendix/api/template/create ) 使用 template.create 我们可以在 zabbix 服务器上创建模板实体,但是我们看不到模板数据本身的任何参数 - 我们可以' 使用它上传我们的文件。

有谁知道如何将这两个 API 调用紧密结合在一起以及如何在 zabbix 服务器上获取已配置的 zabbix 模板?

最佳答案

所以嗯.. 因为我一直在 TEST 中使用模板导出+导入脚本到 PROD,反之亦然(在我以前的工作中)这里有一个完整的 python 脚本可以帮助完成导入任务:

#!/usr/bin/env python3
"""
Import XML configuration files using Zabbix API:
https://www.zabbix.com/documentation/3.4/manual/api/reference/configuration/import
"""
import argparse
from urllib import request
import json
import sys
from pprint import pformat
import os
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

def zbxrequest(url, method, auth, params):

if params is None:
params = {}
data = { "jsonrpc": "2.0", "id": 1, "method": method, "auth": auth, "params": params }
# Convert to string and then to byte
data = json.dumps(data).encode('utf-8')
req = request.Request(args.url, headers={'Content-Type': 'application/json'}, data=data)
resp = request.urlopen(req)
# Get string
resp = resp.read().decode('utf-8')
# Convert to object
resp = json.loads(resp, encoding='utf-8')
return resp


try:
# Parse command line arguments
parser = argparse.ArgumentParser(description='Import XML configuration files using Zabbix API')
parser.add_argument('template_file')
parser.add_argument('-u', '--user', required=True, help='user name')
parser.add_argument('-p', '--password', '--pass', required=True, help='password', metavar='PASSWORD')
parser.add_argument('-s', '--url', default='http://127.0.0.1:80/api_jsonrpc.php',
help='Zabbix API URL, default is http://127.0.0.1:80/api_jsonrpc.php')
args = parser.parse_args()

# TODO: add API version check
# r=zbxrequest(args.url, method="apiinfo.version", auth=None, params={})
# print(r)

# Get authentication token
# https://www.zabbix.com/documentation/3.4/manual/api/reference/user/login
auth_result = zbxrequest(args.url, method="user.login", auth=None,
params={"user": args.user, "password": args.password})

# If authentication was not OK
if 'result' not in auth_result:
raise Exception('ERROR: auth failed\n' + pformat(auth_result))

auth_token = auth_result['result']

# Read template file content
with open(args.template_file, 'r', encoding='utf-8') as f:
source = f.read()

# Set import parameters, including template file content
params = {'format': 'xml',
'rules': {'groups': {'createMissing': True},
'hosts': {'createMissing': True, 'updateExisting': True},
'items': {'createMissing': True, 'updateExisting': True},
'applications': {'createMissing': True},
'templates': {'createMissing': True, 'updateExisting': True},
'templateLinkage': {'createMissing': True},
'templateScreens': {'createMissing': True, 'updateExisting': True},
'discoveryRules': {'createMissing': True, 'updateExisting': True},
'triggers': {'createMissing': True, 'updateExisting': True},
'graphs': {'createMissing': True, 'updateExisting': True},
'valueMaps': {'createMissing': True},
'images': {'createMissing': True, 'updateExisting': True},
'maps': {'createMissing': True, 'updateExisting': True},
'screens': {'createMissing': True, 'updateExisting': True}
},
'source': source
}

# https://www.zabbix.com/documentation/3.4/manual/api/reference/configuration/import
import_result = zbxrequest(args.url, method="configuration.import", auth=auth_token, params=params)
# Something like: {'id': 1, 'jsonrpc': '2.0', 'result': True}

if 'result' in import_result and import_result['result']:
print('SUCCESS: configuration import')
else:
raise Exception('ERROR: configuration import failed\n' + pformat(import_result))

exit_code = 0

except Exception as e:

print(str(e), file=sys.stderr)
exit_code=1

finally:
# Logout to prevent generation of unnecessary open sessions
# https://www.zabbix.com/documentation/3.4/manual/api/reference/user/logout
if 'auth_token' in vars():
zbxrequest(args.url, method="user.logout", auth=auth_token, params={})

这就是您在 bash 中调用此类脚本的方式:

python3 ./import.py --url $URL/api_jsonrpc.php --user $USER --password $PASSWD $TEMPLATE_FILE

不用说,您需要满足 python 中的所有依赖关系才能正常运行。此外,我最后一次在 zabbix 4.0 LTS 上使用它并且不记得谁是原作者 - 如果有人发现我会在这里提及他/她以获得创建它的荣誉。

关于api - 如何使用 API 上传 Zabbix 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20403875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com