设为首页 收藏本站
查看: 1106|回复: 0

[经验分享] zabbix 批量添加有数据的绘图到screen

[复制链接]

尚未签到

发表于 2019-1-20 11:37:43 | 显示全部楼层 |阅读模式
  思路:

          利用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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-665546-1-1.html 上篇帖子: zabbix监控H3C交换机端口流量 下篇帖子: 使用zabbix监控服务器运行状态
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表