魔兽世界采药600到700:RRD起步1——通过例子理解RRD(译)

来源:百度文库 编辑:九乡新闻网 时间:2024/05/04 08:51:24

 RRD起步1——通过例子理解RRD(译)收藏

新一篇: RRD起步2——神奇绘图(译)

by:ysuncn(欢迎转载,请注明译者)

        RRD数据库的结构与其他的线性结构数据库不同,其他数据库都是以栏或其他参数来定义表格的,这种定义有时候会非常复杂,尤其数据库比较大时。RRDtool数据库主要用于监测,因此结构非常简单,需要被定义的参数是那些拥有值的变量以及这些值的档案。由于与时间关系密切,这里还定义了一些与时间相关的参数。鉴于这种结构,RRDtool数据库的定义还提供了在缺乏更新数据的情况下应采取的特定动作。与RRDtool 数据库相关的一些术语包括:Data Source (DS), heartbeat, Date Source Type (DST), Round Robin Archive (RRA), 以及Consolidation Function (CF)等。

        可以用一个例子还很好的解释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的秒数,在更新数据库时,更新时间必须比开始时间大,而且必须用距01-01-1970的秒数表示。

        间隔300秒表示数据库每300秒需要新的数据,用于产生数据的脚本应该每隔这个间隔时间运行以保证及时更新。

        DS (Data Source)是与被监测设备的参数相关的实际变量,其语法如下:

DS:variable_name:DST:heartbeat:min:max

        DS是关键字,variable_name是参数在数据库中的名字,需要的话,一个数据库中可以有很多DS。每个时间间隔之后,DS的一个新值将提供给数据库用于更新,这个值也被称为Primary Data Point (PDP)。在我们上边的例子中,新的PDP每300秒产生一次。

        DST数据源类型定义了DS的类型,供选的参数包括COUNTER, DERIVE, ABSOLUTE, GAUGE。声明为COUNTER的DS将会每隔间隔时间保存数值的变化率,只有变量的数值一直增加才能使用,流经路由器的流量很适合使用COUNTER类型;DERIVE与COUNTER一样,但它允许负值,如果你想查看你的服务器可用空间的变化率,你可能会用到DERIVE;ABSOLUTE也是保存变化率,但它假设前边的数据被置为0,当前数据与前一数据的差异与当前的值是一样的,这样它仅仅存储了当前值与时间间隔的商;GAUGE并不是保存变化率,它存储了数值本身,并没有任何分割计算,服务器的内存消耗是gauge的一个典型例子。各种DST的不同可以用下边的例子来解释:

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.我们的例子中,heartbeat设为600,如果数据库在300秒内没有得到新的PDP,它将把UNKNOWN保存到数据库中,UNKNOWN是RRDtool的一个特殊值,它比假设丢失的值是0或是其他的可能数值要好的多,例如,路由器的流计数器一直在增长,如果一个值丢失了,0而不是UNKNOWN被存储了,这样当下一个值到来的时候,它将会计算当前值与前一值(0)的差值来生成数据,这显然不合适,可见插入UNKNOWN是很重要的。

        下边的两个值分别是最小值minimum和最大值maximum,区间内的值将被存储到变量,其他的值将会在变量中存入UNKNOWN。

        下一行是声明round robin archive (RRA),语法如下:

RRA:CF:xff:step:rows

        RRA是关键字,CF(consolidation function)可以是AVERAGE, MINIMUM, MAXIMUM, 和LAST中的一种。引入一个名词consolidated data point (CDP),它是若干个PDP经过CF(averaged, maximum/minimum value or last value)作用的结果,RRA将会保存多行的CDP。

        最后再看看上边的例子,对于第一个RRA,12(间隔)个PDP(DS变量)的平均值(AVERAGEed(CF))构造了一个CDP,24(行)这种CDP被存档。每个PDP300秒产生,12个PDP代表300秒×12=1小时,24个这样的CDP代表1天,这意味着:这个RRA每1天得到一次,第25个CDP将代替第1个CDP;第二个RRA保存了31个CDP,每个CDP代表了一天的平均值(288个PDP),因此这个RRA是一个月的档案,一个数据库可以有多个档案,如果有多个DS,每个单独的RRA将会保存所有DS的数据,例如一个数据库声明了3个DS,以及天、星期、月、年4个RRA,那么每个RRA都将从3个变量中获取数据。

     PS:个人理解,DS仅仅是变量,提供给DS的(数据)——PDP不会保存在数据库中,存档的是CDP——CF处理过的PDP,当然如果某个RRA的step设为1,PDP对于这个RRA的动作就是直接存档,例如:

RRA:AVERAGE:0:1:600。每个PDP作为一个CDP存档,保存600行。所以你能够从数据库中取回的数据是CDP(环形的会覆盖的哦),PDP如果对所有的RRA(的CDP)都没贡献了,估计就自动释放了。