为什么80%的码农都做不了架构师?>>>   

最近需要用python根据收集到的数据进行绘图,决定使用rrd数据库,然后配合rrdtool来绘图,故学习一下rrdtool的用法。

用法如下:

创建:
create(...)
create(args..): Set up a new Round Robin Database
    create filename [--start|-b start time] [--step|-s step] [DS:ds-name:DST:heartbeat:min:max] [RRA:CF:xff:steps:rows]
    filename:是rrd的文件名,可以以rrd结尾。
    --step:rrdtool期望每隔多长事件收到一个值,默认是5分钟。
    --start:rrdtool第一个记录的起始时间,rrdtool不会接收任何数据的时间小于起始时间。例如你在update时给出的时间小于起始时间,则rrdtool会拒绝该值
    DS:DS用于定义数据源,是用来存放结果的变量名。该变量名在画图时会用到。
    DST:用来设置数据源的类型,有COUNTER、GUAGE、DERIVE、ABSOLUTE、COMPUTE等5种类型。
        COUNTER:数值必须是递增的
        DERIVE:和COUNTER类似,不过数据可递增可递减
        ABSOLUTE:他每次假定前一个时间间隔的值是0,然后计算平均值
        GAUGE:不做任何变化,直接存入rra中
        COMPUTE:他不接收具体值,而是定义一个表达式,然后算出某个值
    heartbeat:
    min:
    max:
    RRA:rra指定数据如何存放,他可以保存不同时间间隔的数据。力图每5分钟产生一条数据,这样一小时就是12条,如果每30分钟一条数据,这样一小时就是两条数据,这样一天,一年下来会有很多条数据,但是rrd数据库的大小是固定的,所以就有一个合并数据的方式了。这就是rra的功能。合并方式由CF指定。
    CF:CF就是用来设置数据合并的功能,有AVERAGE、MAX、MIN、LAST等4种类型,分别表示对PDP取平均、最大、最小、当前值。
    xff:xff字段设置一个比例值,rrdtool会把多个PDP合并为一个CDP,如果这写PDP中有值为UNKNOW的PDP,那么CDP的值该怎么计算,xff就是设置一个比例,当PDP中UNKNOW的比例超过多少是,就无法合成正常的CPD,合成的CPD值也为UNKNOW。
    steps:表示多少个PDP合成一个CDP
    rows:表示总共存多少个CDP?也就是可以保存多少数据?

PDP:在每个规定的时间间隔内rrdtool都会收到一个值,rrdtool在收到该值后,根据DST的设置,会计算出另一个值,这个值就是PDP。
    CDP:rrdtool使用多个PDP合并出一个CDP,也就是执行CF的后果,然后把这个CDP的值存入rra中。

查看第一次/最后一次数据更新时间:
first(...)
first(filename): Return the timestamp of the first data sample in an RRD

last(...)
last(filename): Return the timestamp of the last data sample in an RRD

查看rrd结构信息:
info(...)
info(filename): extract header information from an rrd

取出rrd的值:
fetch(...)
fetch(args..): fetch data from an rrd.
    fetch filename CF [--resolution|-r resolution] [--start|-s start] [--end|-e end]
    filename:要取出数据的rrd文件
    --start:可选,默认是end-1day
    --end:可选,默认是now
    CF:AVERAGE、MAX、MIN、LAST。前提是你的rrd中有该类型的rra才可以。

更新rrd数据:
update(...)
update(args..): Store a new set of values into the rrd
    update filename [--template|-t ds-name[:ds-name]...] N|timestamp:value[:value...] [timestamp:value[:value...] ...]
    filename:要更新的rrd文件
    --template:
    -t ds-name[:ds-name]:设置更新那个DS的数据
    N|timestamp:时间戳,表示数据在哪个时间点采集的,N表示now。
    value[:value...]:一个rrd文件可以有多个DS,所以一次update可以更新多个value。

update插入值后,并不会有返回,无法知道插入是否正常,可以用updatev

带返回值的插入:
updatev(...)
updatev is called in the same manner as update
    和update类似,不过每次插入后会返回一个状态码。

画图:
graph(...)
graph(args..): Create a graph based on data from one or several RRD
    graph filename [-s|--start seconds] [-e|--end seconds] [-x|--x-grid x-axis grid and label] [-y|--y-grid y-axis grid and label] [--alt-y-grid] [--alt-y-mrtg] [--alt-autoscale] [--alt-autoscale-max] [--units-exponent] value [-v|--vertical-label text] [-w|--width pixels] [-h|--height pixels] [-i|--interlaced] [-f|--imginfo formatstring] [-a|--imgformat GIF|PNG|GD] [-B|--background value] [-O|--overlay value] [-U|--unit value] [-z|--lazy] [-o|--logarithmic] [-u|--upper-limit value] [-l|--lower-limit value] [-g|--no-legend] [-r|--rigid] [--step value] [-b|--base value] [-c|--color COLORTAG#rrggbb] [-t|--title title] [DEF:vname=rrd:ds-name:CF] [CDEF:vname=rpn-expression] [PRINT:vname:CF:format] [GPRINT:vname:CF:format] [COMMENT:text] [HRULE:value#rrggbb[:legend]] [VRULE:time#rrggbb[:legend]] [LINE{1|2|3}:vname[#rrggbb[:legend]]] [AREA:vname[#rrggbb[:legend]]] [STACK:vname[#rrggbb[:legend]]]

filename:图片的名称,默认是PNG格式
    --start:图片X轴数据的起始时间
    --end:图片X轴数据的结束时间
    --x-grid x-axis grid and label:
    --y-grid y-axis grid and label:
    --alt-y-grid
    --alt-y-mrtg
    --alt-autoscale
    --alt-autoscale-max
    --units-exponent
    --vertical-label text  Y轴的文字说明
    --width pixels  X轴的大小
    --height pixels  Y轴的大小
    --interlaced
    --imginfo formatstring  
    --imgformat GIF|PNG|GD  图片格式
    --background value
    --overlay value
    --unit value
    --lazy
    --logarithmic
    --upper-limit value  Y轴数据值的上限,默认会自动调整Y轴的数字
    --lower-limit value  Y轴数据值的下限
    --no-legend  取消图表下方的图例
    --rigid  严格按照upper-limit/lower-limit来绘制
    --step value
    --base value  默认1K=1000 可以调整1K=1024
    --color COLORTAG#rrggbb
    --title title  图表上方的标题
    DEF:vname=rrd:ds-name:CF 定义绘图用的数据源,也就是从那个RRD中取数据,因为RRA有多种类型,所以需要指定CF
    CDEF:vname=rpn-expression  定义合并值,
    PRINT:vname:CF:format
    GPRINT:vname:CF:format  在图表的下方输出最大值、最小值之类
    COMMENT:text  用来输出一些字符串
    HRULE:value#rrggbb  在图表上绘制水平线
    VRULE:time#rrggbb  在图表上绘制垂直线
    LINE{1|2|3}:vname  使用线条来绘制vname的数据图
    AREA:vname  使用方块来绘制vname的数据图
    STACK:vname

下面附上一个例子:

###创建rrd
#!/usr/bin/python
import rrdtoolrrdb=rrdtool.create('rest.rrd','--step','60','--start','1369982786','DS:input:GAUGE:120:U:U','DS:output:GAUGE:120:U:U','RRA:LAST:0.5:1:600','RRA:AVERAGE:0.5:5:600','RRA:MAX:0.5:5:600','RRA:MIN:0.5:5:600')
if rrdb:print rrdtool.error()###rrd插入数据
#!/usr/bin/python
import time
import psutil
import rrdtoolfor keys in psutil.network_io_counters(pernic=True):if keys == 'em1':sent=psutil.network_io_counters(pernic=True)[keys][0]recv=psutil.network_io_counters(pernic=True)[keys][1]up=rrdtool.updatev('rest.rrd','N:%d:%d' % (sent,recv))print up###根据rrd绘图
#!/usr/bin/python
import rrdtoolrrdtool.graph('rest.png','--start','1369983960','--title','my rrd graph test','--vertical-label','bits','DEF:input=rest.rrd:input:LAST','DEF:output=rest.rrd:output:LAST','LINE1:input#0000FF:In traffic','LINE1:output#00FF00:Out traffic\\r','CDEF:bytes_in=input,8,*','CDEF:bytes_out=output,8,*','COMMENT:\\n','GPRINT:bytes_in:LAST:LAST in traffic\: %6.2lf %Sbps','COMMENT:  ','GPRINT:bytes_out:LAST:LAST out traffic\: %6.2lf %Sbps')

转载于:https://my.oschina.net/guol/blog/136023

python-rrdtool python-pyrrd相关推荐

  1. 什么是Python线程?Python线程如何创建?

    相信正在学习Python技术或者对Python语言有一定了解的人对于Python线程应该都不陌生,但是也有刚接触Python的小伙伴对于Python线程并不了解,今天小编就跟大家聊聊什么是Python ...

  2. Python杂谈——Python都能干什么呢?

    Python 今年 28 岁了.尽管它比我的许多读者年纪还要大,但是仍然受到高度的关注,因为它可以被应用于如今你所能想得到的相当多的软件开发和操作场景.要管理本地或者云基础设施吗?Python可以.开 ...

  3. 【Python】Python简单入门

    Python介绍   Python是一种高级的.动态类型的多范型编程语言.现在常用的Python版本是Python3.x. Python代码通常被认为是伪代码,因为在简明易懂的几行代码中可以表达出非常 ...

  4. Python入门 Python自学路线 Python如何学习

    本文介绍Python入门 Python自学路线 Python如何学习.先说点题外话吧:首先呢,我刚开始接触编程的时候,学的是C,那时候Python还没有这么火,后来学了C++,PHP,Java,前端. ...

  5. 【Python】Python中令人头疼的变量作用域问题,终于弄清楚了

    [Python]Python中令人头疼的变量作用域问题,终于弄清楚了_fengdu78的博客-CSDN博客 [Python]Python中令人头疼的变量作用域问题,终于弄清楚了_fengdu78的博客 ...

  6. 范德蒙德矩阵在MATLAB中怎么表示,Python 之 Python与MATLAB 矩阵操作总结

    Python 之 Python与MATLAB 矩阵操作小结 一.线形代数理论基础 线形代数(linear algebra)是数学的一个分支,研究矩阵理论.向量空间.线性变换和有限维线形方程组等内容. ...

  7. 【Python】Python学习----第一模块笔记

    1.python是什么? python是动态解释型的强类型定义语言. python官方版本的解释器是CPython.该解释器使用C语言开发. 当前主要使用3.x版本的python. 2.第一个pyth ...

  8. 谁的python入门教程好_怎样学习Python?Python入门必看

    Python目前可以用一个字来描述那就是"火",问题来了,这么火的语言零基础小白到底该怎样学习Python? 首先,从基础开始学习,切勿毛躁. 刚开始学习Python的时候,我们可 ...

  9. 下列不是python对文件的读操作方法是-小猿圈python之python期末考试测试题(一)...

    原标题:小猿圈python之python期末考试测试题(一) 又快临近期末考试了,小伙伴们是不是又开始焦虑了呢?挂科怎么办?如果很幸运看到小编的文章,你就偷着乐吧,小编总结出:一般python期末考试 ...

  10. 上海找python工作-python上海招聘

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 專 欄陈键冬,python中文社区专栏作者github:https:github ...

最新文章

  1. deeplearning量化
  2. 人工智能研究人员都忽略的问题
  3. 安装了ubuntu14.04+windows7双系统的笔记本启动后出现grub rescue提示符
  4. 【废弃】【WIP】JavaScript 函数
  5. 链接写不到txt文件该怎么办呢
  6. 关于tomcat出现闪退问题
  7. 关于spring-mvc.xml的mvc:resources元素浅析。
  8. JavaScript实现字符串转换成驼峰表示法
  9. windows 安装yaml支持和pytest支持等
  10. 中国移动云智融合峰会 | 1+1>2, 引领创新发展
  11. ffmpeg之让视频快进
  12. 张口就问“CCIE”月薪多少
  13. MySQL中修改root密码的方法
  14. 躲避校园网客户端的检测实现客户端移动热点开启
  15. 毕业同学录网站搭建源码分享
  16. shell工具finalShell
  17. 防火墙和IPS有什么区别
  18. PHP解析大型Excel表格的库:box/spout
  19. Apollo(阿波罗)(一)环境搭建
  20. 域控服务器里没有internet时间,加入域之后,【Internet 时间】选项没有了

热门文章

  1. 高中毕业怎么考计算机一级,30天以96分通过计算机等级考试,我是这样做的
  2. c语言课程设计做科普,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  3. python怎么安装xlutils_Python3安装xlutils
  4. win+shift+s截图保存在哪_今天才发现,原来不使用工具,电脑也能快速截图,你用过哪些?...
  5. php错误日志和php-frm错误日志,错误amp;日志
  6. java堆排序工具包_JAVA 排序工具类
  7. Gradient Boosting and GBDT
  8. java api文档_JAVA浏览器控件JxBrowser v7.3上线!最新API文档打包带走
  9. php query builder,php – Symfony2 – Doctrine2 QueryBuilder WHERE I...
  10. matlab求方程实根,简单迭代法求方程根的MATLAB程序