2024年您产品必备的10大AI API推荐
Zabbix API开发实战,创建报警媒介和代码示例
Zabbix API开始发挥重要作用,尤其是在Zabbix与第三方软件(如配置和事件管理系统)的集成以及日常任务的自动化方面。如果没有一些自动化,管理对数千台主机的监控是非常困难的。
API是在Zabbix 1.8中引入的,并且已经被广泛使用。所有Zabbix移动客户端都基于API,甚至本地WEB前端也部分建立在API之上。API中间件使架构更加模块化,有助于避免直接调用数据库。
Zabbix API是一个用于管理和监控Zabbix系统的接口。它允许用户通过编程方式访问和操作Zabbix系统的各种功能,如创建和修改主机、触发器和图表,以及检索历史数据和事件,批量操作,第三方软件集成以及其他作用提供可编程接口。
Zabbix API使用JSON-RPC协议进行通信,可以使用HTTP或HTTPS协议进行访问。API可以在Zabbix服务器上启用,以便外部应用程序可以通过API进行访问。
使用Zabbix API的第一步是对接口进行身份验证。可以使用用户名和密码进行身份验证,也可以使用API令牌进行身份验证。API令牌是一种用于身份验证的加密字符串,可以通过Zabbix前端界面生成。
一旦身份验证完成,就可以使用API方法来访问和操作Zabbix系统。API方法可以通过HTTP POST请求进行调用,并提供必要的参数和选项。API方法的响应是一个包含请求结果的JSON对象。
Zabbix API提供两项主要功能:
远程管理Zabbix配置。
远程检索配置和历史数据。
Zabbix API的通信协议JSON-RPC
Zabbix API 采用JSON-RPC实现,意味着调用任何函数,都需要发送POST请求,输入输出数据都是以JSON格式。JSON对象用于描述想要做的事情是什么(创建主机,获取图像,更新监控项等)。
采用POST方法向http://example.com/zabbix/api_jsonrpc.php发送此JSON对象。http://example.com/zabbix/是Zabbix前端地址。api_jsonrpc.php是调用API的PHP脚本。可在安装可视化前端的目录下找到。
注:请求除了必须是POST方法之外,HTTP Header Content-Type必须为:application/jsonrequest,application/json-rpc,application/json其中之一。
可以采用脚本或者任何”手动”支持JSON RPC的工具来使用API。而首先需要了解的就是如何验证和如何使用验证ID来获取想要的信息。后面的演示会以Python脚本的例子来呈现API的基本使用。
关于通信协议jsonrpc的介绍请参考文章:《通信协议jsonrpc》https://blog.csdn.net/zhouruifu2015/article/details/130249074
常用的Zabbix API方法
该图表示使用Zabbix API时的典型数据流。身份验证(方法user.login)是获取身份验证ID所需的强制性步骤。ID允许我们调用API的任何方法,前提是我们有足够的权限。
以下为常用的zabbix API方法
1. host.get – 获取主机列表
该方法用于获取Zabbix系统中的所有主机列表。可以通过指定过滤条件来限制返回的主机列表。
2. item.get – 获取监控项列表
该方法用于获取Zabbix系统中所有监控项的列表。可以通过指定过滤条件来限制返回的监控项列表。
3. trigger.get – 获取触发器列表
该方法用于获取Zabbix系统中所有触发器的列表。可以通过指定过滤条件来限制返回的触发器列表。
4. graph.get – 获取图表列表
该方法用于获取Zabbix系统中所有图表的列表。可以通过指定过滤条件来限制返回的图表列表。
5. history.get – 获取历史数据
该方法用于获取Zabbix系统中某个监控项的历史数据。可以通过指定过滤条件来限制返回的历史数据。
6. dhost.get – 主机发现
这个方法允许根据给定的参数检索发现的主机。
通过编程实现API调用
zabbix的API请求使用的协议是jsonrpc,所以请求参数的格式需要满足jsonrpc的格式。以下是通过编程实现的一些示例
示例1:获取zabbix server的版本-apiinfo.version
get_version.py
import requests
# python中的dict类型要转换json格式的数据需要用到json库
import json
# 要访问的地址
url = 'http://{HOSTNAME}/zabbix/api_jsonrpc.php'
# 请求头部信息
headers = {'Content-Type': 'application/json-rpc'}
data = {
# jsonrpc协议的版本号,固定的
"jsonrpc": "2.0",
# API调用方法,参考zabbix手册,查询zabbix版本
"method": "apiinfo.version",
# 没有额外参数
"params": [],
# 对应的请求的标示符
"id": 1
}
# 使用requests发送请求,访问指定网站,向url发送data请求,r收到的返回响应为json格式
# 将data转成json格式,zabbix要求提交的数据是json格式
results = requests.post(url, headers=headers, data=json.dumps(data))
# 将json格式解码,zabbix返回的数据都是json格式
print(results.status_code, results.json())
输出结果示例:
200 {‘jsonrpc’: ‘2.0’, ‘result’: ‘5.0.33’, ‘id’: 1}
示例2:认证,根据用户名和密码获取token-user.login
在你可以访问zabbix任何内部数据之前,你需要登录并获得身份验证令牌,这个可以通过user.login方法来完成,任何Zabbix API客户端在真正工作之前都需要验证它自身。user.login这个方法接受一个用户名和密码作为参数并返回验证ID,一个安全哈希串用于持续的API调用(在使用user.logout之前该验证ID均有效)。
from http_request import http_post
# 导入封装的网络请求方法http_post
url = 'http://{HOSTNAME}/zabbix/api_jsonrpc.php'
username = 'Admin'
password = 'zabbix'
def user_login():
"""
用户登录,获取token
"""
payload = {
"jsonrpc": "2.0",
"method": "user.login",
"params": {"user": username, "password": password},
"id": 1,
"auth": None,
}
resp = http_post(url, data=payload)
token = resp.get("result")
if not token:
print(u"Zabbix账号密码不正确,请输入管理员账号密码")
return token
if __name__ == '__main__':
print(user_login())
输出结果示例:
754f3bf4fe41eff7e97b6e18027f6021
示例3:获取特定主机的CPU使用率-item.get
我们现在有一个有效的用户身份验证令牌,可用于在Zabbix中访问数据。
from http_request import http_post
from get_token import user_login
author = user_login()
url = 'http://{HOSTNAME}/zabbix/api_jsonrpc.php'
data = {
"jsonrpc": "2.0",
"method": "item.get",
"params": {
"output": ["itemid", "name"],
"hostids": "10084",
"search": {"key_": "system.cpu.util[,user]"}
},
"auth": author,
"id": 1
}
response = http_post(url, data=data)
# 输出示例:{'jsonrpc': '2.0', 'result': [{'itemid': '29171', 'name': 'CPU user time'}], 'id': 1}
itemids = [item.get('itemid') for item in response.get('result', [])]
for itemid in itemids:
data = {
"jsonrpc": "2.0",
"method": "history.get",
"params": {
"output": "extend",
"itemids": itemid,
"history": 0,
"sortfield": "clock",
"sortorder": "DESC",
"limit": 1
},
"auth": author,
"id": 2
}
response = http_post(url, data=data)
# 输出示例:{'jsonrpc': '2.0', 'result': [{'itemid': '29171', 'clock': '1682061011', 'value': '1.381076', 'ns': '272095768'}], 'id': 2}
print(response.get('result')[0]['value'])
示例4:通过API创建主机监控-host.create
from zabbix_api.get_token import user_login, http_post
def host_create():
payload = {
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "server3",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "192.168.1.130",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"id": 2,
"auth": user_login()
}
resp = http_post(data=payload)
print('create mediatype', resp)
if __name__ == '__main__':
host_create()
创建后的主机
示例5:获取所有主机列表示例-host.get
import requests
from get_token import user_login
url = 'http://{HOSTNAME}/zabbix/api_jsonrpc.php'
headers = {'Content-Type': 'application/json-rpc'}
data = {
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": ["hostid", "host"],
"selectInterfaces": ['interfaceid', "ip"]
},
"auth": user_login(),
"id": 1
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
输出结果示例:
{‘jsonrpc’: ‘2.0’, ‘result’: [{‘hostid’: ‘10084’, ‘host’: ‘Zabbix server’, ‘interfaces’: [{‘interfaceid’: ‘1’, ‘ip’: ‘127.0.0.1’}]}], ‘id’: 1}
使用host.del还可以删除主机,参数如下
{
"jsonrpc": "2.0",
"method": "host.del",
"params": [
"10307"
],
"id": 2,
"auth":"77962d5eaaf442111fe69cc3b9bc488e"
}
示例6:获取事件信息-event.get
from zabbix_api.get_token import user_login, http_post
def event_get():
payload = {
"jsonrpc": "2.0", "method": "event.get",
"params": {
"output": "extend",
"select_acknowledges": "extend",
"selectTags": "extend",
"selectSuppressionData": "extend",
"objectids": "13926",
"sortfield": ["clock", "eventid"],
"sortorder": "DESC"
},
"id": 1,
"auth": user_login()
}
resp = http_post(data=payload)
print('event_get', resp)
if __name__ == '__main__':
event_get()
示例7:使用pyzabbix库对接Zabbix API获取主机列表
pyzabbix:pyzabbix 是一个 Python 模块,它提供了一个简单的接口来调用 Zabbix API。您可以在以下链接中找到 pyzabbix 的文档和示例:https://pypi.org/project/pyzabbix/1.0.0/
以下是一个简单的 Python 代码示例,用于使用 pyzabbix 模块连接到 Zabbix API 并获取主机列表:
本示例代码使用最新的Python3.11
from pyzabbix import ZabbixAPI
zabbix_server = 'http://{HOSTNAME}/zabbix/api_jsonrpc.php'
zabbix_user = "Admin"
zabbix_password = "zabbix"
zapi = ZabbixAPI(zabbix_server)
zapi.login(zabbix_user, zabbix_password)
hosts = zapi.host.get(output="extend")
for host in hosts:
print(host)
print(host["hostid"], host["host"])
输出结果
{‘hostid’: ‘10084’, ‘proxy_hostid’: ‘0’, ‘host’: ‘Zabbix server’, ‘status’: ‘0’, ‘disable_until’: ‘1684919414’, ‘error’: ‘Received empty response from Zabbix Agent at [127.0.0.1]. Assuming that agent dropped connection because of access permissions.’, ‘available’: ‘2’, ‘errors_from’: ‘1682070619’, ‘lastaccess’: ‘0’, ‘ipmi_authtype’: ‘-1’, ‘ipmi_privilege’: ‘2’, ‘ipmi_username’: ”, ‘ipmi_password’: ”, ‘ipmi_disable_until’: ‘0’, ‘ipmi_available’: ‘0’, ‘snmp_disable_until’: ‘0’, ‘snmp_available’: ‘0’, ‘maintenanceid’: ‘0’, ‘maintenance_status’: ‘0’, ‘maintenance_type’: ‘0’, ‘maintenance_from’: ‘0’, ‘ipmi_errors_from’: ‘0’, ‘snmp_errors_from’: ‘0’, ‘ipmi_error’: ”, ‘snmp_error’: ”, ‘jmx_disable_until’: ‘0’, ‘jmx_available’: ‘0’, ‘jmx_errors_from’: ‘0’, ‘jmx_error’: ”, ‘name’: ‘Zabbix server’, ‘flags’: ‘0’, ‘templateid’: ‘0’, ‘description’: ”, ‘tls_connect’: ‘1’, ‘tls_accept’: ‘1’, ‘tls_issuer’: ”, ‘tls_subject’: ”, ‘tls_psk_identity’: ”, ‘tls_psk’: ”, ‘proxy_address’: ”, ‘auto_compress’: ‘1’, ‘inventory_mode’: ‘-1’}
10084 Zabbix server
{‘hostid’: ‘10438’, ‘proxy_hostid’: ‘0’, ‘host’: ‘windows10’, ‘status’: ‘0’, ‘disable_until’: ‘0’, ‘error’: ”, ‘available’: ‘0’, ‘errors_from’: ‘0’, ‘lastaccess’: ‘0’, ‘ipmi_authtype’: ‘-1’, ‘ipmi_privilege’: ‘2’, ‘ipmi_username’: ”, ‘ipmi_password’: ”, ‘ipmi_disable_until’: ‘0’, ‘ipmi_available’: ‘0’, ‘snmp_disable_until’: ‘0’, ‘snmp_available’: ‘0’, ‘maintenanceid’: ‘0’, ‘maintenance_status’: ‘0’, ‘maintenance_type’: ‘0’, ‘maintenance_from’: ‘0’, ‘ipmi_errors_from’: ‘0’, ‘snmp_errors_from’: ‘0’, ‘ipmi_error’: ”, ‘snmp_error’: ”, ‘jmx_disable_until’: ‘0’, ‘jmx_available’: ‘0’, ‘jmx_errors_from’: ‘0’, ‘jmx_error’: ”, ‘name’: ‘SteveRocket’, ‘flags’: ‘0’, ‘templateid’: ‘0’, ‘description’: ”, ‘tls_connect’: ‘1’, ‘tls_accept’: ‘1’, ‘tls_issuer’: ”, ‘tls_subject’: ”, ‘tls_psk_identity’: ”, ‘tls_psk’: ”, ‘proxy_address’: ”, ‘auto_compress’: ‘1’, ‘inventory_mode’: ‘-1’}
10438 windows10
{‘hostid’: ‘10439’, ‘proxy_hostid’: ‘0’, ‘host’: ‘VM-1-86-centos’, ‘status’: ‘0’, ‘disable_until’: ‘0’, ‘error’: ”, ‘available’: ‘1’, ‘errors_from’: ‘0’, ‘lastaccess’: ‘0’, ‘ipmi_authtype’: ‘-1’, ‘ipmi_privilege’: ‘2’, ‘ipmi_username’: ”, ‘ipmi_password’: ”, ‘ipmi_disable_until’: ‘0’, ‘ipmi_available’: ‘0’, ‘snmp_disable_until’: ‘0’, ‘snmp_available’: ‘0’, ‘maintenanceid’: ‘0’, ‘maintenance_status’: ‘0’, ‘maintenance_type’: ‘0’, ‘maintenance_from’: ‘0’, ‘ipmi_errors_from’: ‘0’, ‘snmp_errors_from’: ‘0’, ‘ipmi_error’: ”, ‘snmp_error’: ”, ‘jmx_disable_until’: ‘0’, ‘jmx_available’: ‘0’, ‘jmx_errors_from’: ‘0’, ‘jmx_error’: ”, ‘name’: ‘VM-1-86-centos-1.86’, ‘flags’: ‘0’, ‘templateid’: ‘0’, ‘description’: ”, ‘tls_connect’: ‘1’, ‘tls_accept’: ‘1’, ‘tls_issuer’: ”, ‘tls_subject’: ”, ‘tls_psk_identity’: ”, ‘tls_psk’: ”, ‘proxy_address’: ”, ‘auto_compress’: ‘1’, ‘inventory_mode’: ‘-1’}
10439 VM-1-86-centos
案例1:使用API创建动作、报警媒介和用户
通过封装zabbix API,实现zabbix通过脚本的方式进行报警媒介通知,支持告警媒介的查询、删除、创建,以及创建消息模板,告警用户的查询、删除、创建,动作的查询、删除、创建,用以接入第三方应用告警。
配置-动作
创建的动作与媒介和用户进行绑定
zabbix_api/api_action.py
from zabbix_api.http_request import http_post
from zabbix_api import script_name, media_name, user_name, action_name, ACTION_MESSAGE_BODY
from zabbix_api.get_token import user_login
from zabbix_api.api_mediatype import mediatype_get
from zabbix_api.api_user import user_get
token = user_login()
PARAM = int("11")
def action_get():
payload = {
"jsonrpc": "2.0",
"method": "action.get",
"params": {
"output": "actionids",
"filter": {"name": action_name},
},
"auth": token,
"id": 1,
}
resp = http_post(data=payload)
print('get action', resp)
return [i["actionid"] for i in resp["result"]]
def action_delete(action_ids):
"""
删除mediatype
"""
payload = {"jsonrpc": "2.0", "method": "action.delete", "params": action_ids, "auth": token, "id": 1}
resp = http_post(data=payload)
print('delete action', resp)
def action_create():
"""创建触发器"""
userid = user_get()
if userid and isinstance(userid, list):
userid = userid[0]
mediatypeid = mediatype_get()
if mediatypeid and isinstance(mediatypeid, list):
mediatypeid = mediatypeid[0]
payload = {
"jsonrpc": "2.0",
"method": "action.create",
"params": {
"name": action_name,
"eventsource": 0,
"status": 0,
"esc_period": 3600,
"def_shortdata": action_name + " {TRIGGER.NAME}: {TRIGGER.STATUS}",
"def_longdata": ACTION_MESSAGE_BODY,
"filter": {
"evaltype": 0,
"conditions": [
{
"conditiontype": 16,
"operator": PARAM,
"value": "",
},
],
},
"operations": [
{
"operationtype": 0,
"esc_period": 0,
"esc_step_from": 1,
"esc_step_to": 1,
"evaltype": 0,
"opmessage_usr": [{"userid": userid}],
"opmessage": {"default_msg": 1, "mediatypeid": mediatypeid},
}
],
},
"auth": token,
"id": 1,
}
resp = http_post(data=payload)
print('create action', resp)
if __name__ == '__main__':
action_ids = action_get()
action_delete(action_ids)
action_create()
管理-报警媒介类型
通过API获取报警媒介、删除报警媒介、创建报警媒介脚本
zabbix_api/api_mediatype.py
from zabbix_api.http_request import http_post
from zabbix_api import script_name, media_name, action_name, ACTION_MESSAGE_BODY
from zabbix_api.get_token import user_login
token = user_login()
def mediatype_get():
"""
获取mediatype
"""
payload = {
"jsonrpc": "2.0",
"method": "mediatype.get",
"params": {
"output": "mediatypeid",
"filter": {"description": media_name},
},
"auth": token,
"id": 1,
}
resp = http_post(data=payload)
print('get mediatype', resp)
return [i["mediatypeid"] for i in resp["result"]]
def mediatype_delete(media_type_ids):
"""
删除mediatype
"""
payload = {
"jsonrpc": "2.0",
"method": "mediatype.delete",
"params": media_type_ids,
"auth": token,
"id": 1,
}
resp = http_post(data=payload)
print('delete mediatype', resp)
def mediatype_create():
"""
创建脚本
"""
exec_params = [
"{ALERT.MESSAGE}",
]
payload = {
"jsonrpc": "2.0",
"method": "mediatype.create",
"params": {
"name": media_name,
"description": media_name,
"exec_path": script_name,
"exec_params": "\r\n".join(exec_params) + "\r\n",
"type": 1,
"status": 0,
"message_templates": [
{
"eventsource": 0,
"recovery": 0,
"subject": action_name + " {TRIGGER.NAME}: {TRIGGER.STATUS}",
"message": ACTION_MESSAGE_BODY,
}
],
},
"auth": token,
"id": 1,
}
resp = http_post(data=payload)
print('create mediatype', resp)
if __name__ == '__main__':
mediatype_ids = mediatype_get()
mediatype_delete(mediatype_ids)
mediatype_create()
获取报警媒介输出结果:{‘jsonrpc’: ‘2.0’, ‘result’: [{‘mediatypeid’: ’29’}], ‘id’: 1}
删除报警媒介输出结果:{‘jsonrpc’: ‘2.0’, ‘result’: {‘mediatypeids’: [’29’]}, ‘id’: 1}
创建报警媒介输出结果:{‘jsonrpc’: ‘2.0’, ‘result’: {‘mediatypeids’: [’30’]}, ‘id’: 1}
管理-用户
将创建的用户和媒介进行关联一起。
zabbix_api/api_user.py
from zabbix_api.http_request import http_post
from zabbix_api import password, usrgrpid, script_name, media_name, user_name, action_name, ACTION_MESSAGE_BODY
from zabbix_api.get_token import user_login
from zabbix_api.api_mediatype import mediatype_get
token = user_login()
def user_get():
"""
获取以前老的mediatype
"""
payload = {
"jsonrpc": "2.0",
"method": "user.get",
"params": {
"output": "userid",
"filter": {"alias": user_name},
},
"auth": token,
"id": 1,
}
resp = http_post(data=payload)
print('get user', resp)
return [i["userid"] for i in resp["result"]]
def user_delete(user_ids):
"""
删除mediatype
"""
payload = {"jsonrpc": "2.0", "method": "user.delete", "params": user_ids, "auth": token, "id": 1}
resp = http_post(data=payload)
print("delete user", resp)
def user_create():
"""创建用户"""
mediatypeid = mediatype_get()[0]
if mediatypeid and isinstance(mediatypeid, list):
mediatypeid = mediatypeid[0]
payload = {
"jsonrpc": "2.0",
"method": "user.create",
"params": {
"alias": user_name,
"name": user_name,
"surname": user_name,
"passwd": password,
"type": 3,
"usrgrps": [{"usrgrpid": usrgrpid}],
"user_medias": [
{
"mediatypeid": mediatypeid,
"sendto": user_name,
"active": 0,
"severity": 63,
"period": "1-7,00:00-24:00",
}
],
},
"auth": token,
"id": 1,
}
resp = http_post(data=payload)
print('create user', resp)
if __name__ == '__main__':
user_ids = user_get()
user_delete(user_ids)
user_create()
创建主方法create_alarm_mediatype.py
from zabbix_api.api_mediatype import mediatype_get, mediatype_delete, mediatype_create
from zabbix_api.api_user import user_get, user_delete, user_create
from zabbix_api.api_action import action_get, action_delete, action_create
action_ids = action_get()
if action_ids:
action_delete(action_ids)
mediatype_ids = mediatype_get()
if mediatype_ids:
mediatype_delete(mediatype_ids)
user_ids = user_get()
if user_ids:
user_delete(user_ids)
mediatype_create()
user_create()
action_create()
初始输出
get action {‘jsonrpc’: ‘2.0’, ‘result’: [{‘actionid’: ’35’}], ‘id’: 1}
delete action {‘jsonrpc’: ‘2.0’, ‘result’: {‘actionids’: [’35’]}, ‘id’: 1}
get mediatype {‘jsonrpc’: ‘2.0’, ‘result’: [{‘mediatypeid’: ’36’}], ‘id’: 1}
delete mediatype {‘jsonrpc’: ‘2.0’, ‘result’: {‘mediatypeids’: [’36’]}, ‘id’: 1}
get user {‘jsonrpc’: ‘2.0’, ‘result’: [{‘userid’: ’36’}], ‘id’: 1}
delete user {‘jsonrpc’: ‘2.0’, ‘result’: {‘userids’: [’36’]}, ‘id’: 1}
create mediatype {‘jsonrpc’: ‘2.0’, ‘result’: {‘mediatypeids’: [’37’]}, ‘id’: 1}
get mediatype {‘jsonrpc’: ‘2.0’, ‘result’: [{‘mediatypeid’: ’37’}], ‘id’: 1}
create user {‘jsonrpc’: ‘2.0’, ‘result’: {‘userids’: [’37’]}, ‘id’: 1}
get user {‘jsonrpc’: ‘2.0’, ‘result’: [{‘userid’: ’37’}], ‘id’: 1}
get mediatype {‘jsonrpc’: ‘2.0’, ‘result’: [{‘mediatypeid’: ’37’}], ‘id’: 1}
create action {‘jsonrpc’: ‘2.0’, ‘result’: {‘actionids’: [36]}, ‘id’: 1}
执行成功后,查看创建的动作
查看创建的用户
查看创建的报警媒介
案例2:获取zabbix的告警数据,并通知微信机器人
代码示例
from zabbix_api import username, password, url
import json
import datetime
import requests
from pyzabbix import ZabbixAPI
boturl = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=*****************"
headers = {'Content-Type': 'application/json;charset=utf-8'}
def msg(text):
json_text = {
"msgtype": "text",
"text": {
"content": text
},
}
print(requests.post(boturl, json.dumps(json_text), headers=headers).content)
def alert_msg():
# zabbix地址和登录信息
ZABBIX_SERVER = url
zapi = ZabbixAPI(ZABBIX_SERVER)
zapi.login(username, password)
# 获取告警信息
alert_list = zapi.trigger.get(
output=[
"triggerid", # 触发器id
"description", # 触发器内容描述
"priority", # 触发器等级1-5 5最大 信息、警告、一般严重、严重、灾难
],
filter={
"value": 1 # 过滤,此处表示启动的触发器
},
sortfield="priority", # 排序
sortorder="DESC", # 正排与倒排
min_severity=2, # 返回指定告警级别的告警,这里是大于等于告警
skipDependent=1, # 跳过依赖于其他问题中的触发器
monitored=1, # 属于受监控主机的已启用触发器,并仅包含已启用的项目
active=1, # 只返回属于受监控主机的启用的触发器(与上条意思差不多,至于什么区别,未测)
expandDescription=1, # 在触发器的名称中展开宏
selectHosts=['name'], # 在结果中返回关联的主机信息(意思就是显示出那台主机告警的)
selectGroups=['name'], # 在结果中返回关联的主机组信息(意思就是显示出那个主机组告警的)
only_true=1 # 只返回最近处于问题状态的触发器
)
now_date = datetime.datetime.now()
info = ''
info += '当前存在告警:\n' + str(now_date)
for i in alert_list:
info += '\n\n名称:' + i['hosts'][0]['name'] + '\n告警内容:' + i['description']
msg(info)
if '__main__' == __name__:
alert_msg()
机器人收到的消息如下
总结
使用Zabbix API可以让用户更方便地管理和监控Zabbix系统,同时还可以与其他应用程序进行集成。要使用Zabbix API,需要了解API的基本概念和方法,并了解如何使用API进行身份验证和访问。
参考链接
Zabbix API:Zabbix 提供了 API,可以通过 Python 调用API 来操作 Zabbix。您可以在以下链接中找到有关Zabbix API 和 Python 的详细信息:https://www.zabbix.com/documentation/current/manual/api
本文章转载微信公众号@CTO Plus
- Zabbix API提供两项主要功能:
- Zabbix API的通信协议JSON-RPC
- 常用的Zabbix API方法
- 以下为常用的zabbix API方法
- 1. host.get – 获取主机列表
- 2. item.get – 获取监控项列表
- 3. trigger.get – 获取触发器列表
- 4. graph.get – 获取图表列表
- 5. history.get – 获取历史数据
- 6. dhost.get – 主机发现
- 通过编程实现API调用
- 示例1:获取zabbix server的版本-apiinfo.version
- 示例2:认证,根据用户名和密码获取token-user.login
- 示例3:获取特定主机的CPU使用率-item.get
- 示例4:通过API创建主机监控-host.create
- 示例5:获取所有主机列表示例-host.get
- 示例6:获取事件信息-event.get
- 示例7:使用pyzabbix库对接Zabbix API获取主机列表
- 案例1:使用API创建动作、报警媒介和用户
- 案例2:获取zabbix的告警数据,并通知微信机器人
- 总结
- 参考链接