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