1、zabbix api介紹
Zabbix API允許以編程方式檢索和修改Zabbix的配置,並提供對歷史數據的訪問。它廣泛用於:
創建新的應用程序以使用Zabbix
將Zabbix與第三方軟件集成
自動執行常規任務
Zabbix API是基於Web的API,作為Web前端的一部分提供。它使用JSON-RPC 2.0協議,這意味着兩件事:
該API包含一組獨立的方法;
客戶端和API之間的請求和響應使用JSON格式進行編碼。
調用api的過程:發送一個http請求,請求方法,提交數據,請求url
zabbix api的使用可以查閱官方文檔https://www.zabbix.com/documentation/3.4/zh/manual/api
2、獲取token
使用curl命令模擬登錄獲取到一個token
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}' http://10.0.0.63/zabbix/api_jsonrpc.php
這里獲取到的token值為29752350d3a88fc18e79b3e655b1506b
或者執行以下shell腳本獲取token
[root@zabbix scripts]# vim zabbix-get-token.sh
#!/bin/bash
admin=Admin #zabbix用戶
pass=zabbix #密碼
ZBX='10.0.0.63' #zabbix-server的地址
curl -s -X POST -H 'Content-Type:application/json' -d'
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "'$admin'",
"password": "'$pass'"
},
"id": 1
"auth": null
}' http://$ZBX/zabbix/api_jsonrpc.php|grep -Po 'result[" :]+\K[^"]+'
3、格式及參數說明
zabbix-api的json格式主要包括以下內容:
jsonrpc - API使用的JSON-RPC協議的版本; Zabbix API實現JSON-RPC版本2.0;
method - 調用的API方法;
params - 將被傳遞給API方法的參數;
auth -用戶認證令牌;
id - 請求的任意標識符;
zabbix表結構
hosts主要表結構和各字段的意思
hostid 主機ID/模版ID readonly
proxy_hostid 代理主機ID,即這台主機通過該代理主機去監控
host 主機名,監控agent端ID字段
status 主機狀態
0 已啟用,監視這台主機
1 停用的,不監視這台主機
3 模版
5 主動模式 創建代理時使用
6 被動模式 創建代理時使用
available 客戶端agent主機是否可用 readonly
0 未知或模版
1 可用
2 不可用
description 描述主機
disable_until 下一次輪詢一個不可用主機的時間,默認只讀readonly
ipmi_authtype 認證算法
-1 默認
0 無
1 MD2
2 MD5
4 Straight
5 OEM
6 RMCP+
ipmi_privilege 特權級別
1 回調
2 用戶 默認
3 操作者
4 管理者
5 OEM
ipmi_available 可用的ipmiagent
0 未知
1 可用
2 不可用
ipmi_disable_until ipmi不可用時下一次的輪詢時間
ipmi_error ipmi不可用的錯誤信息
ipmi_errors_from ipmi不可用狀態從什么時候開始
ipmi_password ipmi 密碼
ipmi_username ipmi用戶名
jmx_available 可用的jmxagent
0 未知
1 可用
2 不可用
jmx_disable_until 當jmx不可用時下一次輪詢當時間
jmx_error jmx不可用錯誤信息
jmx_errors_from jmx 不可用狀態開始時間
maintenance_from 資產維護開始時間
maintenance_status 生效當狀態
0 不維護
1 維護生效
maintenance_type 生效維護的類型
0 通過數據收集維護 默認
1 非數據收集維護
maintenanceid 維護的ID,如果當前主機處於維護狀態,否則為null
snmp_available snmp是否可用
0 未知
1 可用
2 不可用
snmp_disable_until 當snmp不可用時下一次輪詢時間
snmp_error 不可用時錯誤信息
snmp_errors_from 錯誤開始時間
error 當agent不可用時顯示當錯誤信息
error_from 故障時間 當agent不可用時開始的時間
name 主機顯示的名稱,即可見名稱,默認是用host字段是值填充
flags 主機來源
0 表示普通的主機
4 表示自動發現的主機
inventory_mode 主機資產類型
-1 禁用
0 手動,默認值
自動
監控項items
itemid 監控項ID
type 監控項類型
0 Zabbix 客戶端,
1 SNMPv1 客戶端,
2 Zabbix采集器,
3 簡單檢查,
4 SNMPv2 客戶端,
5 Zabbix內部,
6 SNMPv3 客戶端,
7 Zabbix客戶端(主動式),
8 Zabbix整合,
10 外部檢查,
11 數據庫監控,
12 IPMI客戶端,
13 SSH 客戶端,
14 TELNET客戶端,
15 可計算的,
16 JMX agent代理程序,
17 SNMP trap
hostid 關聯主機ID
name 監控項名稱
key_ 監控項key值
delay 間隔/秒
history 歷史數據保留時間/天
trends 趨勢數據保留時間/天 默認365天
status 監控項啟用狀態
0 啟用
1 禁用
value_type 數據類型,對應的存放歷史數據表
0 history表 numeric float
1 history_str表 character
2 history_log表 log
3 history_uint表 numeric unsigned
4 history_text表 text
authtype ssh認證方法,只有通過ssh代理方式時使用
0 密碼
1 public key
units 數據類型單位
data_type 數據類型
0 decimal 十進制
1 octal 八進制
2 hexadecimal 十六進制
3 boolean 布爾
delay_flex 自定義間隔
delta 存儲的值
0 (default) as is
1 Delta, speed per second
2 Delta, simple change
error 如果監控項有問題會自動更新這個錯誤信息 readonly
history 監控項保持的歷史數據時長,默認90天,單位天
formula 公式,自定義乘數
1 默認值
lastclock 監控項最后一次更新時間
logtimefmt 格式化日志時間
templateid 監控項對應的父模版ID,該ID自關聯,模版對應的為hostid相當於模版分組
flags 監控項來源
0 普通
4 自動發現
interfaceid 網卡IP,對應interface表interfaceid
params 額外的參數類型取決於監控項
針對ssh和telnet監控項 執行腳本
數據庫監控項 執行sql
計算類型 執行公式
port 針對snmp監控項,端口監控
password 密碼認證,針對簡單檢查,ssh,telnet,數據庫監視,jmx監控項
description 監控項描述信息
state 該監控項是否適用
0 支持
1不支持
4、使用zabbix api進行操作示例
4.1 創建主機
curl -s -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"method": "host.create", #指定方法創建主機
"params": {
"host": "10.0.0.51", #主機ip
"interfaces": [
{
"type": 1, #接口類型1代表agent接口
"main": 1,
"useip": 1, #1表示使用ip
"ip": "10.0.0.51", #ip地址
"dns": "",
"port": "10050" #端口
}
],
"groups": [
{
"groupid": "9" #組id
}
],
"templates": [
{
"templateid": "10001" #模板id
}
]
},
"auth": "29752350d3a88fc18e79b3e655b1506b",
"id": 1
}' http://10.0.0.62/zabbix/api_jsonrpc.php
執行上述命令即可在命令行添加一台監控主機,可以進一步編寫shell腳本批量創建主機
[root@zabbix scripts]# vim hostadd.sh
#/bin/bash
for n in `seq -f 10.0.0.%0g 60 100`
do
curl -s -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "'$n'",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "'$n'",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "9"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"auth": "29752350d3a88fc18e79b3e655b1506b",
"id": 1
}' http://10.0.0.62/zabbix/api_jsonrpc.php
done
4.2 刪除主機
curl -s -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
"10117" #主機id
],
"auth": "29752350d3a88fc18e79b3e655b1506b",
"id": 1
}' http://10.0.0.63/zabbix/api_jsonrpc.php
執行上述命令即可在命令行刪除一台監控主機,可以進一步編寫shell腳本批量刪除上面創建的主機
[root@zabbix scripts]# vim hostdel.sh
#/bin/bash
curl -s -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"method": "host.get", #利用host.get方法得到主機id
"params": {
"output": "hostid",
"selectGroups": "groupid"
},
"auth": "29752350d3a88fc18e79b3e655b1506b",
"id": 1
}' http://10.0.0.63/zabbix/api_jsonrpc.php >/tmp/a.txt
for n in `seq 2 43`
do
hostid=`cat /tmp/a.txt|jq '.result['$n'].hostid'|sed 's#"##g'` #過濾出上面批量添加的主機id
curl -s -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"method": "host.delete", #利用host.delete方法批量刪除主機
"params": [
"'$hostid'"
],
"auth": "29752350d3a88fc18e79b3e655b1506b",
"id": 1
}' http://10.0.0.63/zabbix/api_jsonrpc.php
done
4.3 創建一個用戶
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "user.create", #利用user.create方法創建用戶
"params": {
"alias": "test", #用戶名
"passwd": "123456", #密碼
"usrgrps": [
{
"usrgrpid": "7" #用戶所屬組id
}
]
},
"auth": "29752350d3a88fc18e79b3e655b1506b",
"id": 1
}' http://10.0.0.63/zabbix/api_jsonrpc.php
4.4 刪除一個用戶
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "user.delete", #利用user.delete方法刪除用戶
"params": [
"3" #用戶id
],
"auth": "29752350d3a88fc18e79b3e655b1506b",
"id": 1
}' http://10.0.0.63/zabbix/api_jsonrpc.php