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

相关文章
|
1月前
|
数据采集 JSON API
如何实现高效率超简洁的实时数据采集?——Python实战电商数据采集API接口
你是否曾为获取重要数据而感到困扰?是否因为数据封锁而无法获取所需信息?是否因为数据格式混乱而头疼?现在,所有这些问题都可以迎刃而解。让我为大家介绍一款强大的数据采集API接口。
|
1月前
|
JSON API 数据库
解释如何在 Python 中实现 Web 服务(RESTful API)。
解释如何在 Python 中实现 Web 服务(RESTful API)。
26 0
|
1天前
|
API Python
[AIGC] 使用Python刷LeetCode:常用API及技巧指南
[AIGC] 使用Python刷LeetCode:常用API及技巧指南
|
2天前
|
测试技术 API 网络架构
Python的api自动化测试 编写测试用例
【4月更文挑战第18天】使用Python进行API自动化测试,可以结合`requests`库发送HTTP请求和`unittest`(或`pytest`)编写测试用例。以下示例: 1. 安装必要库:`pip install requests unittest` 2. 创建`test_api.py`,导入库,定义基础URL。 3. 创建继承自`unittest.TestCase`的测试类,包含`setUp`和`tearDown`方法。 4. 编写测试用例,如`test_get_users`,检查响应状态码和内容。 5. 运行测试:`python -m unittest test_api.py`
12 2
|
2天前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
9 3
|
3天前
|
人工智能 机器人 API
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
6 0
|
3天前
|
缓存 人工智能 API
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
7 0
|
1月前
|
机器学习/深度学习 并行计算 数据可视化
Python tqdm使用方法
Python tqdm使用方法
30 1
|
1月前
|
JSON API 数据格式
Python中使用API(四)
Python中使用API(四)
20 0
|
1月前
|
JSON API 数据格式
Python中使用API(三)
Python中使用API(三)
18 0

推荐镜像

更多