ZABBIX API簡介及使用

2021-09-07 09:37:53 字數 3795 閱讀 3457

zabbix api開始扮演著越來越重要的角色,尤其是在整合第三方軟體和自動化日常任務時。很難想象管理數千台伺服器而沒有自動化是多麼的困難。zabbix api為批量操作、第三方軟體整合以及其他作用提供可程式設計介面。

zabbix api是在1.8版本中開始引進並且已經被廣泛應用。所有的zabbix移動客戶端都是基於api,甚至原生的web前端部分也是建立在它之上。zabbix api 中介軟體使得架構更加模組化也避免直接對資料庫進行操作。它允許你通過json rpc協議來建立、更新和獲取zabbix物件並且做任何你喜歡的操作【當然前提是你擁有認證賬戶】。

zabbix api提供兩項主要功能:

使用json

api 採用json-rpc實現。這意味著呼叫任何函式,都需要傳送post請求,輸入輸出資料都是以json格式。大致工作流如下:

可以採用指令碼或者任何"手動"支援json rpc的工具來使用api。而首先需要了解的就是如何驗證和如何使用驗證id來獲取想要的資訊。後面的演示會以python指令碼和基於curl的例子來呈現api的基本使用。

基本請求格式

zabbix api 簡化的json請求如下:

,

"id": 1

,

"auth

": "

159121b60d19a9b4b55d49e30cf12b81",

}

下面一行一行來看:

任何zabbix api客戶端在真正工作之前都需要驗證它自身。在這裡是採用user.login方法。這個方法接受乙個使用者名稱和密碼作為引數並返回驗證id,乙個安全雜湊串用於持續的api呼叫(在使用user.logout之前該驗證id均有效)。具體python**auth.py如下:

#

!/usr/bin/env python2.7

#coding=utf-8

import

json

import

urllib2

#based url and required header

url = "

"header =

#auth user and password

data =json.dumps(,"

id": 0})

#create request object

request =urllib2.request(url,data)

for key in

header:

request.add_header(key,header[key])

#auth and get authid

try:

result =urllib2.urlopen(request)

except

urlerror as e:

print

"auth failed, please check your name and password:

",e.code

else

: response =json.loads(result.read())

result.close()

print

"auth successful. the auth id is:

",response['

result

']

這裡需要確保url中的使用者名稱和密碼匹配。下面是執行結果:

可以看到,auth.py成功連線並認證。現在有了驗證id,它能夠在新的api呼叫中被重用。

下面再來看基於curl的方式來進行驗證是如何實現的:

這裡舉例說明如何獲取監控主機列表【host list】。這段指令碼需要採用auth.py中獲取的驗證id並執行host.get方法來獲取主機列表。來看具體**get_host.py:

#

!/usr/bin/env python2.7

#coding=utf-8

import

json

import

urllib2

#based url and required header

url = "

"header =

#request json

data =json.dumps(

},"auth

":"2ee379e516f386ca4c24da7fd9fd5bb4

", #

the auth id is what auth script returns, remeber it is string"id

":1,})#

create request object

request =urllib2.request(url,data)

for key in

header:

request.add_header(key,header[key])

#get host list

try:

result =urllib2.urlopen(request)

except

urlerror as e:

if hasattr(e, '

reason'):

print

'we failed to reach a server.

'print

'reason:

', e.reason

elif hasattr(e, '

code'):

print

'the server could not fulfill the request.

'print

'error code:

', e.code

else

: response =json.loads(result.read())

result.close()

print

"number of hosts:

", len(response['

result'])

for host in response['

result']:

print

"host id:

",host['

hostid

'],"

host name:

",host['

name

']

部分結果列表:

結果太多,未予顯示。比較來看,採用指令碼可以有更多的靈活性,而基於curl的方式,對結果的處理不是很方便。原理則都是相通的。

除了這些獲取資訊以外,採用api呼叫同樣可以進行建立操作,更新操作和刪除操作等等。這也很容易讓我們聯想起資料庫操作,當然比較這些採用api呼叫獲取結果的方式,也不能忘掉這種最直接而危險的方式。在開始討論中已經提到,zabbix現在自帶的前端實現部分是採用資料庫操作,部分是基於api呼叫。在api還不是很成熟的現在,具體採用哪種方式,需要根據業務需求再來確定。

下面的流程圖代表了zabbix api 工作的典型工作流。驗證(方法user.login)是獲取驗證id的強制步驟。這個id又允許我們呼叫api提供的任何許可權允許的方法來進行操作。在之前的例子中沒有提到user.logout方法,這也是一次驗證id能夠重複使用的原因所在。使用user.logout方法後將會使驗證id失效,後面的操作將不能再使用此id。

ref: 

ZABBIX API簡介及使用

zabbix api開始扮演著越來越重要的角色,尤其是在整合第三方軟體和自動化日常任務時。很難想象管理數千台伺服器而沒有自動化是多麼的困難。zabbix api為批量操作 第三方軟體整合以及其他作用提供可程式設計介面。zabbix api是在1.8版本中開始引進並且已經被廣泛應用。所有的zabbix...

Zabbix api的使用方法(python版)

時間2013 12 21 作者 itnihao 郵箱 itnihao qq.com 部落格 如需引用,請註明以上資訊,謝謝合作 zabbix api 具有重要的功能 為第三方呼叫 zabbix 批量操作提供可程式設計介面 從而輕鬆的用於自己的業務系統,運維系統相整合。zabbix api 是基於前端...

NSUserDefaults簡介及使用

nsuserdefaults類提供了乙個與預設系統進行互動的程式設計介面。nsuserdefaults物件是用來儲存,恢復應用程式相關的偏好設定,配置資料等等。預設系統允許應用程式自定義它的行為去迎合使用者的喜好。你可以在程式執行的時候從使用者預設的資料庫中讀取程式的設定。同時nsuserdefau...