八亿电脑网
游戏盒子
当前位置: 首页 > 八亿电脑 > 电脑知识 >

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

时间:2015-03-01 21:27来源:网络 作者:win8e 点击:
游戏盒子

  下面我们一起来看一个关于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)。

八亿电脑网

  创建每个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',

  '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',

  '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',

  '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

  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)

本篇文章标签: 教程 Win10 win7 软件 Win8
发表评论