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
部分内容参考来源:https://www.qstack.com.cn/archives/228.html
来源:https://www.cnblogs.com/ssgeek/p/9279775.html