这是一个简单的利用Zabbix API添加主机,其实可以延伸很多。或许有的公司利用自动发现,但是自动发现有很多弊端,按多少时间间隔发现,考虑监控服务器IO性能等等。我想大公司的批量添加应该都是利用了API实现的,大体流程应该是这样。
应该有个资源管理系统录入我们需要的信息到数据库(比如redis)里,我们可以取一些需要的值出来当做json的参数传递给Zabbix API,这样就可以批量添加了,里面还可以用多进程和多线程实现哦,性能肯定没的说。
-
#!/usr/bin/env python
-
# -*- encoding: utf8 -*-
-
-
#导入模块,urllib2是一个模拟浏览器HTTP方法的模块
-
import json
-
import urllib2
-
import sys
-
from urllib2 import Request,urlopen,URLError,HTTPError
-
-
#url and url header
-
#zabbix的API地址、用户名、密码、这里修改为实际的参数
-
zabbix_url=" />
-
zabbix_header = {"Content-Type":"application/json"}
-
zabbix_user = "admin"
-
zabbix_pass = "zabbix"
-
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])
-
-
#认证和获取SESSION ID
-
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())
-
-
'''
-
#如果访问成功或者失败,这里的数据会显示如下
-
sucess result:
-
{"jsonrpc":"2.0",
-
"result": "182395ea90c1c983a6154dbe0b5bdb40",
-
"id":0
-
}
-
error result:
-
{'code': -32602
-
'data': 'Login name or password is incorrect.',
-
'message':'Invalid params.'
-
}
-
'''
-
#判断SESSIONID是否在返回的数据中
-
if 'result' in response:
-
auth_code = response['result']
-
else:
-
print response['error']['data']
-
-
#request_json
-
json_data ={
-
"method":"host.create",
-
"params":{'groups': [{'groupid': '12'}],
-
'host': 'WangWei Linux',
-
'interfaces': [{'dns':'',
-
'ip':'192.168.3.1',
-
'main':1,
-
'port':'10050',
-
'type':1,
-
'useip':1}],
-
'inventory': {'macaddress_a':'01234','macaddress_b':'56768'},
-
'templates': [{'templateid':'10001'}]}
-
}
-
-
json_base={
-
"jsonrpc":"2.0",
-
"auth":auth_code,
-
"id":1
-
}
-
-
json_data.update(json_base)
-
#用得到的SESSIONID去验证,获取主机的信息(用http.get方法)
-
if len(auth_code) == 0:
-
sys.exit(1)
-
if len(auth_code) != 0:
-
host_create_data = json.dumps(json_data)
-
-
#create request object
-
request = urllib2.Request(zabbix_url,host_create_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()
-
-
#将所有的主机信息显示出来
-
print response
-
#显示主机个数
-
print "Number Of Hosts: ",len(response['result'])
大家可以和上一篇获取主机信息的代码比较一下,其实没什么改变,就是json里的参数变了。而且还有好多代码可以分模块处理,比如登录代码可以分成一个模块,删除主机的代码就不贴了,不想害你们。给大家贴一下Zabbix API 官网的host.create的链接吧,希望大家有一个自学的好习惯。
https://www.zabbix.com/documentation/2.2/manual/api/reference/host/create
阅读(4603) | 评论(0) | 转发(0) |