首页 > zabbix > ZABBIX API使用 PHP版本
ZABBIX API使用 PHP版本
2014年8月22日 19,379 浏览数 发表评论 阅读评论

先去官网了解下zabbix api文档,很详细,要发送什么数据过去,收到哪些数据。我是php新手,很搓,高手看到代码后勿喷。

zabbix 官网api地址,https://www.zabbix.com/documentation/2.2/manual/api  我这里主要介绍下登录和获取主机列表,其他的思路一样

登录    https://www.zabbix.com/documentation/2.2/manual/api/reference/user/get

获取主机列表  https://www.zabbix.com/documentation/2.2/manual/api/reference/host/get

我们目前在作手开发运维系统(php的,用了thinkphp框架,i wipe,又造一遍轮子,之前和小伙伴@淑高用python弄过一个简单的运维后台,集成了saltstack和ansible,后来离职了就没搞了),现在想在cmdb系统中显示服务器的一些基本监控情况,这里用到zabbix api来获取服务器信息。

zabbix api 需要post过去的数据格式如下

下面一行一行来看:

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

使用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来获取想要的信息。

1. 认证

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

  

上面可以直接返回result的值

类似于

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://zabbix.54im.com/zabbix/api_jsonrpc.php

2.获取服务器列表

这里可以返回hostid 和name

curl -i -X POST -H ‘Content-Type: application/json’ -d ‘{“jsonrpc”:”2.0″,”method”:”host.get”,”params”:{“output”:[“hostid”,”name”],”filter”:{“host”:””}},”auth”:”e81981f57500ede530007104df178f08″,”id”:1}’ http://zabbix.54im.com/zabbix/api_jsonrpc.php

上面这串id就是上面登录后获取到的

  • 数据流程

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

完整代码可在这里获取 https://github.com/ivonlee/Zabbix/blob/master/zabbix-php-host-get-api.php

python版本的可以参考下 思聪大神的博客 http://www.furion.info/640.html

 

本文参考连接:

http://paperplane.ruhoh.com/zabbix/intro-to-zabbix-api/

https://www.zabbix.com/documentation/2.2/manual/api/reference/user/get

 

 

 

 

分类: zabbix 标签: ,
  1. king
    2014年11月8日10:44 | #1

    获取token的代码中第二十七行应该是$result = Curl($url,$header,$data);否则出不来结果 还报错

  2. king
    2014年11月8日10:50 | #2

    @king
    curl -i -X POST -H ‘Content-Type: application/json’ -d ‘{“jsonrpc”: “2.0”,”method”:”user.login”,”params”:{“user”:”Admin”,”password”:”zabbix”},”auth”: null,”id”:1}’ http://zabbix.54im.com/zabbix/api_jsonrpc.php 这里单双引号害死人

  3. woyoo
    2014年11月12日06:05 | #3

    @king
    谢谢,已修正

  4. 2014年11月21日16:58 | #4

    邀请加入zabbix.org.cn社区.

  5. 2017年7月26日01:29 | #5

    I believe everything posted made a ton of sense.

    However, what about this? suppose you added a little information? I mean, I don’t want
    to tell you how to run your blog, however what if you added something to possibly grab a person’s attention?
    I mean ZABBIX API使用 PHP版本 | 钿畑的博客 is a little
    boring. You should glance at Yahoo’s home page and note how they create news headlines to get viewers to open the links.

    You might try adding a video or a related picture or two to get people excited about everything’ve got to say.
    Just my opinion, it could make your posts a little livelier.

  1. 2014年8月22日10:07 | #1