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如下:
#這裡需要確保url中的使用者名稱和密碼匹配。下面是執行結果:!/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:
"auth failed, please check your name and password:
",e.code
else
: response =json.loads(result.read())
result.close()
"auth successful. the auth id is:
",response['
result
']
可以看到,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'):
'we failed to reach a server.
'reason:
', e.reason
elif hasattr(e, '
code'):
'the server could not fulfill the request.
'error code:
', e.code
else
: response =json.loads(result.read())
result.close()
"number of hosts:
", len(response['
result'])
for host in response['
result']:
"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...