1.zabbix 的 API 接口

(1)API定义

API(Application Programming Interface),应用程序编程接口,是一些预先定义的函数
目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部的工作机制的细节
简单来说,API就是对外的接口,利用API可以直接到达软件硬件内部来进行操作

(2)zabbix中的API

Zabbix API开始扮演着越来越重要的角色,尤其是在集成第三方软件和自动化日常任务时。很难想象管理数千台服务器而没有自动化是多么的困难。
Zabbix API为批量操作、第三方软件集成以及其他作用提供可编程接口。
Zabbix API是在1.8版本中开始引进并且已经被广泛应用。所有的Zabbix移动客户端都是基于API,甚至原生的WEB前端部分也是建立在它之上。
Zabbix API 中间件使得架构更加模块化也避免直接对数据库进行操作。它允许你通过JSON
RPC协议来创建、更新和获取Zabbix对象并且做任何你喜欢的操作【当然前提是你拥有认证账户】。

**Zabbix API提供两项主要功能:**

远程管理Zabbix配置
远程检索配置和历史数据

(3)API的工作流程如下:

API采用JSON-RPC实现这意味着调用任何函数,都需要向POST请求,输入输出数据都是以JSON格式
转备JSON对象,它描述了你想要做什么,比如创建主机、获取JSON格式响应

2.Zabbix API的应用

(1)API常用接口

user.login,用户登录
host.get(create|delete|update),主机操作
hostgroup.get(create|delete|update),主机组操作
item.get(create|delete|update),监控项目操作
history.get,历史数据查询
event.get,事件查询
trigger.get,触发器查询

【server1】

 1.zabbix 的 API 接口

   ##配合 zabbix 官方手册
   #https://www.zabbix.com/documentation/4.0/zh/manual/api 


【server1】使其可以上网
vim /etc/resolv.conf ##添加解析
nameserver 114.114.114.114

vim /etc/sysconfig/network-scripts/ifcfg-eth0 ##添加物理机网关
GATEWAY=172.25.78.250

systemctl restart network
route -n ##查看网关是否添加成功(切记开启物理机的防火墙)

1>测试并获取身份令牌

查看zabbix系统监控的API接口以及API脚本方式获取身份令牌(查看监控主机)

vim zabbix-api

curl -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",   #标准的JSON RPC参数以标示协议版本
"method": "user.login",  #获取接口方法名
"params": {
"user": "Admin",
"password": "zabbix"   #zabbix系统监控的用户名和密码
},
"id": 1,
"auth": null     #用户的身份令牌,因为还没有获取所以为null。
}' http://172.25.78.1/zabbix/api_jsonrpc.php  

#使用post方法向该网址发送此json对象,api_jsonrpc.php是调用api的php脚本,可以安装可视化前端目录查看

监控api调用 spring 监控api接口_API

监控api调用 spring 监控api接口_json_02

监控api调用 spring 监控api接口_vim_03

##这样显示不好看,加入 python 的 json 模块
 #python..将其标准化输出  

vim zabbix-api (在上一个的脚本基础上加)

监控api调用 spring 监控api接口_json_04

#-s 静默模式,不输出任何东西 #curl默认的HTTP动词是GET,使用-X参数可以支持其他动词。 启用curl命令模拟json格式的post请求。

[root@server1 ~]# chmod +x zabbix-api  给脚本添加执行权限
[root@server1 ~]# ./zabbix-api ##保存此时的"result"令牌 `

监控api调用 spring 监控api接口_json_05


利用刚才获取的身份令牌,访问zabbix中的数据,下面实现host.get方法检索所有已配置主机的ID,主机名及其接口。

2>使用身份令牌检索主机

这里代码复制官网
[root@server1 ~]# vim zabbix-api
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
#-s 静默模式,不输出任何东西  #curl默认的HTTP动词是GET,使用`-X`参数可以支持其他动词。  启用curl命令模拟json格式的post请求。

{
"jsonrpc": "2.0",    #标准的JSON RPC参数以标示协议版本
"method": "host.get",   #获取接口方法名
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "4d2e24d3db4fa495fc0b552ab319f4ab"  ##这里 auth 后面填写刚才获得的令牌
}' http://172.25.78.1/zabbix/api_jsonrpc.php | python -m json.tool

[root@server1 ~]# ./zabbix-api ##  运行可看到 zabbix 添加的主机

监控api调用 spring 监控api接口_API_06

监控api调用 spring 监控api接口_json_07

监控api调用 spring 监控api接口_监控api调用 spring_08

监控api调用 spring 监控api接口_json_09

监控api调用 spring 监控api接口_API_10

监控api调用 spring 监控api接口_json_11

3>尝试 api 添加删除主机

删除监控中的主机
host.delete(array hosts)
(array) 要删除主机的ID
 可以在zabbix监控平台上面(web界面)看到此时的server2是正在被监控的

##https://www.zabbix.com/documentation/4.0/zh/manual/api/reference/host/delete
先禁用自动注册

监控api调用 spring 监控api接口_API_12

[root@server1 ~]# vim zabbix-api
curl -s -XPOST -H “Content-Type: application/json-rpc” -d ’
{
“jsonrpc”: “2.0”,
“method”: “host.delete”,
“params”: [
“10265”
],
“id”: 2,
“auth”: “4d2e24d3db4fa495fc0b552ab319f4ab”
}’ http://172.25.78.1/zabbix/api_jsonrpc.php | python -m json.tool
[root@server1 ~]# ./zabbix-api

监控api调用 spring 监控api接口_vim_13

监控api调用 spring 监控api接口_监控api调用 spring_14

监控api调用 spring 监控api接口_API_15

监控api调用 spring 监控api接口_vim_16

4>使用 api 创建主机,创建监控主机

groups   添加主机的主机组 主机组已定义groupid属性
interfaces 为主机创建的接口
templates  连接到主机的模版  模版必须已经定义过templateid属性
macros  为主机创建的用户宏
inventory  主机资产请单属性

创建一个具有IP接口的“Linux Server”主机,将其添加到主机组中,链接一个模板并且把MAC地址设置到主机资产清单里

##https://www.zabbix.com/documentation/4.0/zh/manual/api/reference/host/create
 (1)复制官网配置并做修改  

[root@server1 ~]# vim zabbix-api
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "server3",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "172.25.78.3",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"id": 2,
"auth": "4d2e24d3db4fa495fc0b552ab319f4ab"
}' http://172.25.78.1/zabbix/api_jsonrpc.php | python -m json.tool
 

(2)Groupid 可以在 web 界面浏览器路径中看到,如下图,groupid=2

(3)templatesid 同理
4)运行
[root@server1 ~]# ./zabbix-api
网页查看server3添加成功

监控api调用 spring 监控api接口_json_17


监控api调用 spring 监控api接口_API_18

创建一个具有IP接口的“Linux Server”主机,将其添加到主机组中,链接一个模板并且把MAC地址设置到主机资产清单里

监控api调用 spring 监控api接口_API_19

监控api调用 spring 监控api接口_监控api调用 spring_20

模板号(templateid)和组号(groupid)的获取方法

监控api调用 spring 监控api接口_json_21


监控api调用 spring 监控api接口_API_22

监控api调用 spring 监控api接口_json_23

监控api调用 spring 监控api接口_API_24