主機環境:rhel7.3 selinux and firewalld disabled
主機名 | ip | 服務 |
---|---|---|
server1 | 172.25.254.1 | zabbix |
server2 | 172.25.254.2 | nginx |
server1:server端
server2:agent(被監控端)
基於此博文的基礎https://mp.csdn.net/mdeditor/89670269#
一、基礎概念
Zabbix API允許你以編程方式檢索和修改Zabbix的配置,並提供對歷史數據的訪問。它廣泛用於:
- 創建新的應用程序以使用Zabbix;
- 將Zabbix與第三方軟件集成;
- 自動執行常規任務。
Zabbix API是基於Web的API,作爲Web前端的一部分提供。它使用JSON-RPC 2.0協議,這意味着兩件事:
- 該API包含一組獨立的方法;
- 客戶端和API之間的請求和響應使用JSON格式進行編碼。
當完成了前端的安裝配置後,你就可以使用遠程HTTP請求來調用API。
在做實驗前,把zabbix監控的自動發現和自動註冊的相應配置都關掉
這裏就利用API獲得主機信息,添加主機刪除主機做以展示
1.編寫腳本,獲得 zabbix 監控系統的 API 接口
[root@server1 ~]# vim zabbix-api.sh
curl -s -XPOST -H "Content-Type: application/json-rpc" -d ' # 利用curl命令模擬json格式的post請求
{
"jsonrpc": "2.0", # 這是標準的JSON RPC參數以標示協議版本。所有的請求都會保持不變
"method": "user.login", # 利用用戶登陸的方式獲取API
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1, # 這個字段用於綁定JSON請求和響應。響應會跟請求有相同的"id"。在一次性發送多個請求時很有用,這些也不需要唯一或者連續
"auth": null
}' http://172.25.254.1/zabbix/api_jsonrpc.php | python -m json.tool
# 採用POST方法向http://example.com/zabbix/api_jsonrpc.php發送此JSON對象. http://example.com/zabbix/是Zabbix前端地址。
# api_jsonrpc.php是調用API的PHP腳本。可在安裝可視化前端的目錄下找到。
2.執行腳本可以獲得監控的 API 靈牌
[root@server1 ~]# sh zabbix-api.sh
{
"id": 1,
"jsonrpc": "2.0",
"result": "db391912b046a38829eb09863053060e"
}
響應對象又包含以下屬性:
jsonrpc - JSON-RPC協議的版本;
result - 方法返回的數據;
id - 相應請求的標識符。
- 檢索主機
我們現在有一個有效的用戶身份驗證令牌,可以用來訪問Zabbix中的數據。 例如,讓我們使用 host.get 方法檢索所有已配置主機的ID,主機名和接口 :
編寫腳本,查看zabbix主機和被監控主機信息
[root@server1 ~]# vim zabbix-api.sh
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "db391912b046a38829eb09863053060e" #我們獲得的身份令牌
}' http://172.25.254.1/zabbix/api_jsonrpc.php | python -m json.tool
執行腳本會獲得
[root@server1 ~]# sh zabbix-api.sh
{
"id": 2,
"jsonrpc": "2.0",
"result": [
{
"host": "Zabbix server",
"hostid": "10084",
"interfaces": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
}
]
}
- 創建主機
編寫腳本,創建主機
[root@server1 ~]# vim zabbix-api.sh
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "server2", # 被監控的主機名
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "172.25.254.2", # 被監控主機的ip
"dns": "",
"port": "10050" # zabbix-agent的端口號
}
],
"groups": [
{
"groupid": "2" # 建立的主機加入的羣組id
}
],
"templates": [
{
"templateid": "10001" # 建立的主機使用的模版id
}
],
"inventory_mode": 0,
"inventory": {
"macaddress_a": "01234",
"macaddress_b": "56768"
}
},
"id": 3,
"auth": "db391912b046a38829eb09863053060e"
}' http://172.25.254.1/zabbix/api_jsonrpc.php | python -m json.tool
執行腳本web下會發現主機被建立
[root@server1 ~]# sh zabbix-api.sh
- 刪除主機
[root@server1 ~]# vim zabbix-api.sh
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
"10266"
],
"id": 4,
"auth": "db391912b046a38829eb09863053060e"
}' http://172.25.254.1/zabbix/api_jsonrpc.php | python -m json.tool
執行腳本對應的主機會被刪除
[root@server1 ~]# sh zabbix-api.sh