rrdtool的安装配置和使用

安装与卸载

安装依赖

1
2
yum -y install cairo-devel libxml2-devel pango-devel pango libpng-devel freetype freetype-devel libart_lgpl-devel
yum -y install perl-CPAN #不装这个的话会报错 Can not locate ExtUtils/MakeMaker.pm

这里现在最新的源码包,解压编译安装。

1
2
3
export PKG_CONFIG_PATH=/usr/lib/pkgconfig/
./configure -prefix=/usr/local/rrdtool
make && make install

测试

1
2
cd /usr/local/rrdtool/share/rrdtool/examples/
./stripes.pl

正常的话会生成一个png文件

rrdtool

卸载

因为编译的时候指定了目录,所以直接删掉就可以了。
未指定的话,去源码目录下 make uninstall

使用

建立命令

1
2
3
4
rrdtool create filename [--start|-b start time]
[--step|-s step]
[DS:ds-name:DST:dst arguments]
[RRA:CF:cf arguments]

其中 filename 、DS 部分和 RRA 部分是必须的。其他两个参数可免。

参数解释

filename :默认是以 .rrd 结尾,但也以随你设定。
--step :步长,间隔多少秒
--start :起始时间,timestamp 的格式
DS :DS 用于定义 Data Soure 。用于存放脚本的结果.
DST :DST 就是 Data Source Type 的意思。数据类型有 COUNTER、GUAGE、DERIVE、ABSOLUTE、COMPUTE 5种。
RRA :RRA 用于指定数据如何存放。我们可以把一个RRA 看成一个表,各保存不同 interval 的统计结果
PDP :单独数据点。Primary Data Point 。正常情况下每个 interval RRDtool 都会收到一个值;RRDtool 在收到脚本给来的值后 会计算出另外一个值(例如平均值),这个值就是 PDP ;这个值代表的一般是“xxx/秒”的含义。
CF :CF 就是 Consolidation Function 的缩写。也就是合并(统计)功能。有 AVERAGE、MAX、MIN、LAST 四种。分别表示对多个PDP进行取平均、取最大值、取最小值、取当前值四种类型。
CDP :合并数据点。Consolidation Data Point 。RRDtool 使用多个 PDP 合并为(计算出)一个 CDP。也就是执行上面 的CF 操作后的结果。这个值就是存入 RRA 的数据,绘图时使用的也是这些数据。

DST 详细说明

COUNTER :必须是递增的,除非是计数器溢出(overflows)。在这种情况下,RRDtool 会自动修改收到的值。例如网络接口流量、收到的 packets 数量都属于这一类型。
DERIVE :和 COUNTER类似。但可以是递增,也可以递减,或者一会增加一会儿减少。
ABSOLUTE : 比较特殊,它每次都假定前一个interval的值是0,再计算平均值。
GAUGE :和上面三种不同,它没有“平均”的概念,RRDtool 收到值之后字节存入 RRA 中
COMPUTE : 比较特殊,它并不接受输入,它的定义是一个表达式,能够引用其他DS并自动计算出某个值。
AVERAGE :类型适合于看“平均”情况,例如一天的平均流量。所以 AVERAGE 适用于需要知道 ‘xxx/秒’ 这样的需求。但采用 AVERAGE 型时,你并不知道在每个 CDP 中(假设30分钟平均,6个PDP组成)之中,流量具体是如何变化的,什么时候高,什么时候低。这于需要用到别的统计类型了
MAXIMUM 、MINIMUM :最值
LAST :类型适用于 “累计”的概念,例如从xxx时候到目前共累计xxxx 这样的需求。

常用命令

first 就是用于查看该 RRD 文件中某个 RRA 的第一个数据是在什么时候插入的(或者说第一次更新);
last 就是查看该 RRD 文件的最近一次更新;
info就是查看 rrd 文件的结构信息。
update插入数据,更新文件
updatev同上,可视化操作
fetch查询数据。

info

假如文件名是eth0.rrd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
rrdtool info eth0.rrd

filename = "eth0.rrd"
rrd_version = "0003"
step = 300 # 每5分钟收到一个数据
last_update = 1163862985
ds[eth0_in].type = "COUNTER" # 有一个名为 eth0_in 的 DS,DST是 COUNTER
ds[eth0_in].minimal_heartbeat = 600 # hearbeat 时间是600 秒
rra[0].cf = "AVERAGE" # 第一个 RRA 的编号是0,不是1。
rra[0].rows = 600 # 共保存 600 个记录
rra[0].pdp_per_row = 1 # 每个 CDP 由一个 PDP 统计得出
rra[0].cdp_prep[0].value = NaN
rra[0].cdp_prep[0].unknown_datapoints = 0
rra[0].cdp_prep[1].value = NaN
rra[0].cdp_prep[1].unknown_datapoints = 0
rra[1].cf = "AVERAGE" # 第二个 RRA 的编号是 1。同样也是 AVERAGE 型。
rra[1].rows = 600 # 也是保存 600 个记录
rra[1].pdp_per_row = 4 # 每个 CDP 由4个 PDP 的求平均值得出

updatev

语法格式

1
2
3
4
5
rrdtool {update | updatev} filename 
[--template|-t ds-name[:ds-name]...]
N|timestamp:value[:value...]
at-timestamp@value[:value...]
[timestamp:value[:value...] ...]

示例如下

1
2
3
4
5
6
7
8
[root]# rrdtool last eth0.rrd
1163864400
[root]#
[root]# rrdtool update eth0.rrd 1163864700:3000:4000
[root]# rrdtool updatev eth0.rrd 1163865000:3300:4600
return_value = 0
[1163865000]RRA[AVERAGE][1]DS[eth0_in] = 1.0000000000e+00
[1163865000]RRA[AVERAGE][1]DS[eth0_out] = 2.0000000000e+00

return value 0 表示成功,1表示失败
COUNTER 型的 DS会对数据进行合并运算。

1
2
(3300-3000)/step(300)=1
(4600-4000)/step(300)=2

fetch

语法格式

rrdtool fetch filename CF [--resolution|-r resolution] [--start|-s start] [--end|-e end]