Zabbix api的使用方法(python版)

简介:

      Zabbix API具有重要的功能,为第三方调用zabbix批量操作提供可编程接口,从而轻松的用于自己的业务系统,运维系统相集成。

   Zabbix API是基于前端http协议实现的,也就是可以通过HTTP请求实现的APIAPI数据传输采用JSON RPC协议

由于Zabbixweb前端是PHP语言编程的,而PHP的性能和相关配置参数有极大关系,因此,如果在大型的环境使用,可以对php进行负载均衡,例如开启php多进程等方式来解决负载问题。除了对服务器本身进行优化,尽量减少对API的调用,也是集成第三方系统应该遵循的一个原则。

在最新的2.2版本中,所有的API都有对应的官方文档和详细说明。对应的地址是

https://www.zabbix.com/documentation/2.2/manual/api/reference,这里有全部的API用法。


API基本步骤

A,连接http://x.x.x.x/api_jsonrpc.php,提供用户名密码,并标示HTTP头部Content-Type":"application/json",HTTP方法为post。

B.获取SESSIONID

C.通过SESSIONID建立后续的连接

D.提交POST数据,格式为json,里面放对应的方法,获取需要的数据

zabbix api use  python的例子,在这个例子中,主要是通过API去获取主机的信息。

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/env python
#coding=utf- 8
                                                                                                                                                                                   
#导入模块,urllib2是一个模拟浏览器HTTP方法的模块
import  json
import  urllib2
import  sys
from urllib2  import  Request, urlopen, URLError, HTTPError
                                                                                                                                                                                   
#url and url header
#zabbix的api 地址,用户名,密码,这里修改为自己实际的参数
zabbix_url= "http://192.168.0.200/zabbix/api_jsonrpc.php"
zabbix_header = { "Content-Type" : "application/json" }
zabbix_user   =  "admin"
zabbix_pass   =  "zabbix"
auth_code     =  ""
                                                                                                                                                                                   
#auth user and password
#用户认证信息的部分,最终的目的是得到一个SESSIONID
#这里是生成一个json格式的数据,用户名和密码
auth_data = json.dumps(
         {
             "jsonrpc" : "2.0" ,
             "method" : "user.login" ,
             "params" :
                     {
                         "user" :zabbix_user,
                         "password" :zabbix_pass
                     },
             "id" : 0
         })
                                                                                                                                                                                   
# create request object
request = urllib2.Request(zabbix_url,auth_data)
for  key  in  zabbix_header:
     request.add_header(key,zabbix_header[key])
                                                                                                                                                                                   
#auth and  get  authid
try :
  result = urllib2.urlopen(request)
#对于出错新的处理
except HTTPError, e:
     print  'The server couldn\'t fulfill the request, Error code: ' , e.code
except URLError, e:
     print  'We failed to reach a server.Reason: ' , e.reason
else :
     response=json.loads(result.read())
     result.close()
   '' '
  如果访问成功或者失败,这里的数据会显示如下
     sucess result:
         { "jsonrpc" : "2.0" ,
          "result" : "0d225d8d2a058625f814f3a0749cd218" ,
          #result后面的值是SESSIONID,每次去访问都会发生变化的
          "id" : 0 }
     error  result:
         { 'code' : - 32602 ,
          'data' 'Login name or password is incorrect.' ,
          'message' 'Invalid params.' }
   '' '
  #判断SESSIONID是否在返回的数据中
     if   'result'   in   response:
         auth_code=response[ 'result' ]
     else :
         print  response[ 'error' ][ 'data' ]
                                                                                                                                                                                    
# request json
#用得到的SESSIONID去通过验证,获取主机的信息(用http. get 方法)
if  len(auth_code) ==  0 :
     sys.exit( 1 )
if  len(auth_code) !=  0 :
     get_host_data = json.dumps(
     {
         "jsonrpc" : "2.0" ,
         "method" : "host.get" ,
         "params" :{
                 "output" "extend" ,
         },
         "auth" :auth_code,
         "id" : 1 ,
     })
                                                                                                                                                                                    
     # create request object
     request = urllib2.Request(zabbix_url,get_host_data)
     for  key  in  zabbix_header:
         request.add_header(key,zabbix_header[key])
                                                                                                                                                                                    
     get  host list
     try :
         result = urllib2.urlopen(request)
     except URLError  as  e:
         if  hasattr(e,  'reason' ):
             print  'We failed to reach a server.'
             print  'Reason: ' , e.reason
         elif hasattr(e,  'code' ):
             print  'The server could not fulfill the request.'
             print  'Error code: ' , e.code
     else :
         response = json.loads(result.read())
         result.close()
                                                                                                                                                                                          
         #将所有的主机信息显示出来
         print response
         #显示主机的个数
         print  "Number Of Hosts: " , len(response[ 'result' ])

将以上代码保存运行,结果如下:

{"jsonrpc":"2.0","result":[{

                          "maintenances":[],

                          "hostid":"10084",

                          "proxy_hostid":"0",

                          "host":"Zabbix server",

                          "status":"0",

                          "disable_until":"0",

                          "error":"",

                          "available":"1",

                          "errors_from":"0",

                          "lastaccess":"0",

                          "ipmi_authtype":"-1",

                          "ipmi_privilege":"2",

                          "ipmi_username":"",

                          "ipmi_password":"",

                          "ipmi_disable_until":"0",

                          "ipmi_available":"0",

                          "snmp_disable_until":"0",

                          "snmp_available":"0",

                          "maintenanceid":"0",

                          "maintenance_status":"0",

                          "maintenance_type":"0",

                          "maintenance_from":"0",

                          "ipmi_errors_from":"0",

                          "snmp_errors_from":"0",

                          "ipmi_error":"",

                          "snmp_error":"",

                          "jmx_disable_until":"0",

                          "jmx_available":"0",

                          "jmx_errors_from":"0",

                          "jmx_error":"",

                          "name":"Zabbix server"}

                         ],

"id":1}


好了,一个简单的API使用例子就完成了。

   关于更多的API使用,可以阅读官方文档,学习更多的方法,用API的前提是对zabbix操作熟悉,不然很多API你不知道是干嘛用的。

   本文仅作抛砖引玉之用,希望大家举一反三,欢迎交流。



本文转自it你好 51CTO博客,原文链接:http://blog.51cto.com/itnihao/1343524,如需转载请自行联系原作者

相关文章
|
5天前
|
开发框架 JSON API
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
【7月更文挑战第22天】在Python Web开发中,设计高效的RESTful API涉及选择框架(如Flask或Django)、明确资源及使用HTTP方法(GET, POST, PUT, DELETE)来操作数据。响应格式通常是JSON,错误处理也很重要。示例展示了使用Flask创建图书管理API,包括版本控制、文档化、安全性和性能优化是最佳实践。这样的API使数据交互更顺畅。
26 2
|
4天前
|
前端开发 API 数据库
告别繁琐,拥抱简洁!Python RESTful API 设计实战,让 API 调用如丝般顺滑!
【7月更文挑战第23天】在Python的Flask框架下构建RESTful API,为在线商店管理商品、订单及用户信息。以商品管理为例,设计简洁API端点,如GET `/products`获取商品列表,POST `/products`添加商品,PUT和DELETE则分别用于更新和删除商品。使用SQLAlchemy ORM与SQLite数据库交互,确保数据一致性。实战中还应加入数据验证、错误处理和权限控制,使API既高效又安全,便于前端或其他服务无缝对接。
26 9
|
2天前
|
JSON API 开发者
惊!Python Web开发新纪元,RESTful API设计竟能如此性感撩人?
【7月更文挑战第24天】在 Python Web 开发领域, RESTful API 设计成为一种艺术, 关注用户体验与开发者友好性。
19 7
|
3天前
|
JSON API 数据格式
深度剖析!Python Web 开发中 RESTful API 的每一个细节,你不可不知的秘密!
【7月更文挑战第23天】在Python Web开发中,RESTful API利用HTTP协议构建强大、灵活的应用。GET获取资源,如`/products/:id`;POST创建新资源;PUT更新;DELETE删除。正确使用状态码,如200、201、404、500,至关重要。JSON化数据与版本控制(如`/v1/products`)增强API实用性。认证(OAuth, JWT)保障安全性,而清晰的错误消息提升用户体验。掌握这些细节,方能设计出高性能、易用的RESTful API。
20 7
|
2天前
|
JSON API 数据库
从零到英雄?一篇文章带你搞定Python Web开发中的RESTful API实现!
【7月更文挑战第24天】在Python的Web开发领域,掌握RESTful API至关重要。利用Flask框架,可迅速搭建API,进行用户管理的CRUD操作。需先安装Flask (`pip install Flask`),然后定义路由处理GET、POST、PUT、DELETE请求,实现用户数据的检索、创建、更新和删除。
19 5
|
4天前
|
API 数据安全/隐私保护 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
【7月更文挑战第23天】Python的RESTful API设计在Web开发中流行,提升效率与体验。REST强调HTTP方法(GET, POST, PUT, DELETE)操作资源。使用Flask框架可快速实现API,如管理用户信息。示例代码展示如何创建、读取、更新和删除用户,通过不同HTTP方法和URL路径。实际应用中,增加验证、错误处理和权限控制可增强API的安全性和稳定性。安装Flask后,可运行代码测试API功能。
24 6
|
4天前
|
缓存 API 数据处理
逆袭之路!从 Python 新手到 RESTful API 设计大师,你只差这一步!
【7月更文挑战第23天】从Python新手到RESTful API设计大师,需跨越从基础语法到网络服务的鸿沟。起初,你或许只写像`add_numbers`这样的简单函数。但RESTful API设计涉及HTTP、请求方法、路由与数据处理。如用Flask创建用户管理API,支持GET列出用户与POST创建用户。进阶至API设计,需关注错误处理、安全与性能优化,如使用异常处理器与数据库连接池提升服务。此旅程虽具挑战,持续学习与实践将助你蜕变,步入编程新境界。
|
2天前
|
JSON API 网络架构
揭秘!Python Web框架下的RESTful API设计,为何成为互联网新宠?
【7月更文挑战第24天】在互联网快速发展背景下,RESTful API以其简洁性和可扩展性成为应用间通信的首选。REST强调资源为核心,利用HTTP方法处理CRUD操作,促进前后端分离,提高开发效率。Python的Flask框架支持轻松构建RESTful API,通过路由、请求和响应机制实现。示例代码展示了如何使用Flask创建、读取和更新用户信息。Python Web框架因其丰富的工具和库,简化RESTful API开发,适应微服务架构需求,在互联网发展中扮演重要角色。
|
5天前
|
JSON API 网络架构
颠覆传统!Python RESTful API设计与实现,让你的Web应用焕发新生!
【7月更文挑战第22天】了解RESTful API为何重要,它简化了Web服务接口并促进了前后端分离。Python开发者可选Flask或Django REST Framework来构建API。设计时注重资源导向、无状态和统一接口。以下是一个使用Flask创建图书管理API的简例,展示了如何通过HTTP方法处理资源操作。本文旨在帮助读者掌握Python RESTful API开发,鼓励创新与实践。
17 0
|
5天前
|
存储 JSON API
实战派教程!Python Web开发中RESTful API的设计哲学与实现技巧,一网打尽!
【7月更文挑战第22天】构建RESTful API实战:**使用Python Flask设计图书管理API,遵循REST原则,通过GET/POST/PUT/DELETE操作处理/books及/books/<id>。示例代码展示资源定义、请求响应交互。关键点包括HTTP状态码的使用、版本控制、错误处理和文档化。本文深入探讨设计哲学与实现技巧,助力理解RESTful API开发。
16 0

推荐镜像

更多