主机环境:rhel7.3 selinux and firewalld disabled
主机名 | ip | 服务 |
server1 | 172.25.254.1 | zabbix |
server2 | 172.25.254.2 | nginx |
server1:server端
server2:agent(被监控端)
基于此博文的基础
一、基础概念
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