ZABBIX API

zabbix API简介

Zabbix API是在1.8版本中开始引进并且已经被广泛应用。Zabbix API 中间件使得架构更加模块化也避免直接对数据库进行操作。它允许你通过JSON RPC协议来创建、更新和获取Zabbix对象并且做任何你喜欢的操作

zabbix官网介绍

Zabbix API提供两项主要功能:

  • 远程管理Zabbix配置

  • 远程检索配置和历史数据

使用JSON

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

  1. 准备JSON对象,它描述了你想要做什么(创建主机,获取图像,更新监控项等)。

  2. 采用POST方法向http://example.com/zabbix/api_jsonrpc.php发送此JSON对象. http://example.com/zabbix/是Zabbix前端地址。api_jsonrpc.php是调用API的PHP脚本。可在安装可视化前端的目录下找到。

  3. 获取JSON格式响应。

- 注:请求除了必须是POST方法之外,HTTP Header Content-Type必须为【application/jsonrequest,application/json-rpc,application/json】其中之一,相关PHP代码如下:

$allowed_content = [

      'application/json-rpc' => 'json-rpc',

      'application/json' => 'json-rpc',

      'application/jsonrequest' => 'json-rpc',

   ];

可以采用脚本或者任何”手动”支持JSON RPC的工具来使用API。而首先需要了解的就是如何验证和如何使用验证ID来获取想要的信息。后面的演示会以Python脚本和基于Curl的例子来呈现API的基本使用。

基本请求格式

{

   "jsonrpc": "2.0",

   "method": "method.name",

   "params": {

       "param_1_name": "param_1_value",
       "param_2_name": "param_2_value" 
   },

   "id": 1,

   "auth": "159121b60d19a9b4b55d49e30cf12b81",

}

下面一行一行来看:

  • “jsonrpc”: “2.0”-这是标准的JSON RPC参数以标示协议版本。所有的请求都会保持不变。

  • “method”: “method.name”-这个参数定义了真实执行的操作。例如:host.create、item.update等等

  • “params”-这里通过传递JSON对象来作为特定方法的参数。如果你希望创建监控项,”name”和”key_”参数是需要的,每个方法需要的参数在Zabbix API文档中都有描述。

  • “id”: 1-这个字段用于绑定JSON请求和响应。响应会跟请求有相同的”id”。在一次性发送多个请求时很有用,这些也不需要唯一或者连续

  • “auth”: “159121b60d19a9b4b55d49e30cf12b81”-这是一个认证令牌【authentication token】用以鉴别用户、访问API。这也是使用API进行相关操作的前提-获取认证ID。

官网示例

example

通过curl 使用方式

  1. 先获取认证令牌
  curl -H "Content-Type: application/json" -X POST -d '{
  "jsonrpc": "2.0",
  "method": "user.login",
  "params": {
       "user": "Admin",
      "password": "zabbix"
  },
  "id": 1,
  "auth": null
}' \
  http://127.0.0.1/api_jsonrpc.php

2.发送COMMAND

  curl -H "Content-Type: application/json" -X POST -d \
  '{
      "jsonrpc": "2.0",
      method": "host.get",
      "params":{
          "output": ["name","hostid","status"]
      },
      "auth": "28a47e0a47089dabda6720e0d447be3e",
      "id":1
  }' \
  http://localhost/api_jsonrpc.php | python -m json.tool

curl参数说明:

  • -H:-header LINE Pass custom header LINE to server (H)
  • -d:–data DATA HTTP POST data (H)
  • -X:–request COMMAND Specify request command to use

Python 接口使用说明:

我们的工程里面使用的是pyzabbix包,该包的内部也是按照官方规定的json格式封装的。使用步骤如下:

  import pyzabbix
  zapi = pyzabbix.ZabbixAPI("http://localhost")
  zapi.login("Admin", "zabbix")
  hosts = zapi.host.get(output="extend")
  print hosts

要想熟练使用zabbix API需要仔细阅读官网的手册,手册上写的非常详细,每个参数都给了详细的说明;
建议在用Python调用API接口的时候,先用curl方式实验无误之后,再写相关代码;只要curl方式达到预期效果,把curl中用到的参数,直接代入Python代码中,就可以完美运行了,可以节省Python代码的调试时间;
关于Python的zabbix api 调用可以参考借鉴

/sandal/docker/zabbix-server-2.4/container-files/sandal/Auto_create_ipmi_template$/create_ipmi_template.py

该代码里面用到了template.create,item.create,application.create,trigger.create等方法,有助于新手快速上手。

你可能感兴趣的:(zabbix)