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

 

posted @ 2016-07-18 11:51  RockinRobin  阅读(1186)  评论(0编辑  收藏  举报