参考了2篇文章才弄懂原理,谢谢两位的分享,分享如下:
http://my.oschina.net/u/1458120/blog/208857
http://blog.163.com/liulianyixin@126/blog/static/8548392420117235557367/
rrdtool是一个rrd数据库的工具,可以用来管理,绘图,功能使用实在是复杂繁琐。
rrd数据库的原理:
所 谓的“Round Robin” 其实是一种存储数据的方式,使用固定大小的空间来存储数据,并有一个指针指向最新的数据的位置。我们可以把用于存储数据的数据库的空间看成一个圆,上面有 很多刻度。这些刻度所在的位置就代表用于存储数据的地方。所谓指针,可以认为是从圆心指向这些刻度的一条直线。指针会随着数据的读写自动移动。要注意的 是,这个圆没有起点和终点,所以指针可以一直移动,而不用担心到达终点后就无法前进的问题。在一段时间后,当所有的空间都存满了数据,就又从头开始存放。 这样整个存储空间的大小就是一个固定的数值。所以RRDtool 就是使用类似的方式来存放数据的工具, RRDtool 所使用的数据库文件的后缀名是'.rrd。如下图,
常用rrdtool语句
rrdtool create filename.rrd \ ##创建一个名字为filename.rrd的数据库文件
--start time ##开始时间
--step ## 多少秒,从获取一次数据
DS:ds_name:DST:heartbeat:min:max
RRA:CF:xxf:steps:rows ##RRA可以创建多个。
下面是本人用通俗的两句话来理解:
DS:ds_name:DST:heartbeat:min:max
创建一个数据源名字为ds_name,并且数据源类型为DST:heartbeat的时间为某某(大于step时间),并且接受的数据最小值为min,最大值为max。这一步通过DS这行得到了PDP数据。
RRA:CF:xxf:steps:rows
对PDP数据进行归档,每steps个PDP使用CF的方法(比如AVERAGE方法)生成一个CDP,CDP的最大保存数量为rows个。
第一句:DS:ds_name:DST:heartbeat:min:max
DS:Data Source ,获取的数据源
ds_name:自定义名字,绘图需要使用这个。
DST:DS type ,有 COUNTER、GUAGE、DERIVE、ABSOLUTE、COMPUTE 5种:
GAUGE:
我们用的最多的就是GAUGE了,它的中文解释是:测量。在这里它表示实际的值。比如说输入次序为 98 100 98,那么输出顺序也是98 100 98。COUNTER:
累计值,自己进行计算,比如说输入次序为98 100 98,那么输出顺序也是2 -2,怎么出来的这两个数值呢?100-98 98-100,其实就是两个差值,它表示的是经过一个刷新周期的变化率。DERIVE:
也是累计值,和COUNTER一样的,唯一不同的是它不存在负值,最小的是0,不如-2那么它就只划0,结果为 2 0ABSOLUTE:
如同COUNTER,但COUNTER可能overflow(数值过大),所以会取绝对值COMPUTE :COMPUTE 比较特殊,它并不接受输入,它的定义是一个表达式,能够引用其他DS并自动计算出某个值。例如 CODE:DS:eth0_bytes:COUNTER:600:0:U DS:eth0_bits:COMPUTE:eth0_bytes,8,* 则 eth0_bytes 每得到一个值,eth0_bits 会自动计算出它的值:将 eth0_bytes 的值乘以 8 。不过 COMPUTE 型的 DS 有个限制,只能应用它所在的 RRD 的 DS ,不能引用其他 RRD 的 DS。 COMPUTE 型 DS 是新版本的 RRDtool 才有的,你也可以用 CDEF 来实现该功能。如:CDEF:eth0_bits=eth0_bytes,8,*
heartbeat:有效数据获取时间,数据到达有延迟,只要在heartbeat时间内到达数据就有效
min|max:可接受数据的最小,最大值,2个位置可以分别填U代表不限制。
第二句:RRA:CF:xxf:steps:rows
RRA:它的作用就是定义更新的数据是如何记录的,RRA 即 Round Robin Archive,Archive是存档的意思。
CF:获取的数据(这个数据称为PDP)的consolidation function 合并方式,包含四种:
有 AVERAGE、MAX、MIN、LAST ,分别表示对多个PDP 进行取平均、取最大值、取最小值、取当前值四种类型。
PDP:Primary Data Point 。
正常情况下每个间隔时间(个人理解设置--step 的时间规定的时间),RRDtool 都会收到一个值。注意,该值不一定等于RRDtool 收到的那个值。除非是GAUGE 。
CDP:Consolidation Data Point 。
RRDtool 使用多个 PDP 合并为(计算出)一个 CDP。也就是执行上面 的CF 操作后的结果。这个值就是存入 RRA的数据,绘图时使用的也是这些数据。
xxf:取值范围0~1,空数据所占要进行CF操作的PDP的数量的比例,一般0.5。
steps:多少数量个step间隔组成一个CDP,也就是需要多少个PDP组成一个CDP。
rows:保存的CDP的数量。
解释度(Resolution)
RRA中的steps越低,解析度越高。
setp=300
RRA:AVERAGE:0.5:1:288 (记录了24小时的数据)
RRA:AVERAGE:0.5:4:72 (记录了24个小时的数据)
举个例子,上面2个RRA,如果我们要绘制60分钟的数据。
那么我们可以从第一个RRA 中取出12个 CDP 来绘图;也可以从第2个 RRA中取出3个 CDP 来绘图。
到底 RRDtool 会使用那个呢?让我们看一下 RRA 的定义 : 。
Resolution 就等于 1 * step = 1 * 300 = 300 ,也就是说 ,resolution 是每个CDP 所代表的时间范围,或者说 RRA 中每个 CDP(记录)之间的时间间隔。所以第一个 RRA 的 resolution 是 1* step=300,第2是 1200 。
默认情况下,RRDtool 会自动挑选合适的 resolution 的那个 RRA 的数据来绘图。我们大可不必关心它。但如果自己想取特定 RRA 的数据,就需要用到它了。关于 Resolution 我们还会在 fetch 和 graph 中提到它。
下面是RRA与PDP、CDP之间的关系图,