1. 程式人生 > >Zabbix API的介紹及使用

Zabbix API的介紹及使用

zabbix擁有完善的API,基於JSON RPC提供資產,主機,主機組,監控項,告警等方面的介面。在做運維自動化時,需要用API功能對zabbix二次開發。本文我將介紹如何用python信使用zabbix的API。

API介紹

  • API地址, http://你的zabbix域名/api_jsonrpc.php

  • API請求方法,採用POST

  • API請求資料結構

    {
    "jsonrpc": "2.0",                     // 版本
    "method": "user.login",               // 介面方法名
    "params": {
                                          //介面引數
    }, "auth": "", // 登入後的session,未登入為空 "id": 1 // 任意數 }
  • API常用的介面

    • user.login,使用者登入
    • host.get(create|delete|update),主機操作
    • hostgroup.get(create|delete|update),主機組操作
    • item.get(create|delete|update),監控專案操作
    • history.get,歷史資料查詢
    • event.get,事件查詢
    • trigger.get,觸發器查詢

API呼叫

  1. zabbix的介面呼叫前需要先進行登入驗證,獲取sessionid
  2. 構造某個介面的請求引數,並將sessionid加入到引數的auth欄位,POST請求即可

登入

import requests
import json

url = "http://xxxx/api_jsronrpc.php"
header = {"Content-Type": "application/json-rpc"}
username = zabbix
password = zabbix

def do_request(data):
    try:
        request = requests.post(url=url, headers=header, data=json.dumps(data), timeout=60
) if request.json()["result"]: return request.json()["result"] except requests.ConnectionError: return None else: return None def get_token(): data = { "jsonrpc": "2.0", "method": "user.login", "params": { "user": username, "password": password }, "id": 0, "auth": None } token = do_request(data) if not token: print("登入失敗") print(token)

檢視主機

def get_host(hostid):
    data = json.dumps({
            "jsonrpc": "2.0",
            "method": "host.get",
            "params": {
                "output": "extend",
            },
            "id": 1,
            "auth": auth()
    })
    resp = do_request(data)
    print(resp)

檢視主機的監控項

def get_host(hostid):
    data = json.dumps({
            "jsonrpc": "2.0",
            "method": "item.get",
            "params": {
                "output": "itemid",
                "hostids": hostid,
                "search": {
                    "key_": "system.cpu.load[,avg1]"
                }
            },
            "id": 1,
            "auth": auth()
    })
    resp = do_request(data)
    print(resp)

查詢主機的監控項歷史資料

def get_host(itemid):
    ts = time.time() - 900              //獲取最近900秒內的資料
    data = json.dumps({
            "jsonrpc": "2.0",
            "method": "history.get",
            "params": {
                "output": "extend",
                "history": 0,
                "itemids": itemid,
                "limit": 0,
                "time_from": ts,
                "sortfield": "clock",
                "sortorder": "ASC",
                # "hostids": hostid,
            },
            "id": 1,
            "auth": auth()
    })
    resp = do_request(data)
    print(resp)