初识RRDTOOL

最近接触到的几种监控系统,包括nagios,ganglia,icinga,opennms可谓各有优缺点,但其绘图部分基本上都使用了rrdtool这个工具,其中opennms用的是JAVA版本的rrdtool,基本上和RRDTOOL的原理类似。

这里总结一下RRD的一些基础知识,RRDtool --“Round Robin Database tool”,其实是一种数据库工具,但是它与普通的线性数据库差别是比较大的。

主要区别:

1 首先 RRDtool 存储数据,扮演了一个后台工具的角色。但同时 RRDtool 又允许创建图表,这使得RRDtool看起来又像是前端工具。其他的数据库只能存储数据,不能创建图表。 

2 普通的线性数据库,新增的数据会被放在表的最下端,所以数据库所占的大小是不断变化的。但RDtool 的每个 rrd 文件的大小是创建的时候固定下来的,可以把RRDTOOL数据库想象成圆的一周,而数据则被附加在这圆周上,当新的数据已经循环存到起始点的时候,就会覆盖以前存的数据,因此这种数据库大小是固定不变的, Round Robin也就是这个意思。

3 其他数据库只是被动的接受数据, RRDtool 可以对收到的数据进行计算,例如前后两个数据的变化程度(rate of  change),并存储这个变化程度。 

4 RRDtool 要求定时获取数据,其他数据库则没有该要求。如果在一个时间间隔内(heartbeat)没有收到值,则会用 UNKN 代替,其他数据库则不会这样。 

    
RRDTOOL是被设计用来储存时间序列的数据。每一个数据更新的时候,都会存一个相关的时间戳。时间总是以秒表示至今(从01-01-1970开始)。RRDtool可以安装在Unix以及Window。它带有一个命令集进行各种数据库的操作。这个命令组可以从命令行调用,或者从SHELL或Perl脚本使用。脚本作为包囊(wrappers)来访问存储在RRDtool数据库数据。

RRDTOOL数据库的结构是不同于其他线性数据库的。其他数据库定义表列和许多其他的参数,这些定义有时是非常复杂的,尤其是大型的数据库。RRDtool数据库主要用于监测的目的,因此在结构上是很简单的。定义的参数其实就是变量的值以及值的结构档案。由于是时间敏感的,所以还需要定义一系列相关的时间参数。因为它的结构,定义一个RRDtool数据库还包括规定未更新值时特定的行为。数据来源(DS)、心跳、数据源类型(DST),Round Robin Archive(RRA),和固结功能(CF)是一些RRDtool数据库相关的术语。

下面用一个例子来解释RRDTOOL数据库的结构以及相关术语。

 rrdtool create target.rrd \
         --start 1023654125 \
         --step 300 \
         DS:mem:GAUGE:600:0:671744 \
         RRA:AVERAGE:0.5:12:24 \
         RRA:AVERAGE:0.5:288:31

这个例子建立一个命名为target.rrd数据库。开始时间1'023'654'125是自从01-01-1970以来的总秒数(可能是毫秒)。当更新数据库的更新时间也指定。此更新时间必须大(后),然后开始时间,必须在几秒钟内自时代。更新数据库的更新时间也指定,更新时间必须是开始时间之后,必须是从计算机计时点以来的毫秒数。

step300秒指明了数据需要每300秒更新一次值。包裹脚本需要按照这个时间来执行确保每隔step秒都去更新数据库。

DS:用来声明数据源的,也可以理解为声明数据变量的关键字。DS的语法格式如下:

 DS:variable_name:DST:heartbeat:min:max

DS-NAME:变量名,可以理解为你给这个数据源起的助记符(简称DSN)。当每一个刷新周期到来的时候,数据文档中各变量对应的值就会被更新。这个变量对应的值在官方文档中也叫做主要数据点――PDP(Primary Data Point)。

DST:DS的类型,通常有:GAUGE, COUNTER, DERIVE, 和ABSOLUTE 四种,下面依次介绍:

GAUGE:
我们用的最多的就是GAUGE了,它的中文解释是:测量。在这里它表示实际的值。比如说输入次序为98 100 98,那么输出顺序也是98 100 98。它没有“平均”的概念,RRDtool 收到值之后直接存入 RRA 中
COUNTER:
必须是递增的,除非是计数器溢出(overflows)。在这种情况下,RRDtool 会自动修改收到的值。例如网络接口流量、收到的packets 数量都属于这一类型。累计值,自己进行计算,比如说输入次序为98 100 98,那么输出顺序也是2 -2,怎么出来的这两个数值呢?100-98 98-100,其实就是两个差值,它表示的是经过一个刷新周期的变化率。
DERIVE:
和 COUNTER 类似。但可以是递增,也可以递减,或者一会增加一会儿减少。也是累计值,不同的是它不存在负值,最小的是0,不如-2那么它就只划0,结果为 2 0
ABSOLUTE:
ABSOLUTE 比较特殊,它每次都假定前一个interval的值是0,再计算平均值。如同COUNTER,但COUNTER可能overflow(数值过大),所以会取绝对值
补充:COUNTER/DERIVE/AVSOLVTE 虽然都是取差值,但会再除以两次间隔间的秒数。
例,两次间隔间为300秒,那画出来的就是 2/300,-2/300 的值

例子:

 Values       = 300, 600, 900, 1200
 Step         = 300 seconds
 COUNTER DS   =    1,  1,   1,    1
 DERIVE DS    =    1,  1,   1,    1
 ABSOLUTE DS  =    1,  2,   3,    4
 GAUGE DS     = 300, 600, 900, 1200

heartbeat 心跳有效期
比如在例子中,我们定义了心跳有效时间是600秒,也就是两个刷新周期。举个例子,在12点的时候没有产生数据,那么前后300S(共600S)的平均值就会绘成12点的值,但如果在两个刷新周期内,都没有接收到数据更新,那么这个时候,必须往数据文档中写入一个(UN)UNKNOWN值。这是  RRDTool的一个特别的地方。要知道MRTG在处理网络中断的时候,记录的是0值。这个0和UN还是有一定区别的。

in:max 记录数据的最小值和最大值
DS数值的有效范围,超出就是UN喽。也可以写成 U:U 代表不限范围。
小技巧:将数据源建立方式记为 "三文字,三数字"

如果要对ds进行计算,需要用到COMPUTE,这个比较特殊,它并不接受输入,它的定义是一个表达式,能够引用其他DS并自动计算出某个值。这里的格式应该为: DS:ds-name:COMPUTE:rpn-expression , 后面对这个再详细解释吧

DS讲完了就该讲RRA了,那么什么是RRA呢?
RRA:更简单,它的作用就是定义更新的数据是如何记录的,RRA 即  Round Robin Archive,Archive是什么,存档。比如我们每5分钟产生一条刷新的数据,那么一个小时就是12条。每天就是288 条。这么庞大的数据量,一定不可能都存下来。肯定有一个合并(consolidate)数据的方式,那么这个就是RRA的作用了。
下面具体介绍怎么应用RRA:

 RRA:CF:xff:step:rows

RRA:用以声明RRAs的关键字
CF:consolidation function 合并方式,包含四类:
AVERAGE, MIN,MAX, LAST //平均值,最大值,最小值,最后一笔
上面说过了,经过一个刷新周期,会获得一个主数据点(PDP),将若干个PDPs使用合并方式(CF)合并后会产生一个合并数据点CDP(consolidated data point)。
xff:xfiles factor 和unkown数据有关,很多资料都取0.5
step:有step条PDP合并形成一条CDP
row:记录的合并数据点CDP条数

我们在例子中对RRA是这样定义的:
RRA:AVERAGE:0.5:12:24 //1天
RRA:AVERAGE:0.5:288:31 //1月
对于第一个RRA,12条的PDP(每经过一个刷新周期产生一个PDP)经过CFed(AVERAGE),也就是取平均值,产生一个CDP,24个  CDPs存档。我们一起来计算一下时间,如果一个周期是300秒,那么12个PDP的产生时间就是一个小时,也就是一个小时产生一个CDP。24个  CDPs时间就是一天。说明这条通过这条RRA,我们可以取得一天的数据值。一天后,又经过一个小时。就会产生第25条,那么如何记录这个第25条数据呢?根据我们这个RRA的定义,它将会替代第一条CDP的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

day walker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值