分类: 系统运维
2011-11-04 22:09:02
Rrdtool非常适合展示 随时间连续变化的数据,例如:网关的流量、apache日志中的访问数量等。
RRD作图的步骤:
建立数据源,
向其中插入数据,
确定作图的横轴(横轴单位代表的时间刻度)、纵轴, 及各自代表的含义,并画图
RRD命令参考
RRD的名词说明:
PDP:Primary Data Points (PDPs)
CF:consolidation function 合并函数
1. 建数据源的命令:
rrdtool create filename [--start|-b start time] [--step|-s step]
DS:ds-name:GAUGE | COUNTER | DERIVE | ABSOLUTE : heartbeat : min : max
[RRA: AVERRAGE | MIN | MAX | LAST : xff : steps : rows
说明:
heartbeat:参考Heartbeat和step的说明。
min 和 max: 是PDP数据的取值范围,如果超过这个范围,则被标志为Unkown。
xff:xfiles factor,在合并的时候,多长时间内的数值为 unknown的情况下,合并后的值仍然是known的,即可以产生具体的值。 这个值被记为在一个interval 时间段内, unknown data的数量与所有data数量的比例,它的取值范围是 [0,1)
steps: 定义多少个step 后对数据用CF进行一次合并。
rows:存储合并后数据的个数
进一步说明Heartbeat 和 step:
Heartbeat 定义了两个sample/update 间所能接受的最大时间间隔。如果samples间的时间间隔 小于 Heartbeat给定的数值,则为这个间隔计算一个平均数。 如果samples间的间隔 大于 Heartbeat,则这个间隔被认为是unknown。
PDP在一个step间 know的比例百用于计算PDP的平均值,如果unknown的时间大于 step所指定时间的一半,则这个PDP被标记为unknown。 这意味着在一个单独的PDP step中 存在的 known 和unknown 的取样时间 可能或不能 达到把这个PDP标记位known的程度。
Heartbeat 可以比step短(不常见) 或者长(常见);一个短的Heartbeat 意味着一个PDP 需要多个samples; 一个长的Heartbeat 可以跨越几个steps,这意味着会从一个 sample中计算出几个PDPs。一个极端的例子就是 step=5分钟, Heartbeat=1天,这种情况下每天一个sample 将导致这天内所有的PDPs都被设置成一个平均值;这个平均值是一个加权平均, 以sample在该step中 占有的时间比做权重;举例如下:
时间轴
60(step)
65: 插入sample=10
120(step), 该处的PDP= (5*10 +55*30)/60
125:插入sample=30
则120处的PDP 计算结果为:(5*10 +55*30)/60 = 28.33
2. 插入数据的命令
rrdtool {update | updatev} filename
[--template|-t ds-name[:ds-name]...]
N|timestamp:value[:value...] at-timestamp@value[:value...] [timestamp:value[:value...] ...]
解释[--template|-t ds-name[:ds-name]...]: 默认情况下,update命令认为它输入数据的顺序与 RRD中定义的数据源DS的顺序一致(除了 COMPUTE 的数据源)
N:当前时间; :用于分割多个数据源, 空格用于一个数据源中多个数据点的分割。
举例说明:
rrdtool update demo1.rrd N:3.44:3.15:U:23
向demo1的4个数据源中插入4个数据,时间位当前时间, 数据分别位3.44、 3.15、Unknown、23
rrdtool update demo2.rrd 887457267:U 887457521:22 887457903:2.7
向demo2的1个数据源中插入3组数据。
3. 作图的命令
rrdgraph
时间范围选项:[-s|--start time] [-e|--end time] [-S|--step seconds]
数据定义:
DEF:
默认情况下,存有对应 分辨度和 合并函数的RRA中的数据 会被使用;
举例:DEF:ds0weekly=router.rrd:ds0:AVERAGE:step=7200
如果DEF中定义的DS, CF没有对应的RRA存在,则会报如下错误:
ERROR: the RRD does not contain an RRA matching the chosen CF
CDEF,VDEF的逆波兰表达式定义。
绘图例子:
rrdtool graph speed30min.png --start 920804400 --end 920806200 \
--x-grid MINUTE:2:MINUTE:10:MINUTE:10:0:%H:%M \
--vertical-label m/s \
DEF:myspeed=test.rrd:speed:AVERAGE \
CDEF:realspeed=myspeed,1000,\* \
LINE2:realspeed#FF0000
参考:
rrdtool官方Document中的tutorial
繁体的与mrtg比较的, 也很好