本实验是在《Zabbix分布式监控实战(1)——Zabbix简介及Zabbix监控平台的搭建》实验基础上进行的,已经配置好了zabbix-server和zabbix-agent主机,并在zabbix-web界面配置了自动注册。

博客链接:https://blog.csdn.net/dghfttgv/article/details/105021181

目录

一、认识API

  •         1、什么是Zabbix API
  •         2、Zabbix API提供的主要功能
  •         3、使用 JSON操作API
  •         4、API分类
  •         5、API常用接口

二、配置Zabbix的API接口

  •         实验环境
  •         实验
  •             1、测试并获取身份令牌(user.login接口)
  •             2、使用身份令牌检索主机(host.get接口)
  •             3、尝试 api 添加删除主机(host.delete接口)
  •             4、使用 api 创建主机(host.create接口)

 

一、API简介

1、什么是Zabbix API

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

Zabbix API 开始扮演着越来越重要的角色,尤其是在集成第三方软件和自动化日常任务时。很难想象管理数千台服务器而没有自动化是多么的困难。
Zabbix API 为批量操作、第三方软件集成以及其他作用提供可编程接口。

Zabbix API 是在 1.8 版本中开始引进并且已经被广泛应用。所有的 Zabbix 移动客户端都是基于 API,甚至原生的 WEB 前端部分也是建立在它之上。
Zabbix API 中间件使得架构更加模块化也避免直接对数据库进行操作。
它允许你通过 JSON RPC 协议来创建、更新和获取 Zabbix 对象并且做任何你喜欢的操作。


2、Zabbix API提供的主要功能

  1.     远程管理 Zabbix 配置
  2.     远程检索配置和历史数据
  3.     自动执行常规任务

3、使用 JSON操作API

API 采用 JSON-RPC 实现。这意味着调用任何函数,都需要发送 POST 请求,输入输出数据都是以 JSON 格式。

Zabbix API由许多名义上分组的独立API方法组成。每个方法执行一个特定任务。例如,方法 host.create 隶属于 host 这个API分组 ,用于创建新主机。历史上,API分组有时被称为“类”。
大多数API至少包含四种方法: get, create, update 和 delete ,分别是检索,创建,更新和删除数据,但是某些API提供一套完全不同的一组方法。


4、API分类

根据单个或分布式平台上不同软件应用程序间的数据共享性能,可以将 API 分为四种类型:

  •     远程过程调用(RPC):通过作用在共享数据缓存器上的过程(或任务)实现程序间的通信。
  •     标准查询语言(SQL):是标准的访问数据的查询语言,通过通用数据库实现应用程序间的数据共享。
  •     文件传输:文件传输通过发送格式化文件实现应用程序间数据共享。
  •     信息交付:指松耦合或紧耦合应用程序间的小型格式化信息,通过程序间的直接通信实现数据共享。

5、API常用接口

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

 

二、配置Zabbix的API接口

实验环境

主机名        ip服务版本
server1172.25.6.1zabbix-server,zabbix-web,mariadb-server  zabbix-agentrhel7.5
server2172.25.6.2zabbix-agentrhel7.5
server2172.25.6.3zabbix-agentrhel7.5

实验

在server1上:

1、测试并获取身份令牌(user.login接口)

步骤一:

编写zabbix-api文件,获取身份令牌

[root@server1 ~]# vim zabbix-api                                 ##编写zabbix-api文件

curl -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",  #标准的JSON RPC参数以标示协议版本
"method": "user.login", #获取接口方法名,用户登陆
"params": {
"user": "Admin",   #zabbix系统监控的用户名和密码
"password": "zabbix"
},
"id": 1,
"auth": null   #用户的身份令牌,因为还没有获取所以为null
}' http://172.25.1.1/zabbix/api_jsonrpc.php        ## #api_jsonrpc.php是调用api的php脚本,可以安装可视化前端目录查看


步骤二:

运行脚本 

[root@server1 ~]# chmod +x zabbix-api         
[root@server1 ~]# ./zabbix-api 

(上图看到的结果排列顺序错乱 !!!)

 

步骤三:

上述显示的结果不清晰,加入 python 的 json 模块使实验的效果更佳

[root@server1 ~]# vim zabbix-api1

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}' http://172.25.6.1/zabbix/api_jsonrpc.php | python -m json.tool  ###加入 -s 参数和 json 模块

 

步骤四:

运行脚本

[root@server1 ~]# chmod +x zabbix-api1
[root@server1 ~]# ./zabbix-api1

 

2、使用身份令牌检索主机(host.get接口)

步骤一:

编写zabbix-api2文件检索主机,将上述查看到的result令牌添加到auth后

[root@server1 ~]# vim zabbix-api2
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 1,
"auth": "2a54817c66eb90fbed7e8a70465e90e7"
}' http://172.25.6.1/zabbix/api_jsonrpc.php | python -m json.tool

 

步骤二:

执行脚本

[root@server1 ~]# chmod +x zabbix-api2             
[root@server1 ~]# ./zabbix-api2

 

3、尝试 api 添加删除主机(host.delete接口)

步骤一:

先在web界面禁用之前配置的自动注册以免对实验造成影响

 

删除server2主机实验之前的页面

 

 

步骤二:

编辑zabbix-api文件,调用host.delete接口

[root@server1 ~]# vim zabbix-api3  
[root@server1 ~]# cat zabbix-api3

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
"10311"          ##server主机的hostip  
],
"id": 1,
"auth": "74000ee259c5420b050b2b42f2360091"
}' http://172.25.6.1/zabbix/api_jsonrpc.php | python -m json.tool

查看server2主机的ip

 


步骤三:

运行脚本

[root@server1 ~]# chmod +x zabbix-api3
[root@server1 ~]# ./zabbix-api3

 

步骤四:

在web界面查看,server2已经被删除

 

4、使用 api 创建主机(host.create接口)

步骤一:

在web界面查看Groupid

 

查看到的groupid为2

 

步骤二:

查看模板的编号templatesid

查看到的模板编号为 :10001

 

步骤三:

编辑zabbix-api文件,调用host.create接口创建server2主机

[root@server1 ~]# vim  zabbix-api4      ##编辑文件

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.6.2",           ##添加的主机ip
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"                 ##把它放到编号为2的主机群组中
}
],
"templates": [
{
"templateid": "10001"          ##把它放到编号为篇10001模板中

}
]
},
"id": 1,
"auth": "74000ee259c5420b050b2b42f2360091"
}' http://172.25.6.1/zabbix/api_jsonrpc.php | python -m json.tool

 

步骤四:

运行脚本

[root@server1 ~]# chmod +x zabbix-api4
[root@server1 ~]# ./zabbix-api4

 

步骤五:

web界面查看,server2已经被成功添加

 

总结:

采用这种方法添加主机相比于自动发现好和自动注册来说能够精准的实现主机的添加自动发现和自动注册有可能配置不到server,或者需要手动进行更新需要等待的时间长,能够远程多批量的对需要进行的主机进行添加或者删除,减少了人为的操作从而减少了失误提高了工作的效率。

 

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐