zoukankan      html  css  js  c++  java
  • Python与Zabbix API交互配置监控主机

      1 #!/usr/bin/env python
      2 #coding:utf-8
      3 
      4 import json,urllib2
      5 
      6 zabbix_url="http://IP地址/zabbix/api_jsonrpc.php" # api_jsonrpc.php zabbix官方提供的API接口
      7 zabbix_header={"Content-Type":"application/json"} # 指定网页的内容类型为json
      8 
      9 #登录认证信息
     10 def login():
     11     zabbix_user=raw_input("Pls enter ur username:")
     12     zabbix_pass=raw_input("Ur password:")
     13     auth_data=json.dumps(
     14             {
     15                 "jsonrpc":"2.0",
     16                 "method":"user.login",
     17                 "params":{
     18                     "user":zabbix_user,
     19                     "password":zabbix_pass
     20                 },
     21                 "id":0, #request id ,任意指定
     22             }
     23     )
     24     request=urllib2.Request(zabbix_url,auth_data)
     25     for key in zabbix_header:
     26         request.add_header(key,zabbix_header[key])
     27     result=urllib2.urlopen(request)
     28     response=json.loads(result.read())
     29     result.close()
     30 
     31     if 'result' in response:  #成功返回才有result属性
     32         auth_code=response['result'] #获取认证token
     33         print
     34         print "Login successfully!"
     35     else:
     36         print response['error']['data']
     37     return auth_code
     38 
     39 def get_host(auth_code):
     40     host_list=[]
     41     get_host_data=json.dumps(
     42             {
     43                 "jsonrpc":"2.0",
     44                 "method":"host.get",
     45                 "params":{
     46                     "output":"extend",
     47                 },
     48                 "auth":auth_code,
     49                 "id":1,
     50             }
     51     )
     52     #获取主机列表
     53     request=urllib2.Request(zabbix_url,get_host_data)
     54     for key in zabbix_header:
     55         request.add_header(key,zabbix_header[key])
     56     result=urllib2.urlopen(request)
     57     response=json.loads(result.read())
     58     result.close()
     59     print "%-15s%-60s%20s%20s%20s%20s%20s" % ('id','name','status','available','snmp_available','jmx_available','ipmi_available')
     60     for r in response['result']:
     61         host_list.append(r['hostid'])
     62     #    print r['hostid'],r['host'],r['name'],r['status'],r['available'],r['snmp_available'],r['jmx_available'],r['ipmi_available']
     63         print "%-15s%-60s%20s%20s%20s%20s%20s" % (r['hostid'],r['name'],r['status'],r['available'],r['snmp_available'],r['jmx_available'],r['ipmi_available'])
     64     #    print r
     65     print "Num of hosts:",len(host_list)
     66     return 0
     67 
     68 #查询group信息
     69 def get_group(auth_code):
     70     get_group_data=json.dumps({
     71         "jsonrpc":"2.0",
     72         "method":"hostgroup.get",
     73         "params":{
     74             "output":"extend"
     75         },
     76         "auth":auth_code,
     77         "id":2
     78     }
     79     )
     80 
     81     request=urllib2.Request(zabbix_url,get_group_data)
     82     for key in zabbix_header:
     83         request.add_header(key,zabbix_header[key])
     84     result=urllib2.urlopen(request)
     85     response=json.loads(result.read())
     86     result.close()
     87 
     88     if 'result' in response:
     89         print "%-10s%10s" % ('groupid','name')
     90         for i in response['result']:
     91             print "%-10s%10s" % (i['groupid'],i['name'])
     92     else:
     93         print response['error']['data']
     94     return 0
     95 
     96 #获取模板信息
     97 def get_temp(auth_code):
     98     get_temp_data=json.dumps(
     99             {
    100                 "jsonrpc":"2.0",
    101                 "method":"template.get",
    102                 "params":{
    103                     "output":"extend"
    104                 },
    105                 "auth":auth_code,
    106                 "id":3
    107             }
    108     )
    109 
    110     request=urllib2.Request(zabbix_url,get_temp_data)
    111     for key in zabbix_header:
    112         request.add_header(key,zabbix_header[key])
    113     result=urllib2.urlopen(request)
    114     response=json.loads(result.read())
    115     result.close()
    116 
    117     temp={}
    118     if 'result' in response:
    119         for i in response['result']:
    120     #        print i['host'],i['templateid']
    121             temp[i['host']]=i['templateid']
    122         print "%-50s%10s" % ('host','templateid')
    123         for i,j in temp.items():
    124             print "%-50s%10s" % (i,j)
    125     else:
    126         print response['error']['data']
    127     return 0
    128 
    129 #添加主机
    130 def add_host(auth_code):
    131     host=raw_input("host name:")
    132     name=raw_input("visible name:")
    133     ip=raw_input("ip:")
    134     groupid=raw_input("group id(以,号分隔):")
    135     groupid=groupid.split(',')
    136     for i,j in enumerate(groupid):
    137         groupid[i]={"groupid":j}
    138     temp=raw_input("template id(以,号分隔):")
    139     temp=temp.split(',')
    140     for i,j in enumerate(temp):
    141         temp[i]={"templateid":j}
    142     create_host=json.dumps(
    143         {
    144         "jsonrpc":"2.0",
    145         "method":"host.create",
    146         "params":{
    147             "host":host,
    148             "name":name,
    149             "interfaces":[
    150                 {
    151                     "type":1,
    152                     "main":1,
    153                     "useip":1,
    154                     "ip":ip,
    155                     "dns":"",
    156                     "port":"10050"
    157                 }
    158             ],
    159             "status":1, #创建时停用监控,0代表启用监控
    160             "groups":groupid,
    161             "templates":temp,
    162             "inventory_mode":1
    163         },
    164         "auth":auth_code,
    165         "id":4
    166         }
    167     )
    168 
    169     request=urllib2.Request(zabbix_url,create_host)
    170     for key in zabbix_header:
    171         request.add_header(key,zabbix_header[key])
    172     result=urllib2.urlopen(request)
    173     response=json.loads(result.read())
    174     result.close()
    175 
    176     if 'result' in response:
    177         print
    178         print "Add host successfully!"
    179     else:
    180         print "failed"
    181         print response['error']
    182 
    183 def del_host(auth_code):
    184     hostid=raw_input("Enter the host id(以,号分隔):")
    185     id_list=hostid.split(',')
    186     del_host_data=json.dumps(
    187             {
    188                 "jsonrpc":"2.0",
    189                 "method":"host.delete",
    190                 "params":id_list,
    191                 "auth":auth_code,
    192                 "id":5
    193             }
    194     )
    195     request=urllib2.Request(zabbix_url,del_host_data)
    196     for key in zabbix_header:
    197         request.add_header(key,zabbix_header[key])
    198     result=urllib2.urlopen(request)
    199     response=json.loads(result.read())
    200     if 'result' in response:
    201         print
    202         print "host"+" "+hostid+" "+"already deleted !!"
    203 
    204 while True:
    205     print '''
    206             Zabbix admin
    207     1.login
    208     2.host list
    209     3.host group
    210     4.template
    211     5.add host
    212     6.delete host
    213     7.exit
    214     '''
    215     choice=raw_input("Pls enter ur choice:")
    216     if choice == '1':
    217         auth_code=login()
    218     elif choice == '2':
    219         try:
    220             auth_code
    221         except NameError:
    222             print
    223             print "Pls login first !!"
    224             continue
    225         get_host(auth_code)
    226     elif choice == '3':
    227         try:
    228             auth_code
    229         except NameError:
    230             print
    231             print "Pls login first !!"
    232             continue
    233         get_group(auth_code)
    234     elif choice == '4':
    235         try:
    236             auth_code
    237         except NameError:
    238             print
    239             print "Pls login first !!"
    240             continue
    241         get_temp(auth_code)
    242     elif choice == '5':
    243         try:
    244             auth_code
    245         except NameError:
    246             print
    247             print "Pls login first !!"
    248             continue
    249         add_host(auth_code)
    250     elif choice == '6':
    251         try:
    252             auth_code
    253         except NameError:
    254             print
    255             print "Pls login first !!"
    256             continue
    257         del_host(auth_code)
    258     elif choice == '7':
    259         exit(0)
    260     else:
    261         pass
  • 相关阅读:
    2017.10.17笔记
    鼠标移入移出方向判断
    12.14 css3
    百叶窗 蒙版 图层
    banner轮播
    12.13
    12.11 jq基础
    11.30 AJAX
    11.28 Window事件 iframe操作
    11.28.cookie
  • 原文地址:https://www.cnblogs.com/williamwan/p/5680698.html
Copyright © 2011-2022 走看看