1.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对象并且做任何你喜欢的操作【当然前提是你拥有认证账户】

(3)zabbix中API的作用

zabbix拥有完善的API,基于JSON RPC提供资产,主机,主机组,监控项,告警等方面的接口。
在做运维自动化时,需要用API功能对zabbix二次开发。
Zabbix API为批量操作,第三方软件集成以及其他作用提供可编程接口。
Zabbix API提供两项主要功能:

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

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

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

Zabbix API的应用
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接口以及API脚本方式获取身份令牌(查看监控主机)

[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”: “user.login”, #获取接口方法名
 “params”: {
 “user”: “Admin”,
 “password”: “zabbix” #zabbix系统监控的用户名和密码
 },
 “id”: 1,
 “auth”: null #用户的身份令牌,因为还没有获取所以为null。
 }’ http://172.25.15.1/zabbix/api_jsonrpc.php | python -m json.tool #python…将其标准化输出
 #使用post方法向该网址发送此json对象,api_jsonrpc.php是调用api的php脚本,可以安装可视化前端目录查看
 [root@server1 ~]# chmod +x zabbix-api 给脚本添加执行权限
 [root@server1 ~]# ./zabbix-api
 {
 “id”: 1,
 “jsonrpc”: “2.0”,
 “result”: “bc40e9a738e1a19f37ec616151199ba9” #获取的身份令牌
 }

zabbix icmpping 端口 zabbix api接口_API


zabbix icmpping 端口 zabbix api接口_API_02


zabbix icmpping 端口 zabbix api接口_json_03


zabbix icmpping 端口 zabbix api接口_JSON_04


检索主机(通过名称获取数据)

zabbix icmpping 端口 zabbix api接口_JSON_05


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

[root@server1 ~]# vim zabbix1-api
 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”: “bc40e9a738e1a19f37ec616151199ba9”
 }’ http://172.25.15.1/zabbix/api_jsonrpc.php | python -m json.tool[root@server1 ~]# ./zabbix-api

zabbix icmpping 端口 zabbix api接口_API_06

删除监控中的主机

zabbix icmpping 端口 zabbix api接口_zabbix icmpping 端口_07


可以在zabbix监控平台上面(web界面)看到此时的server2是正在被监控的

此实验做之前要将自动注册和自动发现都停用

zabbix icmpping 端口 zabbix api接口_zabbix icmpping 端口_08


[root@server1 ~]# vim zabbix2-api
 curl -s -XPOST -H ‘Content-Type:application/json-rpc’ -d ’
 {
 “jsonrpc”: “2.0”,
 “method”: “host.delete”,
 “params”: [
 “” #要删除主机的hostid
 ],
 “id”: 1,
 “auth”: “bc40e9a738e1a19f37ec616151199ba9”
 }’ http://172.25.15.1/zabbix/api_jsonrpc.php | python -m json.tool响应:
 [root@server1 ~]# ./zabbix-api
 {
 “id”: 1,
 “jsonrpc”: “2.0”,
 “result”: {
 “hostids”: [
 “10264”
 ]
 }
 }

zabbix icmpping 端口 zabbix api接口_zabbix icmpping 端口_09


zabbix icmpping 端口 zabbix api接口_zabbix icmpping 端口_10


网页中的server2已经被删除

zabbix icmpping 端口 zabbix api接口_API_11

创建监控主机

zabbix icmpping 端口 zabbix api接口_API_12


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

zabbix icmpping 端口 zabbix api接口_json_13


zabbix icmpping 端口 zabbix api接口_zabbix icmpping 端口_14


[root@server1 ~]# vim zabbix-api
 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.15.2”,
 “dns”: “”,
 “port”: “10050”
 }
 ],
 “groups”: [
 {
 “groupid”: “2” #主机组id
 }
 ],
 “templates”: [
 {
 “templateid”: “10001” #模版号
 }
 ]
 },
 “id”: 1,
 “auth”:""
 }’ http://172.25.24.1/zabbix/api_jsonrpc.php | python -m json.tool

zabbix icmpping 端口 zabbix api接口_json_15


响应:

[root@server1 ~]# ./zabbix-api
 {
 “id”: 1,
 “jsonrpc”: “2.0”,
 “result”: {
 “hostids”: [
 “”
 ]
 }
 }

zabbix icmpping 端口 zabbix api接口_JSON_16


zabbix icmpping 端口 zabbix api接口_API_17


server2添加成功