最近有个想法:想做一个zabbix数据的二次呈现,所以来写一下Zabbix的api的内容。

先说下zabbix api的认证基础。

Zabbix API简介

Zabbix API开始扮演着越来越重要的角色,尤其是在集成第三方软件和自动化日常任务时。。Zabbix API为批量操作、第三方软件集成以及其他作用提供可编程接口。

Zabbix API是在1.8版本中开始引进并且已经被广泛应用。所有的Zabbix移动客户端都是基于API,甚至原生的WEB前端部分也是建立在它之上。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】其中之一。

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

基本请求格式

Zabbix API 简化的JSON请求如下:

 1 {
2 "jsonrpc": "2.0",
3 "method": "method.name",
4 "params": {
5 "param_1_name": "param_1_value",
6 "param_2_name": "param_2_value"
7 },
8 "id": 1,
9 "auth": "159121b60d19a9b4b55d49e30cf12b81",
10 }

下面一行一行来看:

  • "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。

API 使用

  • 环境准备

Zabbix API是基于JSON-RPC 2.0规格,具体实现可以选择任何你喜欢的编程语言或者手动方式。这里我们采用的Python和基于Curl的方式来做示例。Python 2.7版本已经支持JSON,所以不再需要其他模块组件。当然可以采用Perl、Ruby、PHP之类的语言,使用前先确保相应JSON模块的安装。

  • 身份验证

任何Zabbix API客户端在真正工作之前都需要验证它自身。在这里是采用User.login方法。这个方法接受一个用户名和密码作为参数并返回验证ID,一个安全哈希串用于持续的API调用(在使用User.logout之前该验证ID均有效)。

认证获取简例

1.     user.login方法获取zabbix server的认证结果官方地址:https://www.zabbix.com/documentation/2.2/manual/api/reference/user/login
python脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[iyunv@yang python]# cat auth.py
#!/usr/bin/env python2.7
#coding=utf-8
import json
import urllib2
# based url and required header
url = "http://1.1.1.1/zabbix/api_jsonrpc.php"
header = {"Content-Type":"application/json"}
# auth user and password
data = json.dumps(
{
   "jsonrpc": "2.0",
   "method": "user.login",
   "params": {
   "user": "Admin",
   "password": "zabbix"
},
"id": 0
})
# create request object
request = urllib2.Request(url,data)
for key in header:
   request.add_header(key,header[key])
# auth and get authid
try:
   result = urllib2.urlopen(request)
except URLError as e:
   print "Auth Failed, Please Check Your Name AndPassword:",e.code
else:
   response = json.loads(result.read())
   result.close()
print"Auth Successful. The Auth ID Is:",response['result']

python脚本运行结果:

1
2
[iyunv@yang python]# python auth.py
Auth Successful. The Auth ID Is: a0b82aae0842c2041386a61945af1180

curl命令:

1
2
3
curl -i -X POST -H 'Content-Type:application/json' -d '{"jsonrpc":
"2.0","method":"user.login","params":{"user":"admin","password":"zabbix"},"auth":
null,"id":0}' http://1.1.1.1/zabbix/api_jsonrpc.php

curl命令运行结果:

1 {"jsonrpc":"2.0","result":"b895ce91ba84fe247e444817c6773cc3","id":0}

比较来看,采用脚本可以有更多的灵活性,而基于CURL的方式,对结果的处理不是很方便。原理则都是相通的。

除了这些获取信息以外,采用API调用同样可以进行创建操作,更新操作和删除操作等等。这也很容易让我们联想起数据库操作,当然比较这些采用API

调用获取结果的方式,也不能忘掉这种最直接而危险的方式。在开始讨论中已经提到,Zabbix现在自带的前端实现部分是采用数据库操作,部分是基于API
调用。

API调用数据流程

  • 数据流程

下面的流程图代表了Zabbix API
工作的典型工作流。验证(方法user.login)是获取验证ID的强制步骤。这个ID又允许我们调用API提供的任何权限允许的方法来进行操作。在之
前的例子中没有提到user.logout方法,这也是一次验证ID能够重复使用的原因所在。使用user.logout方法后将会使验证ID失效,后面
的操作将不能再使用此ID。

from:http://www.cnblogs.com/yangliheng/p/6394573.html

最新文章

  1. Web 上传图片加水印
  2. Phalapi 中Union和Union All的用法
  3. mvc Razor 视图中找不到 ViewBag的定义
  4. java 验证码
  5. mysql 主从数据库设置方法
  6. a标签截字
  7. 【poj2828】Buy Tickets 线段树 插队问题
  8. Qt之QSystemTrayIcon
  9. 通过OpenSSL解码X509证书文件
  10. 与众不同 windows phone (20) - Device(设备)之位置服务(GPS 定位), FM 收音机, 麦克风, 震动器
  11. 关于jq的load不用回调获取其中dom元素方法
  12. Java RE (正则表达式)
  13. 三星笔记本进入BIOS后找不到U盘启动项/快速启动键F12没有反应
  14. java json 转换
  15. Linux rsync 命令学习
  16. ftp主动与被动模式详解
  17. SQL语句(十八_补充)——存储过程
  18. aarch64_g3
  19. JSP Servlet之间交换数据
  20. 按照grouip分组,之后分组调用生成正式凭证 的接口

热门文章

  1. HDU 4635 Strongly connected (Tarjan+一点数学分析)
  2. iOS调用第三方地图App进行导航方法
  3. 玩转X-CTR100 l 平台-4WD智能小车
  4. 老毛桃PE修改方法(屏蔽更改主页,屏蔽加装的绿色浏览器)
  5. Excel根据人名匹配得到编号
  6. Crystal Report Error: Either the Crystal Reports registy key permission are insufficient or the Crystal Reports runtime is not installed correctly
  7. node 常见的一些系统问题
  8. (转) C++中成员初始化列表的使用
  9. UVA1252 【Twenty Questions】
  10. 修改ThinkPHP缓存为Memcache的方法