Python 调用 zabbix api的方法示例


Posted in Python onJanuary 06, 2019

前提准备:

1.使用python requests模块

2.了解json

3.zabbix api的具体调用建议先浏览一下官网

先上代码:

import requests,json
#
#url一定要正确,IP地址换成自己zabbix服务器的
zbx_url = "http://192.168.60.130:3080/zabbix/api_jsonrpc.php"

#在post请求头部必须要有 'Content-Type': 'application/json-rpc'
headers = {'Content-Type': 'application/json-rpc'}

#传递json 数据到api;登录
login = {
  "jsonrpc": "2.0",
  "method": "user.login",
  "params": {
    "user": "Admin",
    "password": "zabbix"
  },
  "id": 1
}
#首次登陆不用在json字段中写 auth,否则会有相关的报错

#将数据发送到api
ret = requests.post(zbx_url, data=json.dumps(login), headers=headers)

#对结果进行序列化
ret = ret.json()
auth = ret['result']

#获取问题主机json
data = {
  "jsonrpc": "2.0",
  "method":"trigger.get",
  "params": {
    # output表示输出结果包含参数有哪些
    "output": [
      "triggerid",
      "description",
      "status",
      "value",
      "priority",
      "lastchange",
      "recovery_mode",
      "hosts",
      "state",
    ],
    "selectHosts": "hosts", # 需包含主机ID信息,以便于根据主机ID查询主机信息
    "selectItems":"items",
    "filter": {
      # 筛选条件
       "value": 1,#value值为1表示有问题
       "status": 0#status为0表示已启用的trigger
    },
  },
  "auth":auth,#这里的auth就是登录后获取的
  'id':'1'#这个id可以随意
}

#将查询数据发送到zabbix-server
ret = requests.post(zbx_url,data=json.dumps(data),headers=headers)

respone_result = ret.json()['result']#对结果进行json序列化

print(respone_result)

下面简单介绍一下上诉代码:

要调用zabbix api获取数据,首先要获得auth这一串字符用户后续的内容获取,auth可以看做是一种你与zabbix-server之间的"暗号";

登录的json内容之所以这样写是zabbix官方规定的,json字符串里面千万不能使用tab键。

login = {
  "jsonrpc": "2.0",
  "method": "user.login",
  "params": {
    "user": "Admin",     #根据自己的情况填
    "password": "zabbix"   #根据自己的条件填写
  },
  "id": 1
}

获取问题主机的json字符串建议先浏览一下官网的说明,要强调的是output和filter这两个key,output就是zabbix api返回来的内容,filter相当于是过滤条件:

"filter": {
      # 筛选条件
       "value": 1,       #value值为1表示有问题
       "status": 0       #status为0表示已启用的trigger
    },

上诉代码表示 value=1 and status=0,是一种与关系,很像查数据库表时候的过滤操作。

强烈建议先大概浏览一下官网文档

PS:Python通过Zabbix API获得数据的方法

Zabbix API查询:https://www.zabbix.com/documentation/2.0/manual/appendix/api/api

import json,urllib2
from urllib2 import Request, urlopen, URLError, HTTPError
#url and url header
#zabbix的api 地址,用户名,密码,这里修改为自己实际的参数
zabbix_url="http://10.16.2.40/zabbix/api_jsonrpc.php"
zabbix_header = {"Content-Type":"application/json"}
zabbix_user  = "admin"
zabbix_pass  = "password"
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])

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())
  print response
  result.close()

#判断SESSIONID是否在返回的数据中
if 'result' in response:
  auth_code=response['result']
else:
  print response['error']['data']
                                                                                          
# request json
#用得到的SESSIONID去通过验证,获取主机的信息(用http.get方法)
if len(auth_code) <> 0:
  host_list=[]
  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()                                                                                    
    #将所有的主机信息显示出来
    for r in response['result']:
    #  print r['hostid'],r['host']
      host_list.append(r['hostid'])
    #显示主机的个数
    print "Number Of Hosts: ", len(host_list)

  

#返回所有hostid==10251的主机,并只查询name包含“CPU Usage”字段的item,并按照name排序
  get_item_data = json.dumps({
    "jsonrpc": "2.0",
    "method": "item.get",
    "params": {
      "output": "extend",
      "hostids": "10251"
      "search": {
        #"key_": 'perf_counter[\Processor Information(_Total)\% Processor Time]'
        "name": "CPU Usage"
      },
      "sortfield": "name"
    },
    "auth": auth_code,
    "id": 1
  })

  request = urllib2.Request(zabbix_url,get_item_data)
  for key in zabbix_header:
    request.add_header(key,zabbix_header[key])
  result = urllib2.urlopen(request)

  try:
    result = urllib2.urlopen(request)  
    response = json.loads(result.read())
    for r in response['result']:
      print r['itemid'],r['hostid']
    result.close()  
  except:
    pass

  #通过hostid获取相应的graphid
  get_graph_data = json.dumps({
    "jsonrpc": "2.0",
    "method": "graphitem.get",
    "params": {
      "output": "extend",
      "expandData": 1,
      "itemids": "33712"
    },
    "auth": auth_code,
    "id": 1
  })
  request = urllib2.Request(zabbix_url,get_graph_data)
  for key in zabbix_header:
    request.add_header(key,zabbix_header[key])
  result = urllib2.urlopen(request)

  try:
    result = urllib2.urlopen(request)  
    response = json.loads(result.read())
    for r in response['result']:
      print r['itemid'],r['graphid']
    result.close()  
  except:
    pass

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现数通设备端口监控示例
Apr 02 Python
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
Jun 10 Python
python 时间戳与格式化时间的转化实现代码
Mar 23 Python
利用Python实现颜色色值转换的小工具
Oct 27 Python
Python3中的json模块使用详解
May 05 Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 Python
在Pycharm中执行scrapy命令的方法
Jan 16 Python
Python数据类型之Set集合实例详解
May 07 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
Python爬取知乎图片代码实现解析
Sep 17 Python
Python 中pandas索引切片读取数据缺失数据处理问题
Oct 09 Python
Python基于gevent实现高并发代码实例
May 15 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 #Python
利用Django提供的ModelForm增删改数据的方法
Jan 06 #Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
Jan 05 #Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
Jan 05 #Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 #Python
Python3爬虫全国地址信息
Jan 05 #Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
Jan 04 #Python
You might like
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
PHP后期静态绑定之self::限制实例分析
2018/12/21 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
javascript与CSS复习(《精通javascript》)
2010/06/29 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
javascript实现抢购倒计时程序
2019/08/26 Javascript
Angular 多级路由实现登录页面跳转(小白教程)
2019/11/19 Javascript
JS插入排序简单理解与实现方法分析
2019/11/25 Javascript
python发送伪造的arp请求
2014/01/09 Python
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
Nayomi官网:沙特阿拉伯王国睡衣和内衣品牌
2020/12/19 全球购物
大学生军训自我评价分享
2013/11/09 职场文书
大学自我鉴定范文
2013/12/26 职场文书
致1500米运动员广播稿
2014/02/07 职场文书
班主任评语大全
2014/04/26 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
骨干教师事迹材料
2014/12/17 职场文书
运动会观后感
2015/06/09 职场文书
新店开张宣传语
2015/07/13 职场文书
2016入党积极分子考察评语
2015/12/01 职场文书
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server