Zabbix与RRDtool绘图之创建每台主机每张图的rrd文件

2016-03-31 15:50 76 1 收藏

下面这个Zabbix与RRDtool绘图之创建每台主机每张图的rrd文件教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!

【 tulaoshi.com - 服务器 】

Zabbix与RRDtool绘图之创建每台主机每张图的rrd文件

  下面我们一起来看一个关于Zabbix与RRDtool绘图之创建每台主机每张图的rrd文件文章,希望这个例子可以给你有帮助。

  RRDtool对于图形展示有多优秀,想必懂的人都知道。

  兵马未动粮草先行。搞IT的得手册先行RRDtool的官方手册地址http://oss.oetiker.ch/rrdtool/doc/index.en.html 还有ailms整理的RRDtool简体中文教程 v1.01 该教材通俗易懂,先膜拜下!基本看了alims的 那个教程就对RRDtool清楚了。

  我创建每台主机每张rrd文件用的是多线程,遍历每张图的时间大概12秒的样子,千张图的rrd文件创建大概2分钟的样子,主要受硬件的限制,如果

  有更快的硬盘和更多的线程应该会快不少。rrd文件分类参考了cacti的风格,创建的rrd文件按主机ID分文件夹存放(hostid),每张图的名称

  由图形ID和.rrd后缀组成(graphid.rrd)。

Zabbix与RRDtool绘图之创建每台主机每张图的rrd文件 图老师

  创建每个rrd文件的py模块如下,写的有点笨,有多少个不同的item组成的图形就得定义不同的创建函数,我找了一个下午都没有找到更好的传参方法,先

  就用这个笨方法。记住有几种DS就需要写对应的Item函数,下面我只列出Item03,我是不会告诉你们我总共堆了24个一直到Item24

  代码如下复制代码

  #!/usr/bin/env python

  #coding=utf-8

  import rrdtool

  def Item01(rrdname, startStamp, DS):

  rrdtool.create(rrdname, '--step', '60', '--start', startStamp, DS[0],

  'RRA:AVERAGE:0.5:1:3000',

  'RRA:AVERAGE:0.5:5:4200',

  'RRA:AVERAGE:0.5:24:3800',

  'RRA:AVERAGE:0.5:240:4400',

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/fuwuqi/)

  'RRA:MAX:0.5:1:3000',

  'RRA:MAX:0.5:5:4200',

  'RRA:MAX:0.5:24:3800',

  'RRA:MAX:0.5:240:4400',

  'RRA:MIN:0.5:1:3000',

  'RRA:MIN:0.5:5:4200',

  'RRA:MIN:0.5:24:3800',

  'RRA:MIN:0.5:240:4400')

  def Item02(rrdname, startStamp, DS):

  rrdtool.create(rrdname, '--step', '60', '--start', startStamp, DS[0],

  DS[1],

  'RRA:AVERAGE:0.5:1:3000',

  'RRA:AVERAGE:0.5:5:4200',

  'RRA:AVERAGE:0.5:24:3800',

  'RRA:AVERAGE:0.5:240:4400',

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/fuwuqi/)

  'RRA:MAX:0.5:1:3000',

  'RRA:MAX:0.5:5:4200',

  'RRA:MAX:0.5:24:3800',

  'RRA:MAX:0.5:240:4400',

  'RRA:MIN:0.5:1:3000',

  'RRA:MIN:0.5:5:4200',

  'RRA:MIN:0.5:24:3800',

  'RRA:MIN:0.5:240:4400')

  def Item03(rrdname, startStamp, DS):

  rrdtool.create(rrdname, '--step', '60', '--start', startStamp, DS[0],

  DS[1], DS[2],

  'RRA:AVERAGE:0.5:1:3000',

  'RRA:AVERAGE:0.5:5:4200',

  'RRA:AVERAGE:0.5:24:3800',

  'RRA:AVERAGE:0.5:240:4400',

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/fuwuqi/)

  'RRA:MAX:0.5:1:3000',

  'RRA:MAX:0.5:5:4200',

  'RRA:MAX:0.5:24:3800',

  'RRA:MAX:0.5:240:4400',

  'RRA:MIN:0.5:1:3000',

  'RRA:MIN:0.5:5:4200',

  'RRA:MIN:0.5:24:3800',

  'RRA:MIN:0.5:240:4400')

  基本创建rrd文件的模块写好了,然后组织数据、调用函数传递相应的参数就可以了,下面是我写的一个多线程程序,同时启用16个线程工作(CPU线程数的2倍)。可更改线程数适应不同的硬件环境。

  代码如下复制代码

  #!/usr/bin/env python

  #coding=utf-8

  from zabbixget import Zabbix

  from time import ctime

  import threading

  import createsub

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/fuwuqi/)

  import os

  import time, datetime

  def rrd_create(grinfo):

  #如果主机存放rrd图形目录不存在,则创建

  bashdir = "/opt/rrd/"

  path = bashdir + grinfo[0]['hostid'] + "/"

  if not os.path.exists(path):

  os.makedirs(path)

  rrdname = str(path + grinfo[0]['graphid'] + '.rrd')

  timeDaysAgo = (datetime.datetime.now() - datetime.timedelta(days = 730))

  startStamp = str(int(time.mktime(timeDaysAgo.timetuple())))

  DS = []

  for sub in grinfo:

  DStmp = str('DS:' + sub['itemid'] + ':GAUGE:120:0:U')

  DS.append(DStmp)

  if len(DS) == 1: createsub.Item01(rrdname, startStamp, DS)

  elif len(DS) == 2: createsub.Item02(rrdname, startStamp, DS)

  elif len(DS) == 3: createsub.Item03(rrdname, startStamp, DS)

  elif len(DS) == 4: createsub.Item04(rrdname, startStamp, DS)

  elif len(DS) == 5: createsub.Item05(rrdname, startStamp, DS)

  elif len(DS) == 6: createsub.Item06(rrdname, startStamp, DS)

  elif len(DS) == 7: createsub.Item07(rrdname, startStamp, DS)

  elif len(DS) == 8: createsub.Item08(rrdname, startStamp, DS)

  elif len(DS) == 9: createsub.Item09(rrdname, startStamp, DS)

  elif len(DS) == 10: createsub.Item10(rrdname, startStamp, DS)

  elif len(DS) == 11: createsub.Item11(rrdname, startStamp, DS)

  elif len(DS) == 12: createsub.Item12(rrdname, startStamp, DS)

  elif len(DS) == 13: createsub.Item13(rrdname, startStamp, DS)

  elif len(DS) == 14: createsub.Item14(rrdname, startStamp, DS)

  elif len(DS) == 15: createsub.Item15(rrdname, startStamp, DS)

  elif len(DS) == 16: createsub.Item16(rrdname, startStamp, DS)

  elif len(DS) == 17: createsub.Item17(rrdname, startStamp, DS)

  elif len(DS) == 18: createsub.Item18(rrdname, startStamp, DS)

  elif len(DS) == 19: createsub.Item19(rrdname, startStamp, DS)

  elif len(DS) == 20: createsub.Item20(rrdname, startStamp, DS)

  elif len(DS) == 21: createsub.Item21(rrdname, startStamp, DS)

  elif len(DS) == 22: createsub.Item22(rrdname, startStamp, DS)

  elif len(DS) == 23: createsub.Item23(rrdname, startStamp, DS)

  elif len(DS) == 24: createsub.Item24(rrdname, startStamp, DS)

  def rrd_update(rrdfile, data):

  pass

  def hosts_get():

  global zb

  zb = Zabbix()

  hostsName = zb.hostsid_get()

  return hostsName

  #遍历每台主机每张图的每个项目的最新10的值,后来考虑到api的压力改成每张图的最新值(减少了一个for循环变量items)

  def items_get(host):

  bashdir = "/opt/rrd/"

  graphsName = zb.hostgraph_get(host.keys())

  for graph in graphsName:

  grapitem = zb.graphitems_get(graph['graphid'])

  rrdfile = bashdir + host.values()[0] + "/" + str(graph['graphid']) + '.rrd'

  if os.path.isfile(rrdfile):

  data = []

  for item in grapitem:

  tmp = {'itemid':item['itemid'],'lastvalue':item['lastvalue']}

  data.append(tmp)

  rrd_update(rrdfile, data)

  print data

  else:

  grinfo = []

  for item in grapitem:

  tmp = {'hostid': host.values()[0], 'graphid': graph['graphid'], 'itemid': item['itemid']}

  grinfo.append(tmp)

  rrd_create(grinfo)

  def main():

  threads = []

  keys = hosts_get()

  numkey = len(keys)

  loop = 0

  for i in range(0, numkey, 16):

  nkeys = range(loop*16, (loop+1)*16, 1)

  for i in nkeys:

  if i = numkey:

  break

  else:

  t = threading.Thread(target=items_get, args=(keys[i],))

  threads.append(t)

  for i in nkeys:

  if i = numkey:

  break

  else:

  threads[i].start()

  for i in nkeys:

  if i = numkey:

  break

  threads[i].join()

  loop = loop + 1

  if __name__ == "__main__":

  main()

 

  上面还有更新数据的函数没有写完,用pass站位。过多的解释就不用了,对着相应的注释大家都应该看的懂。

 

来源:http://www.tulaoshi.com/n/20160331/2051281.html

延伸阅读
标签: 电脑入门
在工作时最悲剧的就是做了很久的文档由于某些电脑原因导致文件损坏,丢失,本教程为大家介绍如何使用word2007自动创建备份文件,防止文件丢失。 操作步骤如下所述: 第1步,打开Word2007窗口,然后依次单击Office按钮→Word选项按钮,如图1所示。 图1单击Word选项按钮 第2步,在打开的Word选项对话框中切换到高级选项卡,然后在保存...
标签: autocad教程
关键字: AutoCAD 2009 AutoCAD对象 中望CAD AutoCAD三维造型 AutoCAD造型第二讲:二维平面绘图、编辑与绘图环境设置(一)。 本讲学习:图形界限设置、图层设置、辅助命令(捕捉、栅格)、圆、镜像、分解、移动(复制)、倒圆角 一、绘图环境设置 绘图环境的基本设置包括:坐标系、图形单位、图形界限、系统设置、图...
标签: autocad教程
17.3.1使用向导创建新布局 布局向导用于引导用户来创建一个新的布局,每个向导页面都将提示用户为正在创建的新布局指定煌陌婷婧痛蛴∩柚谩5饔?br布局向导命令的方式为: 菜单:【Tools(工具)】→【Wizards(向导)】→【CreateLayout…(创建布局)】 命令行:layoutwizard 调用该命令后,AutoCAD将显示“CreateLayout(创建向导)”...
经常开机 电脑不能长时间的不用,特别是在潮湿的季节,为了避免主机因受潮造成短路,哪怕是开机半小时。雨季打雷的时候记住千万不要开电脑,而且要把所有的电源插头拔下来。 散热防冻 夏季电脑长期在没有空调的房间里运行过热会导致运行速度过慢死机。冬季电脑过冷会导致开不开机的问题出现。 注意防尘 电脑不用的时候...
第一步:在桌面上点击开始,在里面打开运行,然后在命令行里输入%systemroot%system32driversetc,确定。 第二步:然后就出现文件夹窗口,在里面找到hosts,鼠标右键单击这个文件,在下拉里面点击删除。 第三步:然后在文件夹窗口,用鼠标右键点击空白处,...

经验教程

588

收藏

31
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部