← Back to list

Zabbix Api 實做範例程式碼

-CentOS7, Linux應用,Python 簡單80行實作

Derek Wu · 2019-11-11 07:30 · 0 claps · 5.4 min read
#zabbix #api #trigger-warning #python #報警
Open on Medium ↗
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