zabbix API简介
Zabbix API是在1.8版本中开始引进并且已经被广泛应用。Zabbix API 中间件使得架构更加模块化也避免直接对数据库进行操作。它允许你通过JSON RPC协议来创建、更新和获取Zabbix对象并且做任何你喜欢的操作
Zabbix API提供两项主要功能:
远程管理Zabbix配置
远程检索配置和历史数据
使用JSON
API 采用JSON-RPC实现。这意味着调用任何函数,都需要发送POST请求,输入输出数据都是以JSON格式。大致工作流如下:
准备JSON对象,它描述了你想要做什么(创建主机,获取图像,更新监控项等)。
采用POST方法向http://example.com/zabbix/api_jsonrpc.php发送此JSON对象. http://example.com/zabbix/是Zabbix前端地址。api_jsonrpc.php是调用API的PHP脚本。可在安装可视化前端的目录下找到。
获取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。
官网示例
通过curl 使用方式
- 先获取认证令牌
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等方法,有助于新手快速上手。