gqinvs 发表于 2018-8-7 11:28:55

python3--zabbixapi 的使用

#!/usr/bin/env python  
# -*- coding: utf-8 -*-
  

  
import urllib.request
  
import json
  
import re
  

  
url = 'http://xxxxxxxxxxxxxxxx/api_jsonrpc.php'
  
username = 'xxxxxxxxxxxxxxx'
  
password = 'xxxxxx'
  

  

  
# 登陆
  
def requestJson(url, values):
  
    data = json.dumps(values).encode('utf-8')
  
    req = urllib.request.Request(url, data, {'Content-Type': 'application/json-rpc'})
  
    response = urllib.request.urlopen(req, data)
  
    a = response.read().decode(encoding='utf-8')
  
    output = json.loads(a)
  
    #    print output
  
    try:
  
      message = output['result']
  
    except:
  
      message = output['error']['data']
  
      print(message)
  
      quit()
  

  
    return output['result']
  

  

  
##登陆的API
  
def authenticate(url, username, password):
  
    values = {'jsonrpc': '2.0',
  
            'method': 'user.login',
  
            'params': {
  
                  'user': username,
  
                  'password': password
  
            },
  
            'id': '0'
  
            }
  
    idvalue = requestJson(url, values)
  
    return idvalue
  

  

  
# auth的值
  
auth = authenticate(url, username, password)
  

  

  
##查询组ID {'groupid': '8', 'name': 'Switch'}
  
def groups(auth):
  
    values = {
  
      "jsonrpc": "2.0",
  
      "method": "hostgroup.get",
  
      "params": {
  
            "output": ["groupid", "name"],
  
      },
  
      'auth': auth,
  
      'id': '1'
  
    }
  
    output = requestJson(url, values)
  
    return output
  

  

  
# b = groups(auth)
  
# print(b)
  

  
##查询主机{'hostid': '10108',
  
def hosts(auth):
  
    values = {
  
      "jsonrpc": "2.0",
  
      "method": "host.get",
  
      "params": {
  
            "output": ["groupid", "name"],
  
            "groupids": "8",
  
      },
  
      'auth': auth,
  
      'id': '1'
  
    }
  
    output = requestJson(url, values)
  
    return output
  

  

  
host = hosts(auth)
  
host1 = []
  
host2 = []
  
for i in range(len(host)):
  
    host1.append(host['name'])
  
    host2.append(host['hostid'])
  

  
host3 = dict(zip(host1, host2))
  

  

  
##查询主机项目 {'key_': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'itemid': '26399'}
  
def item(auth):
  
    values = {
  
      "jsonrpc": "2.0",
  
      "method": "item.get",
  
      "params": {
  
            "output": ["itemids", "key_"],
  
            "hostids": "10108",
  
      },
  
      'auth': auth,
  
      'id': '1'
  
    }
  
    output = requestJson(url, values)
  
    return output
  

  

  
# print(item(auth))
  

  
##查询项目的历史值'lastvalue': '-14760.0000'
  
def his(auth, itemids):
  
    values = {
  
      "jsonrpc": "2.0",
  
      "method": "item.get",
  
      "params": {
  
            "output": "extend",
  
            "history": 0,
  
            "itemids": itemids,
  
            "sortfield": "itemid",
  
            "sortorder": "DESC",
  
            "limit": 1
  
      },
  
      'auth': auth,
  
      'id': '1'
  
    }
  
    output = requestJson(url, values)
  
    return output
  

  

  
# print(his(auth,26399))
  

  
##查询触发项目值和监控项目{'description': 'xxxxxxxxxxxxxxx', 'hostname': 'xxxxxxxxxxxxxxx', 'items': [{'itemid': '26399'}], 'triggerid': '17030'}
  
def trigger(auth, hostid):
  
    values = {
  
      "jsonrpc": "2.0",
  
      "method": "trigger.get",
  
      "params": {
  
            "output": [
  
                "description",
  
            ],
  
            "filter": {
  
                "hostid": hostid,
  
            },
  
            "selectItems": "",
  
            "sortfield": "hostname",
  
            "sortorder": "DESC"
  
      },
  
      'auth': auth,
  
      'id': '1'
  
    }
  
    output = requestJson(url, values)
  
    return output
  

  

  

  ###简单使用案例,可查考,根据触发器查找历史。
  
      t1 = trigger(auth, host3])
  
      t2 = []
  
      t3 = []
  
      for i in range(len(t1)):
  
            t5 = t1['items']##   'items': [{'itemid': '26399'}]
  
            t6 = his(auth, t5['itemid'])##   his(auth,26399)
  
            t2.append(t1['description'])##监控项目描述
  
            t3.append(round(float(t6['lastvalue'])) / 1000)##项目ID 的值
  
      t4 = dict(zip(t2, t3))
  
      t8 = []
  
      for k in t4:
  
            t7 = k + ":" + "{}".format(t4) + "db"
  
            t8.append(t7)
  
      t9 = "\n".join(t8)
页: [1]
查看完整版本: python3--zabbixapi 的使用