Zabbix二次開發_01基礎

最近有個想法:想作一個zabbix數據的二次呈現,因此來寫一下Zabbix的api的內容。php

先說下zabbix api的認證基礎。前端

 Zabbix API簡介

Zabbix API開始扮演着愈來愈重要的角色,尤爲是在集成第三方軟件和自動化平常任務時。。Zabbix API爲批量操做、第三方軟件集成以及其餘做用提供可編程接口。python

Zabbix API是在1.8版本中開始引進而且已經被普遍應用。全部的Zabbix移動客戶端都是基於API,甚至原生的WEB前端部分也是創建在它之上。Zabbix API 中間件使得架構更加模塊化也避免直接對數據庫進行操做。它容許你經過JSON
RPC協議來建立、更新和獲取Zabbix對象而且作任何你喜歡的操做。數據庫

Zabbix API提供兩項主要功能:編程

  • 遠程管理Zabbix配置
  • 遠程檢索配置和歷史數據

 

使用JSONjson

API 採用JSON-RPC實現。這意味着調用任何函數,都須要發送POST請求,輸入輸出數據都是以JSON格式。大體工做流以下:api

  • 準備JSON對象,它描述了你想要作什麼(建立主機,獲取圖像,更新監控項等)。安全

  • 採用POST方法向 http://example.com/zabbix/api_jsonrpc.php發送此JSON對象,http://example.com/zabbix/是Zabbix前端地址 ,api_jsonrpc.php是調用API的PHP腳本。可在安裝可視化前端的目錄下找到。架構

  • 獲取JSON格式響應。app

  • 注:請求除了必須是POST方法以外,HTTP Header Content-Type必須爲【application/jsonrequest,application/json-rpc,application/json】其中之一。

能夠採用腳本或者任何"手動"支持JSON RPC的工具來使用API。而首先須要瞭解的就是如何驗證和如何使用驗證ID來獲取想要的信息。後面的演示會以Python腳本和基於Curl的例子來呈現API的基本使用。

基本請求格式

Zabbix API 簡化的JSON請求以下:

 1 {
 2 "jsonrpc": "2.0",
 3 "method": "method.name",
 4 "params": {
 5 "param_1_name": "param_1_value",
 6 "param_2_name": "param_2_value"
 7 },
 8 "id": 1,
 9 "auth": "159121b60d19a9b4b55d49e30cf12b81",
10 }

 

下面一行一行來看:

  • "jsonrpc": "2.0"-這是標準的JSON RPC參數以標示協議版本。全部的請求都會保持不變。

  • "method": "method.name"-這個參數定義了真實執行的操做。例如:host.create、item.update等等

  • "params"-這裏經過傳遞JSON對象來做爲特定方法的參數。若是你但願建立監控項,"name"和"key_"參數是須要的,每一個方法須要的參數在Zabbix API文檔中都有描述。

  • "id": 1-這個字段用於綁定JSON請求和響應。響應會跟請求有相同的"id"。在一次性發送多個請求時頗有用,這些也不須要惟一或者連續

  • "auth": "159121b60d19a9b4b55d49e30cf12b81"-這是一個認證令牌【authentication token】用以鑑別用戶、訪問API。這也是使用API進行相關操做的前提-獲取認證ID。

 

 API 使用

  • 環境準備

Zabbix API是基於JSON-RPC 2.0規格,具體實現能夠選擇任何你喜歡的編程語言或者手動方式。這裏咱們採用的Python和基於Curl的方式來作示例。Python 2.7版本已經支持JSON,因此再也不須要其餘模塊組件。固然能夠採用Perl、Ruby、PHP之類的語言,使用前先確保相應JSON模塊的安裝。

  • 身份驗證

任何Zabbix API客戶端在真正工做以前都須要驗證它自身。在這裏是採用User.login方法。這個方法接受一個用戶名和密碼做爲參數並返回驗證ID,一個安全哈希串用於持續的API調用(在使用User.logout以前該驗證ID均有效)。

認證獲取簡例

1.     user.login方法獲取zabbix server的認證結果官方地址:https://www.zabbix.com/documentation/2.2/manual/api/reference/user/login
python腳本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[iyunv@yang python]# cat auth.py
#!/usr/bin/env python2.7
#coding=utf-8
import json
import urllib2
# based url and required header
url = "http://1.1.1.1/zabbix/api_jsonrpc.php"
header = {"Content-Type":"application/json"}
# auth user and password
data = json.dumps(
{
   "jsonrpc": "2.0",
   "method": "user.login",
   "params": {
   "user": "Admin",
   "password": "zabbix"
},
"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 AndPassword:",e.code
else:
   response = json.loads(result.read())
   result.close()
print"Auth Successful. The Auth ID Is:",response['result']



python腳本運行結果:

1
2
[iyunv@yang python]# python auth.py
Auth Successful. The Auth ID Is: a0b82aae0842c2041386a61945af1180



curl命令:

1
2
3
curl -i -X POST -H 'Content-Type:application/json' -d '{"jsonrpc":
"2.0","method":"user.login","params":{"user":"admin","password":"zabbix"},"auth":
null,"id":0}' http://1.1.1.1/zabbix/api_jsonrpc.php



curl命令運行結果:

 

1
{"jsonrpc":"2.0","result":"b895ce91ba84fe247e444817c6773cc3","id":0}

比較來看,採用腳本能夠有更多的靈活性,而基於CURL的方式,對結果的處理不是很方便。原理則都是相通的。

 

除了這些獲取信息之外,採用API調用一樣能夠進行建立操做,更新操做和刪除操做等等。這也很容易讓咱們聯想起數據庫操做,固然比較這些採用API

調用獲取結果的方式,也不能忘掉這種最直接而危險的方式。在開始討論中已經提到,Zabbix如今自帶的前端實現部分是採用數據庫操做,部分是基於API
調用。

 

API調用數據流程

  • 數據流程

下面的流程圖表明瞭Zabbix API
工做的典型工做流。驗證(方法user.login)是獲取驗證ID的強制步驟。這個ID又容許咱們調用API提供的任何權限容許的方法來進行操做。在之
前的例子中沒有提到user.logout方法,這也是一次驗證ID可以重複使用的緣由所在。使用user.logout方法後將會使驗證ID失效,後面
的操做將不能再使用此ID。

 

相關文章
相關標籤/搜索