python调用zabbix api接口_Zabbix api的使用方法(python版)

本文介绍了如何使用Python调用Zabbix API进行用户认证并获取主机信息。通过Zabbix API,可以方便地集成到自定义业务系统中。文章提供了详细的代码示例,包括设置HTTP头部、发送POST请求、解析返回结果等步骤。
摘要由CSDN通过智能技术生成

ZabbixAPI简介

时间2013-12-21

作者 itnihao

如需引用,请注明以上信息,谢谢合作

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

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

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

在最新的2.2版本中,所有的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去获取主机的信息。#!/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你不知道是干嘛用的。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值