Python and RRD

RRD是Round Robin Database的意思,RRDTool是用来管理RRD的一个工具。RRDTool主页在这里,Wikipedia的页面在这里。RRD其实就是一个时序数据库,使用一个固定大小的环型buffer,适用于存储一些统计性的信息,如CPU负载呀,气温变化呀。我为什么要说这个东西呢,因为XenServer里的性能统计是用的RRD,你可以访问诸如http://xenserver-host/rrd_updates?cf=AVERAGE&interval=5&start=123131321形式的网址来获取统计信息。XenServer将返回一个XML文件,这个XML文件其实就是用rrdtool里的export工具导出的。

好,下载完成了这个文件以后,我们假设文件名是data.xml,你可以使用rrdtool restore data.xml data.rrd的方式将数据重新恢复成rrd的格式,然后就可以使用rrdtool进行一系列操作。rrdtool的操作可以写十篇博客,这不是我今天想说的重点。

我今天想说的是,当我把rrdtool跟Python集成的时候,发现Python提供了若干封装的工具,比如Python-PyRRD,Python-rrd,Python-rrdtool,我想没几个人能搞明白这几者之间的关系吧。我来说一下。

Python-rrdtool,这个就是rrdtool的一个Python封装,调用方式与rrdtool里命令的格式是一致的。

Python-rrd,这个据说应该是rrdtool的前身,命名方式不符合Python的命名策略,所以改名成了Python-rrdtool,但是debian和ubuntu的源里还保留了一个过渡性质的傀儡包(transitional dummy package),其实就是Python-rrdtool

Python-PyRRD,这个是OO化的rrdtool封装,个人比较推荐用这个包,方便,代码也更容易让人理解。

另外,Java也提供了两个rrdtool的封装,一个是JRobin,一个是rrd4j,后者是在前者的基础上做的,提供了更好的OO的支持和性能。但是这两个项目似乎更新得很慢,XenServer导出的rrd数据(version 0003)他们现在不支持(只支持到version 0001)。所以想用Java分析XenServer的性能,还是自己去解析那个xml文件吧。

  1. 2010年1月10日 00:43 | #1

    写的日志越来越多,相关日志现在也开始有结果了。

  2. sarah
    2010年1月11日 11:44 | #2

    您好!我现在准备用java版的RRD,研究了半天JRobin和rrd4j的关系,JRobin的主页http://oldwww.jrobin.org说项目已经停了,停的时候的版本是1.5.2,可是又看到http://www.jrobin.org上有1.5.9的版本,不知道是怎么回事,请问楼主rrd4j是换了人继续做的JRobin吗?

    我是不是用rrd4j就可以呢?

    十分感谢!

    • 2010年1月11日 13:33 | #3

      rrd4j是在jrobin的基础上做了些改进,是一个新的分支。http://oldwww.jrobin.org这个是旧的网站,http://www.jrobin.org这个是新的网站。
      好像两个版本都比较低了,最新的rrdtool导出的都支持的不好。但是你如果是在他的代码上做开发,应该没有问题吧。

  3. Chris
    2011年10月17日 13:02 | #4

    作者您好!我是在Xenserver做二次开发的,用的是C#的API,就像你上面说的,用HTTP的方式获取一个由RRD工具导出的一个XML文件。在XenCenter那里的性能统计是以统计图的形式展现的,请问是根据由这个XML文件绘制的吗?如果是,要怎么在VS2008 IDE下分析并绘制这些性能统计呢?目前还没有头绪,希望楼主能说说,十分感谢。

    • 2011年11月3日 19:30 | #5

      是根据这个XML画的图形,怎么画,就需要你自己来分析这个文件,然后使用适当的方法来画图了。我当时是在Linux下用工具画的,对你的应用场景我就不太清楚了。

发表评论

XHTML: 您可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">