2、创建rrd数据库

格式:
rrdtool create filename [--start|-b start time] [--step|-s step] 
                         [DS:ds-name:DST:dst arguments]  
                         [RRA:CF:cf arguments]
例子:
 rrdtool create test.rrd             \
            --start 920804400          \
            DS:speed:COUNTER:600:U:U   \
            RRA:AVERAGE:0.5:1:24       \
            RRA:AVERAGE:0.5:6:10
逐行解释
          通过 rrdtool 命令,我们创建了一个名为 test.rrd 的 rrd(round robin database),
          这个记录的创建时间是一个 unixtime:920804400
          该记录的数据源(DS)名为“speed”,代表一个时间点的称呼,比如在时间 1467084000 时的 speed 。COUNTER 是 DST (数据源类型),600s 是心跳(heartbeat),讲一下“心跳”:

     心跳官网文档解释:
heartbeat defines the maximum number of seconds that may pass between two updates of this data source before the value of the data source is assumed to be *UNKNOWN*.
   
     心跳的话,感觉是一个容错时间段,需要跟 step 配合使用。比如 step 是 60s,heartbeat 也是60s,那么你需要每隔 60s 向 rrd 喂一次数据,例如 10:30 喂了一次,如果你 10:31 没有喂,那么这个时间点的数据就没有了,空白了;但是如果你的 heartbeat 是 120s ,那么你 10:31 没有喂数据,但你在 10:32 喂了一次数据,那么你 10:31 也会有数据,并且随 10:32 的相同。看图:








          该记录的默认 step 为 300s ,意思是每五分钟给 rrd 喂一次数据。 可以通过参数 --step 300 或 -b 300 来设置。
          关于 RRA:AVERAGE:0.5:6:10 着重讲一下:
首先得知道RRA的格式:RRA:cf:xff:steps:rows,其中:
xff The xfiles factor defines what part of a consolidation interval may be made up from *UNKNOWN* data while the consolidated value is still regarded as known. It is given as the ratio of allowed *UNKNOWN* PDPs to the number of PDPs in the interval. Thus, it ranges from 0 to 1 (exclusive).

steps defines how many of these primary data points are used to build a consolidated data point which then goes into the archive.

rows defines how many generations of data values are kept in an RRA. Obviously, this has to be greater than zero. 
xff讲过了,就是一个PDP和CDP的比例,范围是0~1,对应例子里的0.5
steps对应例子里的6,表示,每6个PDP合成1一个CDP,合成方法为cf中指定的方法。
rows对应例子里的10,意思是rra中留存的数据的数量,画个图演示一下:



如图所示,RRA:AVERAGE:0.5:6:10 就定义了一个大小为 10 个 time slot 的圆型数据库,中间的箭头就是指针,每当存够了10个,就会自动顺序抹掉数据,继续填充数据。
所以rrd的大小是固定的,无需维护的。
RRA:AVERAGE:0.5:6:10 有两层意思:
第一,数据能维持多久?只能维持10个时间槽,每个CDP会填充一个槽,而决定CDP的时长的因素有两个,一个是step,一个是steps,step是出啊关键rrd时候定义的,steps是这里定义的,确定几个PDP合成一个CDP,一个PDP消耗一个step,所以一个CDP消耗step*steps,所以相当于每个时间槽里的记录(数据),只能存活 step*steps*rows 。
第二,就是在图像上的展示,图上只能展示 rows 个数据,第 rows+1 个出现的时候,第1个已经被抹掉了。

在该记录中,保存了两份 rra(round robin archive)存档,step*1*24=60s*24=24min 表示存档只存留24分钟的记录,过了24分钟就看不到了,被抹掉了。圆形的嘛,指针就到头了,开始记录新的记录。
                                                 step*6*10=60s*6*10=1hr,表示只存档1个小时的数据,也就是10个数据,但是这10个数据消耗一个小时才能抹掉第一个数据。

想感受的话,可以参考一下代码:

rrdtool create all.rrd --start 978300900 --step 60\
            DS:test:GAUGE:60:U:U \
            RRA:AVERAGE:0.5:1:3

rrdtool updatev all.rrd  978300960:300
rrdtool updatev all.rrd  978301020:600
rrdtool updatev all.rrd  978301080:900
rrdtool updatev all.rrd  978301140:1200   


rrdtool graph test.png   --start 978300900 --end 978301140   DEF:myspeed=all.rrd:test:AVERAGE  LINE2:myspeed#FF0000 

rrdtool updatev all.rrd  978301200:1500

rrdtool graph test.png   --start 978300900 --end 978301200   DEF:myspeed=all.rrd:test:AVERAGE   LINE2:myspeed#FF0000

          其中 0.5 是一个固定值,意思是插入的数据如果有 50% 的错误率或者 NaN ,则这个时间点的数据不被认为是一个成功的数据,设置该字段值得参数名为:xff,举个例子:
          
          RRA:AVERAGE:0.5:24:600
          “这个 RRA 中,每24个 PDP (共两小时)就合成为一个 CDP,如果这 24 个 PDP 中有部分值是 UNKNOWN (原因可以很多),例如1个,那么这个 CDP 合成的结果如何呢?是否就为 UNKNOWN 呢?
          不是的,这要看 xff 字段而定。Xff 字段实际就是一个比例值。0.5 表示一个 CDP 中的所有 PDP 如果超过一半的值为 UNKNOWN ,则该 CDP 的值就被标为UNKNOWN。也就是说,如果24个 PDP中有12个或者超过12个 PDP 的值是 UNKNOWN ,则该 CPD 就无法合成,或者合成的结果为 UNKNOWN;
          如果是11个 PDP 的值为 UNKNOWN ,则该 CDP 的值等于剩下 13  个 PDP 的平均值。
          如果一个 CDP 是有2个 PDP 组成,xff 为 0.5 ,那么只要有一个 PDP 为 UNKNOWN ,则该 PDP 所对应的 CDP 的值就是 UNKNOWN 了”

注:每个PDP都有一个值,都是按照step向rrd喂的数据,但是最后会合成一个,合成的方法就是根据CF,比如CF是AVERAGE,那么当24个timestamp的值都喂完了,喂到位了,则开始进行AVERAGE,得出的值会成为代表这24个PDP的CPD,显示在图像上。


RRA:AVERAGE:0.5:6:10中的6,相当于团购,凑够6个人后求一次平均值,看这个例子:

rrdtool create all.rrd --start 978300900 --step 60\
            DS:test:GAUGE:60:U:U \
            RRA:AVERAGE:0.5:1:5
            RRA:AVERAGE:0.5:4:5

然后开始update数据:

[root@vm-10-11-146-246 rrdtest]# rrdtool updatev all.rrd  978300960:300
return_value = 0
[978300960]RRA[AVERAGE][1]DS[test] = 3.0000000000e+02
[978300960]RRA[AVERAGE][4]DS[test] = NaN
[root@vm-10-11-146-246 rrdtest]# rrdtool updatev all.rrd  978301020:400    凑 1
return_value = 0
[978301020]RRA[AVERAGE][1]DS[test] = 4.0000000000e+02
[root@vm-10-11-146-246 rrdtest]# rrdtool updatev all.rrd  978301080:500    凑 2
return_value = 0
[978301080]RRA[AVERAGE][1]DS[test] = 5.0000000000e+02
[root@vm-10-11-146-246 rrdtest]# rrdtool updatev all.rrd  978301140:600    凑 3
return_value = 0
[978301140]RRA[AVERAGE][1]DS[test] = 6.0000000000e+02
[root@vm-10-11-146-246 rrdtest]# rrdtool updatev all.rrd  978301200:700    凑够 4  (400+500+600+700)/4 = 550
return_value = 0
[978301200]RRA[AVERAGE][1]DS[test] = 7.0000000000e+02
[978301200]RRA[AVERAGE][4]DS[test] = 5.5000000000e+02
[root@vm-10-11-146-246 rrdtest]# rrdtool updatev all.rrd  978301260:800    凑 1
return_value = 0
[978301260]RRA[AVERAGE][1]DS[test] = 8.0000000000e+02
[root@vm-10-11-146-246 rrdtest]# rrdtool updatev all.rrd  978301320:900    凑 2
return_value = 0
[978301320]RRA[AVERAGE][1]DS[test] = 9.0000000000e+02
[root@vm-10-11-146-246 rrdtest]# rrdtool updatev all.rrd  978301380:1000   凑 3
return_value = 0
[978301380]RRA[AVERAGE][1]DS[test] = 1.0000000000e+03
[root@vm-10-11-146-246 rrdtest]# rrdtool updatev all.rrd  978301440:1100   凑够 4  (800+900+1000+1100)/4 = 950
return_value = 0
[978301440]RRA[AVERAGE][1]DS[test] = 1.1000000000e+03
[978301440]RRA[AVERAGE][4]DS[test] = 9.5000000000e+02


相当于什么概念,相当于把4*60s的数据进行了一次平均值,算作一次,相当于是4分钟的平均值算作一次。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值