一,python-rrdtool模块安装。

切记!!! 这个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文件 插入数据。这些方法目前用不到,先就不用了。

三,rrdtool绘图即rrdtool.graph()参数的解析:

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","", # 监测的起始时间.
"--end","", # 检测的结束时间. "--vertical-label=Bytes/s", #图片左侧竖着写的一段字 "--width", "", "--height", "", # 图片的宽高设置.
# "--full-size-mode", # 图片自适应.
# "--only-graph", # 图片微缩图. 一会试一下! "--title",title, # 图片的题目. "--upper-limit","",
"--lower-limit","", # 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:<vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>][:start=<time>][:end=<time>] # "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
)

2,单参数多主机的绘图详解:

这个跟上面那个差不度,将多个rrd文件中的检测对象绘制成一个图:

a,这些参数的单位量级必须差不多。(举例:不能一个是3200k,一个0.32k)

b,需要更改的地方也不多,只需根据rrd文件数量设定DEF数量,根据不同的vname,设定不同的柱状图或者折线图就行了。

title = "UNIpic (" + time.strftime('%Y-%m-%d', time.localtime(time.time())) + ")"
#1,设置多个 rrd 文件
rrdpath1 = "static/rrdfiles/f2_GAUGE_60.rrd"
rrdpath2 = "static/rrdfiles/f5_GAUGE_60.rrd" rrdtool.graph("static/RRDpng/unirrd.png",
"--start", "",
"--end", "",
"--vertical-label=Bytes/s",
"--width", "", "--height", "", # 图片的宽高设置.
"--title", title, # 图片的题目. #2,给不同的导入多个rrd文件源及ds名。
"DEF:ds0=%s:metric:AVERAGE" % rrdpath1,
"DEF:ds1=%s:metric:AVERAGE" % rrdpath2, #3,根据不同的ds名进行绘图。
"LINE:ds0#FF0000",
"LINE:ds1#00FF33", # 图表(下方罗列最大最小平均值)表现方式2:
"COMMENT:\\r", # 在网格下方输出一个换行符
"COMMENT:\\r",
"GPRINT:ds0:AVERAGE:Avg In metric\: %6.2lf %Sbps", # ds0绘制平均值
"COMMENT: ",
"GPRINT:ds0:MAX:Max In metric\: %6.2lf %Sbps", # ds0绘制最大值
"COMMENT: ",
"GPRINT:ds0:MIN:MIN In metric\: %6.2lf %Sbps\\r", # ds0绘制入流量最小值
"COMMENT:\\r", # 在网格下方输出一个换行符
"COMMENT:\\r",
"GPRINT:ds1:AVERAGE:Avg In metric\: %6.2lf %Sbps", # ds1绘制平均值
"COMMENT: ",
"GPRINT:ds1:MAX:Max In metric\: %6.2lf %Sbps", # ds1绘制最大值
"COMMENT: ",
"GPRINT:ds1:MIN:MIN In metric\: %6.2lf %Sbps\\r", # ds1绘制最小值 )

3,针对与网卡流量(多参数单主机涉及简单计算的)的绘图详解:

        title = "test (" + time.strftime('%Y-%m-%d', time.localtime(time.time())) + ")"
# 重点解释"--x-grid","MINUTE:12:HOUR:1:HOUR:1:0:%H"参数的作用(从左往右进行分解)
"MINUTE:12" # 表示控制每隔12分钟放置一根次要格线
"HOUR:1" # 表示控制每隔1小时放置一根主要格线
"HOUR:1" # 表示控制1个小时输出一个label标签
"0:%H" # 0表示数字对齐格线,%H表示 标签以小时显示
PNG = rrdtool.graph("Flow.png", "--start", "-1d", "--vertical-label=Bytes/s",
"--x-grid", "MINUTE:12:HOUR:1:HOUR:1:0:%H",
"--width", "", "--height", "", "--title", title,
"DEF:inoctets=static/rrdfiles/downloads.rrd:eth0_in:AVERAGE", # 指定网卡入流量数据源DS及CF
"DEF:outoctets=static/rrdfiles/downloads.rrd:eth0_out:AVERAGE", # 指定网卡出流量数据源DS及CF
"CDEF:total=inoctets,outoctets,+", # 通过CDEF合并网卡出入流量,得出总流量total "LINE1:total#FF8833:Total traffic", # 以线条方式绘制总流量
"AREA:inoctets#00FF00:In traffic", # 以面积方式绘制入流量
"LINE1:outoctets#0000FF:Out traffic", # 以线条方式绘制出流量
"HRULE:6144#FF0000:Alarm value\\r", # 绘制水平线,作为告警线,阈值为6.1k
"CDEF:inbits=inoctets,8,*", # 将入流量换算成bit,即*8,计算结果给inbits
"CDEF:outbits=outoctets,8,*", # 将出流量换算成bit,即*8,计算结果给outbits
"COMMENT:\\r", # 在网格下方输出一个换行符
"COMMENT:\\r",
"GPRINT:inbits:AVERAGE:Avg In traffic\: %6.2lf %Sbps", # 绘制入流量平均值
"COMMENT: ",
"GPRINT:inbits:MAX:Max In traffic\: %6.2lf %Sbps", # 绘制入流量最大值
"COMMENT: ",
"GPRINT:inbits:MIN:MIN In traffic\: %6.2lf %Sbps\\r", # 绘制入流量最小值
"COMMENT: ",
"GPRINT:outbits:AVERAGE:Avg Out traffic\: %6.2lf %Sbps", # 绘制出流量平均值
"COMMENT: ",
"GPRINT:outbits:MAX:Max Out traffic\: %6.2lf %Sbps", # 绘制出流量最大值
"COMMENT: ",
"GPRINT:outbits:MIN:MIN Out traffic\: %6.2lf %Sbps\\r") # 绘制出流量最小值

参考文献:http://www.cnblogs.com/wjoyxt/p/5035185.html

        http://oss.oetiker.ch/rrdtool/doc/rrdgraph_examples.en.html

对python-rrdtool模块的浅研究。的更多相关文章

  1. Python——rrdtool模块的安装

    一.Centos环境yum命令安装 yum install rrdtool rrdtool-devel 二.源码安装 wget https://pypi.python.org/packages/99/ ...

  2. 浅谈Python时间模块

    浅谈Python时间模块 今天简单总结了一下Python处理时间和日期方面的模块,主要就是datetime.time.calendar三个模块的使用.希望这篇文章对于学习Python的朋友们有所帮助 ...

  3. python 各模块

    01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...

  4. Day5 模块及Python常用模块

    模块概述 定义:模块,用一砣代码实现了某类功能的代码集合. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,提供了代码的重用性.在Python中,一个.py文件就称之为一个模块(Mod ...

  5. python copy模块

    python copy模块 copy模块用于对象的拷贝操作 该模块只提供了两个主要的方法: copy.copy:浅复制 copy.deepcopy:深复制 直接赋值,深拷贝和浅拷贝的区别 直接赋值:简 ...

  6. python内建的命名空间研究

    python内建的命名空间研究 说明: python内置模块的命名空间.python在启动的时候会自动为我们载入很多内置的函数.类,比如 dict,list,type,print,这些都位于 __bu ...

  7. Python之模块和包

    一.模块 1.什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编 ...

  8. python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

    今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系 ...

  9. Day6 模块及Python常用模块

    模块概述 定义:模块,用一砣代码实现了某类功能的代码集合. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,提供了代码的重用性.在Python中,一个.py文件就称之为一个模块(Mod ...

随机推荐

  1. 手机端rem如何适配_rem详解及使用方法2

    作为一个前端开发人员,我们的任务是将UI设计师的图稿运用计算机语言呈现在用户面前.而现在的设备大小尺寸不一,近年来智能手机的普及更是让网页的用户大部分来源与手机,所以让不同大小的移动端屏幕都能较好的还 ...

  2. Java设计模式之(一)------单例模式

    1.什么是单例模式? 采取一定的办法保证在整个软件系统中,单例模式确保对于某个类只能存在一个实例.有如下三个特点: ①.单例类只能有一个实例 ②.单例类必须自己创建自己的实例 ③.单例类必须提供外界获 ...

  3. linux系统下phpstudy里的mysql使用方法

    linux作为一个优秀的服务器端管理系统,其实linux的桌面系统也用起来十分的nice.好吧,如何你在做开发的时候在linux下安装了lmap或者phpstudy,那么在第一次使用其自带的mysql ...

  4. Xamarin.android 重写axml控件

    https://www.cnblogs.com/lonelyxmas/p/5632694.html <Laco: 用来用引指定的控件            android:layout_widt ...

  5. class, classloder, dex 详解

    class与dex文件 什么是class文件 class文件是一种能够被JVM识别,加载并且执行的文件格式. class文件的作用 class文件的作用是记录一个类文件的所有信息. 例如记住了当前类的 ...

  6. vuex 基本用法、兄弟组件通信,参数传递

    vuex主要是是做数据交互,父子组件传值可以很容易办到,但是兄弟组件间传值,需要先将值传给父组件,再传给子组件,异常麻烦. vuex大概思路:a=new Vue(),发射数据'msg':a.$emit ...

  7. 每天学一点Docker(3)(制作你的第一个容器)

    今天开始制作第一个容器,其实很简单 首先你要准备这些条件: 1.一个Ubuntu系统 2.这个系统能够联网,最起码ping www.baidu.com是可以的 这些准备条件准备好了,接下来就开始做准备 ...

  8. AFNetWorking 对汉字部分UTF-8编码

    随笔记一下 好用的小技巧 1.将字典数据拼接成url的参数... AFQueryStringFromParameters NSString *query = AFQueryStringFromPara ...

  9. 浅谈MVC MVP MVVM

    复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用. 它本身很容易理解,但是要讲清楚,它与衍生的 MVP ...

  10. sql基本知识

    1.类型转换 用convert,cast float转换出现科学计数字母的问题:可以先转成numeric再转成varchar declare @fl float set @fl=1234567.123 ...