rrdtool编程,我断断续续学了有一个星期了.今天,我来总结下我学习的经验,以供路人和我参考.
rrdtool重要的也就是create,update,graph
create就是创建一个rrd数据库,在这里我们要注意几点:
(1)心中要有图,只有心中有图,才知道要什么样的结果.
(2)研究数值,以便你知道定义什么类型的DS,如果DST定义的不正确,不管是update,graph都是白搭.
补充DST的类型:counter,derive,absolute,gauge,compute(常用的counter,gauge)
补充PDP的定义
PDP :Primary Data Point 。正常情况下每个 interval RRDtool 都会收到一个值;RRDtool 在收到脚本给来的值后会计算出另外一个值(例如平均值),这个 值就是 PDP ;这
rrdtool重要的也就是create,update,graph
create就是创建一个rrd数据库,在这里我们要注意几点:
(1)心中要有图,只有心中有图,才知道要什么样的结果.
(2)研究数值,以便你知道定义什么类型的DS,如果DST定义的不正确,不管是update,graph都是白搭.
补充DST的类型:counter,derive,absolute,gauge,compute(常用的counter,gauge)
补充PDP的定义
PDP :Primary Data Point 。正常情况下每个 interval RRDtool 都会收到一个值;RRDtool 在收到脚本给来的值后会计算出另外一个值(例如平均值),这个 值就是 PDP ;这
个值代表的一般是“xxx/秒”的含义。注意,该值不一定等于RRDtool 收到的那个值。除非是GAUGE ,可以看下面的例子:
Values = 300, 600, 900, 1200
# 假设 RRDtool 收到4个值,分别是300,600,900,1200
Values = 300, 600, 900, 1200
# 假设 RRDtool 收到4个值,分别是300,600,900,1200
Step = 300 seconds
# step 为 300
# step 为 300
COUNTER = 1,1, 1,1
# (300-0)/300,(600-300)/300,(900-600)/300,(1200-900)/300 ,所以结果为 1,1,1,1
# (300-0)/300,(600-300)/300,(900-600)/300,(1200-900)/300 ,所以结果为 1,1,1,1
DERIVE = 1,1,1,1 # 同上
ABSOLUTE = 1,2,3,4
# (300-0)/300,(600-0)/300 , (900-0)/300, (1200-0)/300,所以结果为 1,2,3,4
# (300-0)/300,(600-0)/300 , (900-0)/300, (1200-0)/300,所以结果为 1,2,3,4
GAUGE = 300,600,900,1200 # 300 , 600 ,900 ,1200 不做运算,直接存入数据库
所以第一行的 values 并不是 PDP ,后面4行才是 PDP
(3)rra的作用,就像是一个库里的表,这个表是用来存储CDP的数据,每张表根据定义的粒度不同,所存储的数据是不一样的,有的粒度是5分钟,有的是30分钟,有的是.......他们都是
根据参数的定义而不同的.如:
RRA:AVERAGE:0.5:1:600
# 1 表示对1个 PDP 取平均。实际上就等于 PDP 的值
RRA:AVERAGE:0.5:4:600
# 4 表示每4个 PDP 合成为一个 CDP,也就是20分钟。方法是对4个PDP取平均,
RRA:AVERAGE:0.5:24:600
# 同上,但改为24个,也就是24*5=120分钟=2小时。
RRA:AVERAGE:0.5:288:730
# 同上,但改为288个,也就是 288*5=1440分钟=1天
我们要知道以后的graph所取的值都是来自rra的.
(4)注意rra定义下的CF,这个CF在我看来有两个作用,第一个作用是用来如何处理pdp的数据,如
RRA:AVERAGE:0.5:4:600 这是表示每4个 PDP 合成为一个 CDP(取平均值),其实CF还有min,max,last(我们看字面意思也就知道什么作用了.)
第二个作用是用来为graph时定义画图的值来自哪个RRA.
update更新rra,需要注意几点
(1)根据create时定义的DS数量,需要按照一定的顺序(用冒号分开).如:
update rrdfile,timestamp:value1,value2...(注意value1,value2...对应的是create创建时的dsname1,dsname2(顺序重要))
graph画图需要注意几点
(1)为什么还有一个 CF 字段?因为 RRA 有多种 CF 类型,有些 RRA 可能用来保存平均值、有些 RRA 可能用于统计最大值、最小值等等。所以你必须同时指定使用什么 CF 类型
RRA:AVERAGE:0.5:1:600
# 1 表示对1个 PDP 取平均。实际上就等于 PDP 的值
RRA:AVERAGE:0.5:4:600
# 4 表示每4个 PDP 合成为一个 CDP,也就是20分钟。方法是对4个PDP取平均,
RRA:AVERAGE:0.5:24:600
# 同上,但改为24个,也就是24*5=120分钟=2小时。
RRA:AVERAGE:0.5:288:730
# 同上,但改为288个,也就是 288*5=1440分钟=1天
我们要知道以后的graph所取的值都是来自rra的.
(4)注意rra定义下的CF,这个CF在我看来有两个作用,第一个作用是用来如何处理pdp的数据,如
RRA:AVERAGE:0.5:4:600 这是表示每4个 PDP 合成为一个 CDP(取平均值),其实CF还有min,max,last(我们看字面意思也就知道什么作用了.)
第二个作用是用来为graph时定义画图的值来自哪个RRA.
update更新rra,需要注意几点
(1)根据create时定义的DS数量,需要按照一定的顺序(用冒号分开).如:
update rrdfile,timestamp:value1,value2...(注意value1,value2...对应的是create创建时的dsname1,dsname2(顺序重要))
graph画图需要注意几点
(1)为什么还有一个 CF 字段?因为 RRA 有多种 CF 类型,有些 RRA 可能用来保存平均值、有些 RRA 可能用于统计最大值、最小值等等。所以你必须同时指定使用什么 CF 类型
的 RRA的数据。
知识点补充
解释度(Resolution)(这个告诉我们应该取那个RRA的数据了(定义了那么多RRA,有用处了吧!嘎嗄…))
这里要提到一个 Resolution 的概念,在官方文档中多处提到 resolution 一词。Resolution 究竟是什么?Resolutino 有什么用?
举个例子,如果我们要绘制1小时的数据,也就是60分钟,那么我们可以从第一个RRA 中取出12个 CDP 来绘图;也可以从第2个 RRA中取出3个 CDP 来绘图。到底 RRDtool 会使用那个呢?
让我们看一下 RRA 的定义 :RRA:AVERAGE:0.5:4:600 。
Resolution 就等于 4 * step = 4 * 300 = 1200 ,也就是说 ,resolution 是每个CDP 所代表的时间范围,或者说 RRA 中每个 CDP(记录)之间的时间间隔。所以第一个 RRA 的 resolution 是 1* step=300,第2是 1200,第三个是 24*300=7200,第4个 RRA 是 86400 。
默认情况下,RRDtool 会自动挑选合适的 resolution 的那个 RRA 的数据来绘图。我们大可不必关心它。但如果自己想取特定 RRA 的数据,就需要用到它了。
本文转自hahazhu0634 51CTO博客,原文链接:http://blog.51cto.com/5ydycm/121486,如需转载请自行联系原作者