一.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配置
  • 远程检索配置和历史数据

API的工作流程如下:

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

二.Zabbix API的应用

1.查看zabbix系统监控的API接口及API脚本方式获取身份令牌:

注意:如果在web界面做了相应的自动发现及其自动注册等动作时需要将其停用,以便后续的实验效果

编写脚本:

[root@server1 ~]# vim zabbix-api
编辑内容如下:
curl -s XPOST -H "Content-Type:application/json-rpc" -d '   //启用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.254.1/zabbix/api_jsonrpc.php | python -m json.tool
使用post方法向该网址发送此JSON对象
api_jsonrpc.php是调用API的php脚本,可以安装可视化前端的目录下查到

zabbix 编辑主机api接口 zabbix的api_json


给脚本添加权限获取身份令牌:

zabbix 编辑主机api接口 zabbix的api_API_02

API常用接口:

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

2.检索主机:

现在已经有了一个用户身份令牌,可以访问zabbix中的数据,下面实现host.get方法检索所有已配置主机的ID,主机名及其接口

编写脚本:

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":"d085be9cdd8aa3f363f7b9546b3b5f2d"
}' http://172.25.254.1/zabbix/api_jsonrpc.php | python -m json.tool

zabbix 编辑主机api接口 zabbix的api_API_03


给脚本添加执行权限并且执行查看结果:

zabbix 编辑主机api接口 zabbix的api_JSON_04


3.删除监控中的主机:删除server3:(检索主机的server3的信息如下)

zabbix 编辑主机api接口 zabbix的api_json_05


编写脚本:

curl -s XPOST -H "Content-Type:application/json-rpc" -d '
{
     "jsonrpc": "2.0",
     "method": "host.delete",
     "params": [
          "10266"  //server3的hostid
      ],
     "id": 1,
     "auth":"d085be9cdd8aa3f363f7b9546b3b5f2d"
}' http://172.25.254.1/zabbix/api_jsonrpc.php | python -m json.tool

zabbix 编辑主机api接口 zabbix的api_zabbix 编辑主机api接口_06


给脚本添加权限执行并查看效果:

zabbix 编辑主机api接口 zabbix的api_json_07


在web界面查看发现server3已经删除

zabbix 编辑主机api接口 zabbix的api_json_08


3.创建监控中的主机:

编写脚本:

curl -s XPOST -H "Content-Type:application/json-rpc" -d '
{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
        "host": "Linux server",
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": "172.25.254.3",
                "dns": "",
                "port": "10050"
            }
        ],
        "groups": [
            {
                "groupid": "2"   //添加创建的主机的组,及为linux servers的组id
            }
        ],
        "templates": [   //模版
            {
                "templateid": "10001"
            }
        ]
    },
     "id": 1,
     "auth":"d085be9cdd8aa3f363f7b9546b3b5f2d"
}' http://172.25.254.1/zabbix/api_jsonrpc.php | python -m json.tool

zabbix 编辑主机api接口 zabbix的api_API_09


给脚本添加执行权限并且查看结果

zabbix 编辑主机api接口 zabbix的api_API_10


在web界面查看发现server3重新添加进来,因为添加时指定的名称为Linux server所以最新显示也为Linux server

zabbix 编辑主机api接口 zabbix的api_API_11


获取组id和模版号号:打开web界面中的群组和模版,可再地址栏中看到相应的编号

zabbix 编辑主机api接口 zabbix的api_zabbix 编辑主机api接口_12


zabbix 编辑主机api接口 zabbix的api_json_13