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

熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
3000+提示詞助力AI大模型
和專業工程師共享工作效率翻倍的秘密
返回頂部
上一篇
AI加持下API開發與測試管理平臺的能力猜想
下一篇
使用OkHttp緩存API調用提高Android應用性能
国内精品久久久久影院日本,日本中文字幕视频,99久久精品99999久久,又粗又大又黄又硬又爽毛片
国产亚洲欧美日韩俺去了| 日韩免费观看高清完整版在线观看| 激情文学综合插| 国产日产欧美一区| 欧美大片顶级少妇| 99久久婷婷国产精品综合| 日韩不卡免费视频| 亚洲女同ⅹxx女同tv| 国产一区不卡在线| 性做久久久久久免费观看| 欧美高清视频不卡网| 国产精品66部| 国产亚洲精品精华液| 蜜臀av一区二区在线观看| 国产精品美女久久久久久久网站| 色综合天天性综合| 国产精品一区二区三区网站| 日韩一二三四区| 日韩欧美成人一区| 成人av动漫在线| 日本道色综合久久| 欧美一区二区三区免费在线看| 欧美性色综合网| 一本大道久久a久久综合| 色综合天天做天天爱| 成人性生交大片免费看在线播放| 日韩精品自拍偷拍| 色先锋资源久久综合| 久久精品国产在热久久| 欧美成人精精品一区二区频| 日本成人在线网站| 欧美日韩国产另类一区| 亚洲国产精品黑人久久久| 欧美视频三区在线播放| 懂色av中文一区二区三区| 欧美午夜一区二区三区免费大片| 99久久婷婷国产综合精品 | 一区二区三区毛片| 欧美刺激脚交jootjob| 国产精品国产三级国产普通话99| 欧美午夜一区二区三区| 午夜精品福利视频网站| 色激情天天射综合网| 久久99热狠狠色一区二区| 日本一区二区三区高清不卡| 成人免费视频国产在线观看| 懂色中文一区二区在线播放| 色94色欧美sute亚洲线路二| 欧美大片顶级少妇| 亚洲国产视频一区二区| 成人福利视频网站| 欧美体内she精视频| 欧美午夜视频网站| 久久精品男人天堂av| 日本韩国欧美三级| 久久久久久99精品| 国产日韩精品一区二区三区在线| 奇米精品一区二区三区四区| 欧美性大战xxxxx久久久| 中文字幕一区二区日韩精品绯色 | 一二三四社区欧美黄| 国产精品福利一区| 亚洲成人www| 在线免费观看一区| 亚洲妇熟xx妇色黄| 精品国产免费一区二区三区四区| 一区二区三区免费| 91麻豆精品91久久久久久清纯| 久久久久久电影| 成人免费视频一区| 黄页网站大全一区二区| 国产成人精品午夜视频免费| 欧美一区二视频| 麻豆成人久久精品二区三区小说| 欧美日本一区二区三区| 午夜成人在线视频| 欧美色精品在线视频| 蜜桃久久久久久| 中文字幕免费不卡| 成人性生交大片| 亚洲国产色一区| 国产三级精品三级| 不卡av在线网| 蜜臀精品久久久久久蜜臀| 日韩午夜精品视频| 色狠狠综合天天综合综合| 香蕉久久一区二区不卡无毒影院| 337p日本欧洲亚洲大胆色噜噜| 成人蜜臀av电影| 久久网这里都是精品| 91精品国产入口| 欧美唯美清纯偷拍| 欧美精品一区二区久久久| 亚洲精品视频在线看| 国产精品私房写真福利视频| 欧美性做爰猛烈叫床潮| 日韩视频免费观看高清完整版在线观看| 欧美高清在线一区| gogo大胆日本视频一区| 99精品视频在线观看| 日韩成人精品视频| 精品一区二区三区免费毛片爱| 琪琪久久久久日韩精品| 久久国产精品露脸对白| 国产成人免费视频| 色综合色综合色综合| 91精品久久久久久久99蜜桃| 欧美另类z0zxhd电影| 日本亚洲欧美天堂免费| 亚洲免费观看高清完整版在线观看| 性做久久久久久久久| 国模冰冰炮一区二区| 欧美xxxxx裸体时装秀| 国产精品一区二区免费不卡| 成人在线视频首页| 亚洲v中文字幕| 久久久久亚洲蜜桃| 久久久精品蜜桃| 精品毛片乱码1区2区3区| 日韩精品一区二区三区视频播放| 日韩欧美二区三区| 91精品国产美女浴室洗澡无遮挡| 美女高潮久久久| 欧美在线免费视屏| 一区二区三区精品在线观看| 国产视频一区在线播放| 久久综合一区二区| 久久国产成人午夜av影院| 国产一区不卡在线| 成人动漫av在线| 视频一区二区欧美| 亚洲一区二区在线视频| 国产精品视频线看| 中文字幕高清一区| 亚洲精品成人天堂一二三| 国产精品蜜臀av| 日韩av电影天堂| 在线观看www91| 91国产丝袜在线播放| 国产伦精一区二区三区| 欧美mv日韩mv国产| 亚洲一区二区视频在线观看| 在线观看视频一区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产精品一区二区三区乱码| 亚洲va国产天堂va久久en| 亚洲女女做受ⅹxx高潮| 国产精品久久三区| 欧美精品一区二区三区久久久 | 亚洲成人7777| 天天综合色天天综合色h| 日本不卡一区二区三区| 欧美日韩国产区一| 激情都市一区二区| 欧美一区二区性放荡片| 精品精品国产高清一毛片一天堂| 欧美一级午夜免费电影| 2024国产精品视频| 久国产精品韩国三级视频| 99久久777色| 久久久99精品久久| 久久91精品久久久久久秒播| 欧美日韩电影一区| 一区二区三区中文字幕在线观看| 91精品欧美久久久久久动漫| 综合色天天鬼久久鬼色| 久久久久久久久久久久久久久99| 色偷偷88欧美精品久久久| 日本高清不卡aⅴ免费网站| 精品国产一区二区三区不卡| 婷婷六月综合网| 国产裸体歌舞团一区二区| 在线免费观看成人短视频| 日韩欧美卡一卡二| 日韩国产欧美三级| 亚洲欧美日韩一区二区三区在线观看 | 99久久精品国产一区二区三区 | 99视频国产精品| 日韩高清在线一区| 色婷婷狠狠综合| 久久奇米777| 中文字幕在线不卡一区| 国产亚洲成aⅴ人片在线观看 | 欧美在线观看一二区| 欧美丰满美乳xxx高潮www| 成人av电影在线| 亚洲韩国精品一区| 国产精品欧美精品| 国产三级久久久| 在线不卡a资源高清| 国产盗摄精品一区二区三区在线 | 在线视频一区二区三| 日本不卡视频在线| 国产精品一二一区| 国产毛片精品国产一区二区三区| 国产精品久久久久7777按摩| 欧美电影免费观看高清完整版| 3d动漫精品啪啪| 欧美电影一区二区三区| 北岛玲一区二区三区四区|