12
2
2012
5

rrdtool 初体验

本文来自依云's Blog,转载请注明。

rrdtool 是「Round Robin Database tool」的缩写,是一个存放固定数量的数值型数据库,适合随时间变化的量的统计。比如网络传输速度、CPU 使用率、聊天室在线人数等。与大部分数据库软件不一样的是,它可以直接可视化数据,生成 PNG 图像。第一次使用,找点容易快速获取又有意义的数据源——ping 延迟好了。

第一步,确定数据库怎么存放什么数据。我打算发一千个 ping 包,然后存储其延迟。rrdtool 本来是按时间存储的,我用序号来骗骗它好了。起始时间为现在时间。数据的时间间隔为 1 秒,但实际上是一个序号。聚集函数为平均值,存储 1000 个数据。命令如下(百分号提示符表示 shell 是 zsh,下同):

% start=$(date +'%s')
% rrdtool create ping.rrd --start=$start -s1 DS:ping:GAUGE:1:0:U RRA:AVERAGE:0.5:1:1000

其中,DS是「数据源(data source)」的意思,RRA 是「round robin archives」。-s1表示间隔为 1s。时间点是以距 epoche 的秒数表示的。

DS 部分,ping 是数据的名字,GAUGE表示这就是一个值,不是累加(COUNTER,如已传输字节数)或者其它的。1是 heartbeat,超时这个时间还没收到数据的话就当作UNKNOWN值了。再后边是最小值和最大值,超出的话也会被当成UNKNOWN。那里的U表示「UNKNOWN」。

RRA 部分,AVERAGE是求平均值的聚集函数。类似的还有MAX之类的。用于决定一个区间内的多个值如何归并为一个值。0.5部分没看太懂。1即每秒取一个值,1000则是存储 1000 个这样的值。

取得数据:

% ping -c 1000 google.com > ping.log

把数据处理后喂给 rrdtool 的数据库,每次喂最多 1000 条数据:

% grep -oP '\d+\sttl\S+ \S+' ping.log | sed 's/ttl.*=//g' | awk -vstart=$start '{print $1+start ":" $2}' | xargs -n 1000 rrdtool update ping.rrd 

生成每 1、5、15 秒的统计图像:

% for i in 1 5 15; do rrdtool graph ping_$i.png --start=$start --end=$(( $start + 1000 )) -S $i --vertical-label=ms --width=800 --height=300 DEF:v=ping.rrd:ping:AVERAGE 'AREA:v#00dd00'; done

其中,-S是指定绘图的步长。其它参数很好理解。后两部分解释如下:

DEF设置变量v为 ping.rrd 数据库中的 ping 变量。还有可选的CDEF,比如可以写CDEF:s=v,1000,/,即令变量s等于v / 1000。这里是逆波兰表达式。'AREA:v#00dd00'表示绘制矩形图,纵轴变量为v,颜色为 #00dd00。画线的话可以用'LINE1:v#00dd00'这样子,LINE后边的数字是线的宽度。

好啦,图像如下:

Category: Linux | Tags: rrdtool 数据统计 | Read Count: 11284
MaskRay 说:
Dec 02, 2012 10:13:09 PM

這也是個有着長長的manual的軟件……顯示流量、IO等信息不錯

Avatar_small
依云 说:
Dec 02, 2012 10:28:58 PM

tutorial 都长长的,还一堆废话,非要把流量类比到开车,然后又纠结 km/h 和 m/s 的问题……

我写这文章主要参考的是 man 文档。

Avatar_small
三三 说:
Dec 03, 2012 01:24:12 PM

有个神奇的东西叫cacti,貌似cacti就是用的rrdtool吧?
这两天在折腾cacti,想给服务器装个负载监控玩玩……

Avatar_small
依云 说:
Dec 03, 2012 02:24:12 PM

嗯,它是用的 rrdtool。

eleven.i386 说:
Dec 21, 2012 11:16:44 AM

喵, 你也玩rrdtool哇? ,咱玩的各种监控系统基本上都是用rrdtool来画数据图形,曾经为了修改cacti的数据保存周期,而研究了一段时间rrdtool, 最终在大和民族的某一个blog里面找到了方法。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

| Theme: Aeros 2.0 by TheBuckmaker.com