国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 網(wǎng)管 > 服務(wù)器 > 正文

Zabbix與RRDtool繪圖之創(chuàng)建每臺(tái)主機(jī)每張圖的rrd文件

2020-05-27 13:09:13
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  下面我們一起來(lái)看一個(gè)關(guān)于Zabbix與RRDtool繪圖之創(chuàng)建每臺(tái)主機(jī)每張圖的rrd文件文章,希望這個(gè)例子可以給你有幫助。

  RRDtool對(duì)于圖形展示有多優(yōu)秀,想必懂的人都知道。

  兵馬未動(dòng)糧草先行。搞IT的得手冊(cè)先行RRDtool的官方手冊(cè)地址http://oss.oetiker.ch/rrdtool/doc/index.en.html 還有ailms整理的“RRDtool簡(jiǎn)體中文教程 v1.01” 該教材通俗易懂,先膜拜下!基本看了alims的 那個(gè)教程就對(duì)RRDtool清楚了。

  我創(chuàng)建每臺(tái)主機(jī)每張rrd文件用的是多線程,遍歷每張圖的時(shí)間大概12秒的樣子,千張圖的rrd文件創(chuàng)建大概2分鐘的樣子,主要受硬件的限制,如果

  有更快的硬盤(pán)和更多的線程應(yīng)該會(huì)快不少。rrd文件分類(lèi)參考了cacti的風(fēng)格,創(chuàng)建的rrd文件按主機(jī)ID分文件夾存放(hostid),每張圖的名稱

  由圖形ID和.rrd后綴組成(graphid.rrd)。

Zabbix與RRDtool繪圖之創(chuàng)建每臺(tái)主機(jī)每張圖的rrd文件 武林網(wǎng)

  創(chuàng)建每個(gè)rrd文件的py模塊如下,寫(xiě)的有點(diǎn)笨,有多少個(gè)不同的item組成的圖形就得定義不同的創(chuàng)建函數(shù),我找了一個(gè)下午都沒(méi)有找到更好的傳參方法,先

  就用這個(gè)笨方法。記住有幾種DS就需要寫(xiě)對(duì)應(yīng)的Item函數(shù),下面我只列出Item03,我是不會(huì)告訴你們我總共堆了24個(gè)一直到Item24

  代碼如下復(fù)制代碼

  #!/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)

  基本創(chuàng)建rrd文件的模塊寫(xiě)好了,然后組織數(shù)據(jù)、調(diào)用函數(shù)傳遞相應(yīng)的參數(shù)就可以了,下面是我寫(xiě)的一個(gè)多線程程序,同時(shí)啟用16個(gè)線程工作(CPU線程數(shù)的2倍)。可更改線程數(shù)適應(yīng)不同的硬件環(huán)境。

  代碼如下復(fù)制代碼

  #!/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):

  #如果主機(jī)存放rrd圖形目錄不存在,則創(chuàng)建

  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

  #遍歷每臺(tái)主機(jī)每張圖的每個(gè)項(xiàng)目的最新10的值,后來(lái)考慮到api的壓力改成每張圖的最新值(減少了一個(gè)for循環(huán)變量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()

 

  上面還有更新數(shù)據(jù)的函數(shù)沒(méi)有寫(xiě)完,用pass站位。過(guò)多的解釋就不用了,對(duì)著相應(yīng)的注釋大家都應(yīng)該看的懂。

 
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 三亚市| 玉山县| 满洲里市| 珠海市| 凤山县| 晋州市| 呼图壁县| 盐边县| 齐河县| 朝阳区| 从江县| 武宁县| 澄江县| 眉山市| 新龙县| 克拉玛依市| 廊坊市| 博爱县| 航空| 陈巴尔虎旗| 防城港市| 黄石市| 黄浦区| 民乐县| 武冈市| 开原市| 资中县| 宁强县| 平阳县| 广水市| 湘潭县| 麻江县| 册亨县| 红桥区| 古浪县| 安国市| 曲水县| 陈巴尔虎旗| 德钦县| 外汇| 增城市|