文章目錄
一、API
1、什麼是API
API(Application Programming Interface,應用程序編程接口)是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。
Zabbix API允許你以編程方式檢索和修改Zabbix的配置,並提供對歷史數據的訪問。 它廣泛用於:
- 創建新的應用程序以使用Zabbix;
- 將Zabbix與第三方軟件集成;
- 自動執行常規任務。
Zabbix API是基於Web的API,作爲Web前端的一部分提供。它使用JSON-RPC 2.0協議,這意味着兩件事:
- 該API包含一組獨立的方法;
- 客戶端和API之間的請求和響應使用JSON格式進行編碼
Zabbix API由許多名義上分組的獨立API方法組成。每個方法執行一個特定任務。例如,方法 host.create 隸屬於 host 這個API分組 ,用於創建新主機。歷史上,API分組有時被稱爲“類”。
大多數API至少包含四種方法: get, create, update 和 delete ,分別是檢索,創建,更新和刪除數據,但是某些API提供一套完全不同的一組方法。
根據單個或分佈式平臺上不同軟件應用程序間的數據共享性能,可以將 API 分爲四種類型:
- 遠程過程調用(RPC):通過作用在共享數據緩存器上的過程(或任務)實現程序間的通信。
- 標準查詢語言(SQL):是標準的訪問數據的查詢語言,通過通用數據庫實現應用程序間的數據共享。
- 文件傳輸:文件傳輸通過發送格式化文件實現應用程序間數據共享。
- 信息交付:指松耦合或緊耦合應用程序間的小型格式化信息,通過程序間的直接通信實現數據共享。
2、Zabbix API的應用
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實驗的具體實現
2.1 查看zabbix監控系統的api接口
在可以訪問Zabbix內部的任何數據之前,需要登錄並獲得身份驗證令牌
。這可以使用user.login
方法來完成。
假想以標準ZabBix的Admin用戶登錄。那麼JSON請求將是這樣的:
[root@server1 ~]# vim zabbix-api
[root@server1 ~]# cat zabbix-api
curl -s -XPOST -H 'Content-Type: application/json-rpc' -d '
##-s 靜默模式,不輸出任何東西;curl默認的HTTP動詞是GET,使用`-X`參數可以支持其他動詞
{
"jsonrpc": "2.0", ##標準的JSON RPC參數以標示協議版本
"method": "user.login", ##獲取接口方法名
"params": {
"user": "Admin",
"password": "zabbix" ##zabbix系統監控的用戶名和密碼
},
"id": 1,
"auth": null ##用戶的身份令牌,因爲還沒有獲取所以爲null。
}' http://172.25.2.1/zabbix/api_jsonrpc.php | python -m json.tool
###python..將其標準化輸出
##使用post方法向該網址發送此json對象,api_jsonrpc.php是調用api的php腳本,可以安裝可視化前端目錄查看
[root@server1 ~]# chmod +x zabbix-api
[root@server1 ~]# ./zabbix-api
2.2 檢索主機(通過名稱獲取數據)
使用host.get
方法來獲取主機。
利用剛纔獲取的身份令牌,訪問zabbix中的數據,下面實現host.get方法檢索所有已配置主機的ID,主機名及其接口。
[root@server1 ~]# cat zabbix-api
curl -s -X POST -H 'Content-Type: application/json-rpc' -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": ["host"]
},
"auth": "ac1b158bfbce59b0d5a989e1bc12fc65",
"id": 1
}' http://172.25.2.1/zabbix/api_jsonrpc.php | python -m json.tool
[root@server1 ~]# ./zabbix-api
2.3 刪除監控中的主機
我們這個實驗是基於上一篇的基礎上做的,我們可以看到server2正在被監控。
使用host.delete
方法來刪除主機。
curl -s -X POST -H 'Content-Type: application/json-rpc' -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
"10264"
],
"auth": "ac1b158bfbce59b0d5a989e1bc12fc65",
"id": 1
}' http://172.25.2.1/zabbix/api_jsonrpc.php | python -m json.tool
此時,我們在web界面就可以看到server2已經刪除了。
2.4 創建監控主機
我們首先要獲取,模板號(templateid)和組號(groupid):
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "server2",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "172.25.2.2",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"auth": "ac1b158bfbce59b0d5a989e1bc12fc65",
"id": 1
}' http://172.25.2.1/zabbix/api_jsonrpc.php | python -m json.tool
創建一個具有IP接口的“Linux Server”主機,將其添加到主機組中,鏈接一個模板並且把MAC地址設置到主機資產清單裏
此時,我們同樣可以看到server2已經添加。