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,如需转载请自行联系原作者

相关文章
|
12天前
|
JSON 监控 API
使用Zabbix API
使用Zabbix API
89 67
|
4天前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
37 5
|
24天前
|
API 开发者 Python
如何用Python调用孔夫子API?
要使用Python调用孔夫子旧书网API,需先在开发者平台注册并获取API密钥与调用密钥。示例代码展示了如何利用requests库发送请求,获取并解析搜索结果。使用时需替换密钥,并按API文档调整URL和参数。注意遵守API使用规则及法律法规。
如何用Python调用孔夫子API?
|
10天前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
31 11
|
12天前
|
JSON 安全 API
Python调用API接口的方法
Python调用API接口的方法
54 5
|
11天前
|
API Python
利用python淘宝/天猫获得淘宝app商品详情原数据 API
要使用Python获取淘宝/天猫商品详情原数据,需先注册开放平台账号并实名认证,创建应用获取API权限。随后,根据API文档构建请求URL和参数,使用requests库发送请求,处理返回的商品详情数据。注意遵守平台使用规则。
|
1月前
|
JSON 安全 API
如何使用Python开发API接口?
在现代软件开发中,API(应用程序编程接口)用于不同软件组件之间的通信和数据交换,实现系统互操作性。Python因其简单易用和强大功能,成为开发API的热门选择。本文详细介绍了Python开发API的基础知识、优势、实现方式(如Flask和Django框架)、实战示例及注意事项,帮助读者掌握高效、安全的API开发技巧。
94 3
如何使用Python开发API接口?
|
14天前
|
供应链 API 开发者
探索Python与1688商品详情API接口的协同效应
在数字化时代,1688作为中国领先的B2B平台,其商品详情API接口为市场分析、库存管理和销售策略提供了重要数据支持。本文介绍如何使用Python调用该API,包括前期准备、技术实现、数据解析及错误处理等内容,助力企业和开发者挖掘数据价值,提升商业智能水平。
|
20天前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
|
20天前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API