Zabbix Api 實做範例程式碼
-CentOS7, Linux應用,Python 簡單80行實作
Wiki topics:
🔓 · Open Source
Zabbix Api 實做範例程式碼
-CentOS7, Linux應用,Python 實作,80行實作

Zabbix Api好處是可以透過Request URL 來執行創建、修改、刪除Zabbix的內容,如此PHP 排成就能執行,免去還要手動登入Zabbix 新增、修改的麻煩,對追求自動化的程式碼,相當方便阿!
下面舉Zabbix Trigger 報警功能,Get Trigger、Create Trigger的例子來實作Zabbix Api。
Create Zabbix Trigger
首先,創建Python 檔 create_trigger.py
# vim creat_trigger.py
如果要改警報門檻,修改警報閥值的condition 條件,zabbix中刪除trigger 讓排成重建即可
複製貼上以下程式碼:
import sys
import json
import requests
"""
sys.argv[1] = http_code
localhost ->改成自己的IP
"""
#警報閥值
def alert_condition(http_code):
condition = False
if http_code.find('4')==0 :
condition = '>300'
return condition
#Api格式
def api_data(method,params,auth=None,api_id='1',jsonrpc="2.0"):
auth_para = ',"auth": "'+auth+'"' if auth else ''
data = '{\
"jsonrpc": "'+jsonrpc+'",\
"method": "'+method+'",\
"params": {'+params+'},\
"id": '+api_id+'\
'+auth_para+'\
}'
return data
#Api請求
def api_request(data,url="http://localhost:30080/api_jsonrpc.php",headers={'content-type': 'application/json'}):
result = requests.post(url,data=data,headers=headers)
result_dic = result.json()
return result_dic
#取得授權碼
def get_auth():
method = "user.login"
params = '"user": "帳號",\
"password": "密碼"'
data = api_data(method,params)
auth = api_request(data)['result']
auth = auth return auth
#檢查trigger是否已存在
def get_trigger(Name):
auth = get_auth()
method = "trigger.get"
params = '"output": "triggerid",\
"search": {"description": "'+Name+'"}'
result = api_request(api_data(method,params,auth))
try:
return result['result'][0]['triggerid']
except :
return False
#建Trigger
def creat_trigger(host,http_code):
condition = alert_condition(http_code)
if not condition:
return "Only create 4XX status trigger!"
method = "trigger.create"
#4XX五分鐘平均大於300時警報
params = '"description": "Nginx Status '+http_code+'",\
"expression": "{'+host+':nginx.code[localhost,nginx-access-logs,'+http_code+'].avg(5m)}'+condition+'",\
"dependencies": [],\
"priority":1'
auth = get_auth()
data = api_data(method,params,auth)
result = api_request(data)
return result
if __name__ == "__main__":
http_code = sys.argv[1]
result = get_trigger('Nginx Status '+http_code)
if not result :
creat_trigger(localhost,http_code)
只要執行 # python create_trigger.py 404
就可以在Zabbix Configuration>Hosts>Triggers 裡面看到新建的Ttrigger囉!

補充
- Linux IP 搜尋
import subprocess
#自動搜尋Linux 本地IP
def get_host_ip():
try:
host = subprocess.check_output("ip addr | awk 'NR==1 {print substr($2,1,length($2)-3)}'", executable=None, shell=True)
out_bytes = host.decode('utf-8')
except:
out_bytes = "No ip!"
return out_bytes
- Zabbix Api 模糊搜尋
#params 參數加上searchWildcardsEnabled=True就可以在API用*模糊搜尋了
params = '"output": "triggerid",\
"search": {"description": "'+Name+'*"},\
"searchWildcardsEnabled":"True"'
參考資料:
메타데이터
- post_id
- 55c859f9e99f
- slug
- zabbix-api-實做範例程式碼-55c859f9e99f
- url
- https://medium.com/@d101201007/zabbix-api-%E5%AF%A6%E5%81%9A%E7%AF%84%E4%BE%8B%E7%A8%8B%E5%BC%8F%E7%A2%BC-55c859f9e99f
- canonical_url
- https://medium.com/@d101201007/zabbix-api-%E5%AF%A6%E5%81%9A%E7%AF%84%E4%BE%8B%E7%A8%8B%E5%BC%8F%E7%A2%BC-55c859f9e99f
- author_url
- https://medium.com/@d101201007
- status
- ok
- fetched_at
- 2026-07-29 10:25:49