Zabbix API——開啟運維監控自動化之路

Zabbix API——開啟運維監控自動化之路

隨著互聯網對監控需求的升級與擴大,Zabbix API 在監控中的角色也愈來愈重要,尤其是在集成第三方軟件和自動化日常任務時。想象一下,如果沒有自動化技術,管理數千臺服務器是多麼的困難!

Zabbix API 為自動化的批量操作和第三方軟件集成以及其他作用提供可編程接口,從而提升了Zabbix功能上的各種可能性。安全性上,Zabbix API 中間件使得架構更加模塊化也避免直接對數據庫進行操作。

Zabbix API典型工作流

Zabbix API——開啟運維監控自動化之路

使用 API 的基本步驟

  1. 準備JSON對象,它描述了你想要做什麼(創建主機,獲取圖像,更新監控項等)。
  2. 採用POST方法向http://example.com/zabbix/apijsonrpc.php發送此JSON對象. http://example.com/zabbix/是Zabbix前端地址。apijsonrpc.php是調用API的PHP腳本。可在安裝可視化前端的目錄下找到。
  3. 獲取 SESSIONID
  4. 通過 SESSIONID 建立後續的連接
  5. 提交 POST 數據,格式為 JSON,其中放對應的方法,獲取需要的數據。

Zabbix API功能與應用

Zabbix API 提供兩項主要功能

  1. 遠程管理 Zabbix 配置
  2. 遠程檢索配置和歷史數據

Zabbix API允許以編程方式檢索和修改Zabbix的配置,並提供對歷史數據的訪問;

它被廣泛用於:

  • 創建新的應用程序以使用Zabbix;
  • 將Zabbix與第三方軟件集成;
  • 自動執行日常任務。

例如:1)使用zabbix進行批量管理,比如:我們要添加1000臺主機。

2)使用zabbix結合微信、email、釘釘等進行移動端的報警。

Zabbix API的使用

Zabbix API——開啟運維監控自動化之路

使用 curl 模擬 API 的使用

1.獲取認證

在訪問Zabbix內部的任何數據之前,需要登錄並獲取身份驗證令牌。這可以使用該user.login方法完成。假設要以標準Zabbix Admin用戶身份登錄。JSON請求如下所示:

$ curl -s -X POST -H 'Content-Type:application/json' -d '
> {
> "jsonrpc": "2.0",
> "method": "host.get",
> "params": {
> "user": "Admin",
> "password": "zabbix"
> },
> "id": 1
> }' http://172.16.241.130/zabbix/api_jsonrpc.php | python -m json.tool
{
"jsonrpc": "2.0",
"result": "581cc92624202bddaeff3a90cca181dc",
"id": 1
}

請求對象的具體屬性:

  • jsonrpc- API使用的JSON-RPC協議版本; Zabbix API實現了JSON-RPC 2.0版;
  • method- 被調用的API方法;
  • params- 將傳遞給API方法的參數;
  • id - 請求的任意標識符;
  • auth - 用戶認證令牌; 既然還沒有,那就設定了null。

2.用獲取的 SESSIONID 去調用 API 的 host.get 方法請求 hostid

$ curl -s -X POST -H 'Content-Type:application/json' -d '
> {
> "jsonrpc": "2.0",
> "method": "host.get",
> "params": {
> "output": ["hostid"]
> },
> "auth": "581cc92624202bddaeff3a90cca181dc",
> "id": 1
> }' http://172.16.241.130/zabbix/api_jsonrpc.php | python -m json.tool
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084"
}
],
"id": 1
}

響應對象的屬性:

  • jsonrpc - 再次,JSON-RPC協議的版本;
  • result - 方法返回的數據;
  • id - 相應請求的標識符。

python 調用 zabbix api 接口的自動化實例

Zabbix API——開啟運維監控自動化之路

1.獲取 KEY

!/usr/bin/env python2.7
#coding=utf-8
import json
import urllib2
# based url and required header
url = "http://monitor.example.com/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 And Password:",e.code
else:
response = json.loads(result.read())
result.close()
print "Auth Successful. The Auth ID Is:",response['result']

2.獲取 hostlist

#!/usr/bin/env python2.7
#coding=utf-8
import json
import urllib2
#xiaorui.cc
url = "http://10.10.10.61/api_jsonrpc.php"
header = {"Content-Type": "application/json"}
# request json
data = json.dumps(
{
"jsonrpc":"2.0",

"method":"host.get",
"params":{
"output":["hostid","name"],
"filter":{"host":""}
},
"auth":"dbcd2bd8abc0f0320fffab34c6d749d3",
"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']

目前已支持25個API接口,更多的應用請查看API官方文檔。

Zabbix API——開啟運維監控自動化之路


分享到:


相關文章: