|
思路:
利用python的pyzabbix模块去连接Zabbix API,先判断主机是否存在,存在的话就获取这个主机的item,然后在Zabbix API中的history.get中的方法获取这些item是否有数据,有的话就是获取这些数据,然后在这个获取这个主机对应的的绘图,绘图对应的item,判断一个绘图里面有数据的item大于一,然后获取这些绘图加入到screen
软件包pyzabbix
pip install pyzabbix
代码
#!/usr/bin/env python2.7
from pyzabbix import ZabbixAPI
from datetime import datetime
import time
import sys
class zabbix(object):
def __init__(self, hostname,columns,name): #初始化一些参数
self.hostname = hostname
self.columns = columns
self.dynamic = 0
self.name = name
self.server = 'http://10.0.100.10/zabbix' #zabbix server ip
self.user = 'admin' #zabbix 帐号
self.passwd = 'admin' #密码
def __login(self): #登录
zapi = ZabbixAPI(self.server)
zapi.login(self.user,self.passwd)
return zapi
def __get_host(self): #获取主机
list_host=self.__login().host.get(output='extend',filter={'host':self.hostname,})
# print list_host
return list_host[0]['hostid']
def __get_item(self): #主机对应的获取item
list_item=self.__login().item.get(output='extend',hostids=self.__get_host())
itemids=[]
for x in list_item:
# print x['name'],x['itemid']
itemids.append(x['itemid'])
# print itemids
return itemids
def __get_history(self): #从历史中获取这些item判断是否有数据
self.values={}
for history in self.__get_item():
list_history=self.__login().history.get(output='extend',itemids=history,limit=1)
# print history
# print list_history
for point in list_history:
# print("{0}: {1}".format(datetime.fromtimestamp(int(point['clock'])).strftime("%x %X"), point['value']))
if self.values.has_key(history):
self.values[history]=self.values[history]+int(point['value'])
else:
self.values[history]=int(point['value'])
# break
# print self.values
def __get_graph(self): #获取绘图
graphids=[]
list_graph=self.__login().graph.get(output='extend',filter={"host":self.hostname})
for x in list_graph:
#print x['graphid']
graphids.append(x['graphid'])
print graphids
return graphids
def __get_graphitem(self): #从绘图中获取对应的item
have_value_graph=[]
for x in self.__get_graph():
# print x
list_graphitem=self.__login().graphitem.get(output='extend',graphids=x)
have_value=[]
for b in list_graphitem:
number=len(list_graphitem)
if b['itemid'] in self.values.keys():
if self.values[b['itemid']] != 0:
# print self.values[b['itemid']]
have_value.append(self.values[b['itemid']])
if len(have_value) > 0:
have_value_graph.append(x)
# print have_value_graph
x = 0
y = 0
graph_list=[]
for graph in have_value_graph:
# print "x is " + str(x)
# print "y is " + str(y)
graph_list.append({
"resourcetype":'0',
"resourceid": graph,
"width": "500",
"height": "100",
"x": str(x),
"y": str(y),
"colspan": "0",
"rowspan": "0",
"elements": "0",
"valign": "0",
"halign": "0",
"style": "0",
"url": "",
"dynamic": str(self.dynamic)
})
x += 1
# print type(x)
# print type(self.columns)
if x == int(self.columns):
x = 0
y += 1
return graph_list
def __create_screen(self): #创建有数据的screen
graphids=self.__get_graphitem()
columns = int(self.columns)
if len(graphids) % self.columns == 0:
vsize = len(graphids) / self.columns
else:
vsize = (len(graphids) / self.columns) + 1
# print graphids
self.__login().screen.create(name=self.name,hsize=self.columns,vsize=vsize,screenitems=graphids)
def __exists_screen(self):
list_exists=self.__login().screen.exists(name=self.name)
if list_exists:
print '%s is exists' % self.name
sys.exit(1)
def __exists_host(self):
list_exists=self.__login().host.exists(host=self.hostname)
if not list_exists:
print "%s is not exists" % self.hostname
def main(self):
self.__exists_host()
self.__exists_screen()
# self.__get_host()
# self.__get_item()
self.__get_history()
# self.__get_graph()
# self.__get_graphitem()
self.__create_screen()
if __name__ == '__main__':
from optparse import OptionParser #帮助
parser = OptionParser()
parser.add_option('-G', dest='graphname',
help='Zabbix Host Graph to create screen from')
parser.add_option('-H', dest='hostname',
help='Zabbix Host to create screen from')
parser.add_option('-c', dest='columns', type=int,
help='number of columns in the screen')
options,args=parser.parse_args()
# print options.columns
# print options.hostname,options.columns,options.graphname
a=zabbix(hostname=options.hostname,columns=options.columns,name=options.graphname)
a.main()
-G:生成新的screen
-H:zabbix定义的主机名
-c:指定需要几列
例子:
./screen_graph.py -G tom -H 10.0.100.3 -c 2
注:对于数据量大的主机生成screen会有点慢
附件:http://down.运维网.com/data/2364315
|
|
|