/ 2019-04-08
切记!!! 这个rrdtool模块,在windows环境下安装太费劲,就是因为没安装上所以现在改成了在ubuntu环境下开发,原来没有体会过,现在可真是体会过了。。。。。。
安装命令:pip install python-rrdtool
二,python 封装的rrdtool方法解析
# 1,rrdtool.first(filename) 返回第一个rra 第一次数据更新(采集)的时间戳
fist_time = rrdtool.first('static/rrdfiles/downloads.rrd')
print time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(fist_time))
# 2017-02-21 14:13:00
# 2,rrdtool.last(filename) 返回第一个rra 最近一次数据更新(采集)的时间戳
last_time = rrdtool.last('static/rrdfiles/downloads.rrd')
print time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(last_time))
# 2017-02-22 02:12:00
# 3, rrdtool.damps() 将rrd文件转换成xml文件
# damps = rrdtool.dump('static/rrdfiles/downloads.rrd')
# print(damps)
# 4, rrdtool.info(filename) 将rrd文件的结构信息以字典的形式表现起来.
info = rrdtool.info('static/rrdfiles/downloads.rrd')
# print(info)
# print(info["ds[metric].type"]) # GAUGE
# print(info["ds[metric].value"]) # 0.0
# 5, rrdtool.fecth fetch(args..): fetch data from an rrd.
mge1 = rrdtool.fetch("static/rrdfiles/downloads.rrd","AVERAGE")
print(mge1[1][0]) # metric 一个ds名,如果要是监测多个ds,应该是一个元祖多个值.
# 6, rrdtool.graph() # 绘图(下面会详细说明)
# 7,rrdtool.create() #创建一个rrd文件(还没有具体用到,以后学习在补充)
#create filename [--start|-b start time] [--step|-s step] [DS:ds-name:DST:heartbeat:min:max] [RRA:CF:xff:steps:rows
# 8, rrdtool.resize()指定-->为rrd文件中的rra数据增加或者减少行数,并生成新文件resize.rrd 不改变源文件。
# size = rrdtool.resize("static/rrdfiles/downloads.rrd","1",'GROW',["10",])(文件,具体哪个rra(从0开始),增加|减少,["具体多少行",])
#9,rrdtool.tune(args___) 可对原rrd文件进行更改,更改心跳值,最大值,最小值,数据源,ds变量名.
#tune filename [--heartbeat|-h ds-name:heartbeat] [--minimum|-i ds-name:min] [--maximum|-a ds-name:max] [--data-source-type|-d ds-name:DST] [--data-source-rename|-r old-name:new-name] # 举例 更改变量名:
# tune = rrdtool.tune("static/rrdfiles/resize.rrd",'-r','metric:memory')
mge1 = rrdtool.fetch("static/rrdfiles/resize.rrd","AVERAGE")
print(mge1[1][0]) # memory
##########还有一些方法,rrdtool.xport()可以编写一个xml格式的数据保存在一个或者多个rrd文件中。 rrdtool.update() 更新,为新创建的rrd文件 插入数据。这些方法目前用不到,先就不用了。
1,单参数单主机绘图详解:
# title = "test (" + time.strftime('%Y-%m-%d', time.localtime(time.time())) + ")"
rrdpath = "static/rrdfiles/downloads.rrd"
rrdtool.graph("static/RRDpng/unirrd.png",
# start,end x轴的起始结束时间:
# 如果都不写,默认是从当前算起一天内的。
# 如果没有指定end,默认是从start起到现在。
# 如果没有指定start,默认是1天前到end。
#对于选取数据时:rrd文件的rra有 一天,两天,一个星期,三个月,十二个月五种(我认为可变)。
#针对你的start end 时间的设定,graph自动从相对应的rra中提取数据。
"--start","20170214", # 监测的起始时间.
"--end","20170223", # 检测的结束时间.
"--vertical-label=Bytes/s", #图片左侧竖着写的一段字
"--width", "650", "--height", "230", # 图片的宽高设置.
# "--full-size-mode", # 图片自适应.
# "--only-graph", # 图片微缩图. 一会试一下!
"--title",title, # 图片的题目.
"--upper-limit","2",
"--lower-limit","0", # y 轴的最高最低限制,默认最低限制就是0.
# "--x-grid", "MINUTE:12:HOUR:1:HOUR:1:0:%H", # x轴配置是很复杂的配置,如果没有极特殊,就按照默认的配置。
# "MINUTE:12"表示控制每隔12分钟放置一根次要格线 "HOUR:1"表示控制每隔1小时放置一根主要格线 "HOUR:1" # 表示控制1个小时输出一个label标签"0:%H" # 0表示数字对齐格线,%H表示标签以小时示
"DEF:ds0=%s:metric:AVERAGE"%rrdpath, # DEF: = : : [:step= ][:start=][:end=]
# "DEF:max=%s:metric:MAX"%rrdpath,
# "DEF:min=%s:metric:MIN"%rrdpath, # DEF就是指定数据源,和CF字段.后面也可加step,start,end,用的比较少.
"AREA:ds0#00FF00", # 以面积的方式将ds0变量绘制成图表.AREA:value[#color[#color2]][:[legend][:STACK][:skipscale][:gradheight=y]
# "LINE:dso#00FF00", # 以折线的方式将ds0变量绘制成图表.LINE[width]:value[#color][:[legend][:STACK][:skipscale]
# 图表(下方罗列最大最小平均值)表现方式1:
# "VDEF:ds0max=ds0,MAXIMUM", # VDEF:vname=RPN VDEF就是通过RPN函数,返回给vname一个计算后结果.
# "VDEF:ds0aver=ds0,AVERAGE",
# "VDEF:ds0min=ds0,MINIMUM",
#
# "COMMENT:Classified display", # COMMENT就是设置图表下面的文本.
# "COMMENT:Maximum",
# "COMMENT:Average",
# "COMMENT:Minimum\\r", # 这四个是设置图标下面的显示标题.
# "AREA:ds0#00FF00:metric",
# "GPRINT:ds0max:%6.2lf %Sbps", # GPRINT:vname:CF:format GPRINT就是可将变量进行格式化输出,可以有很多指定参数.
# "GPRINT:ds0aver:%6.2lf %Sbps",
# "GPRINT:ds0min:%6.2lf %Sbps",
#图表(下方罗列最大最小平均值)表现方式2:
"HRULE:65535#FF0000:Alarm value",
# "AREA:ds0#FF0000:Alarm value",
# HRULE:value#color[:[legend][:dashes[=on_s[,off_s[,on_s,off_s]...]][ :dash-offset=offset]]]
"COMMENT:\\r", # 在网格下方输出一个换行符
"COMMENT:\\r",
"GPRINT:ds0:AVERAGE:Avg In metric\: %6.2lf %Sbps", # 绘制入流量平均值
"COMMENT: ",
"GPRINT:ds0:MAX:Max In metric\: %6.2lf %Sbps", # 绘制入流量最大值
"COMMENT: ",
"GPRINT:ds0:MIN:MIN In metric\: %6.2lf %Sbps\\r", # 绘制入流量最
# 绘制水平线,作为告警线,阈值为10
)
(0)