rrdtool的完整例子
RRDtool是一种环形数据库工具,我们可以将数据存入该数据库中,而不用担心数据太多,因为这个数据库是环形的,新的数据会覆盖最老的数据。
这与Windows上的taskman类似。RRDtool主要由Tobias Oetiker 编写,这哥们还写了MRTG。RRDtool主要是为了替代MRTG的。
网上有很多RRDtool的介绍和教程,例如:RRDtool主页上的和ChinaUnix上的这一篇。不过这些文章上给出的例子程序基本不能直接运行,都
存在着若干小错误,就连RRDtoo Tutorial上给出的例子都不能直接运行。 我在学习RRDtool时被弄得很郁闷。本文给出了一个完整的用Shell写的Demol程序,
大家可以参考一下。
通常来说,一个RRDtool的程序基本可以分成两部分:
- 用rrdtool create命令创建一个rrdtool的数据库,并且有rrdtool update命令更新它;
- 用rrdtool graph命令画图。
我的Demo程序不能取得系统Load average(5分钟,10分钟,15分钟),把这个三个数据插入数据库中,然后画图。
1. 创建数据库及更新数据库:
1 #!/bin/bash
2
3 # create a rrd file
4
5 rrdfile=loadavg.rrd
6 STEP=2
7 HEARTBEAT=4
8 now=`date +%s`
9
10 if [ ! -f $rrdfile ]
11 then
12 rrdtool create $rrdfile --start $now --step $STEP \
13 DS:loadavg5:GAUGE:$HEARTBEAT:U:U \
14 DS:loadavg10:GAUGE:$HEARTBEAT:U:U \
15 DS:loadavg15:GAUGE:$HEARTBEAT:U:U \
16 RRA:MAX:0.5:3:3600
17 else
18 echo "$rrdfile already exists, remove it"
19 fi
20
21 TEMPLATE_STR="loadavg5:loadavg10:loadavg15"
22
23 while :
24 do
25 loadavg5=`cat /proc/loadavg | awk '{print $1}'`
26 loadavg10=`cat /proc/loadavg | awk '{print $2}'`
27 loadavg15=`cat /proc/loadavg | awk '{print $3}'`
28 rrdtool update $rrdfile \
29 --template $TEMPLATE_STR \
30 N:$loadavg5:$loadavg10:$loadavg15
31
32 sleep $STEP
33 done
34
2
3 # create a rrd file
4
5 rrdfile=loadavg.rrd
6 STEP=2
7 HEARTBEAT=4
8 now=`date +%s`
9
10 if [ ! -f $rrdfile ]
11 then
12 rrdtool create $rrdfile --start $now --step $STEP \
13 DS:loadavg5:GAUGE:$HEARTBEAT:U:U \
14 DS:loadavg10:GAUGE:$HEARTBEAT:U:U \
15 DS:loadavg15:GAUGE:$HEARTBEAT:U:U \
16 RRA:MAX:0.5:3:3600
17 else
18 echo "$rrdfile already exists, remove it"
19 fi
20
21 TEMPLATE_STR="loadavg5:loadavg10:loadavg15"
22
23 while :
24 do
25 loadavg5=`cat /proc/loadavg | awk '{print $1}'`
26 loadavg10=`cat /proc/loadavg | awk '{print $2}'`
27 loadavg15=`cat /proc/loadavg | awk '{print $3}'`
28 rrdtool update $rrdfile \
29 --template $TEMPLATE_STR \
30 N:$loadavg5:$loadavg10:$loadavg15
31
32 sleep $STEP
33 done
34
2. 画图
1 #!/bin/bash
2
3 rrdfile=loadavg.rrd
4 PIC=loadavg.png
5
6 rrdtool graph $PIC \
7 --title "System Load Average" \
8 --vertical-label "Load Average" \
9 --color "BACK#CCCCCC" \
10 --color "CANVAS#CCFFFF" \
11 --color "SHADEB#9999CC" \
12 --height 200 \
13 --width 400 \
14 --slope-mode \
15 --alt-autoscale \
16 --lower-limit 0 \
17 DEF:max_loadavg5=$rrdfile:loadavg5:MAX \
18 DEF:max_loadavg10=$rrdfile:loadavg10:MAX \
19 DEF:max_loadavg15=$rrdfile:loadavg15:MAX \
20 LINE1:max_loadavg5#0000FF:loadavg5 \
21 LINE1:max_loadavg10#00FF00:loadavg10 \
22 LINE1:max_loadavg15#FF0000:loadavg15 \
23 COMMENT:"Last update\: $(date '+%Y-%m-%d %H\:%M\:%S' -r $rrdfile)"
24
2
3 rrdfile=loadavg.rrd
4 PIC=loadavg.png
5
6 rrdtool graph $PIC \
7 --title "System Load Average" \
8 --vertical-label "Load Average" \
9 --color "BACK#CCCCCC" \
10 --color "CANVAS#CCFFFF" \
11 --color "SHADEB#9999CC" \
12 --height 200 \
13 --width 400 \
14 --slope-mode \
15 --alt-autoscale \
16 --lower-limit 0 \
17 DEF:max_loadavg5=$rrdfile:loadavg5:MAX \
18 DEF:max_loadavg10=$rrdfile:loadavg10:MAX \
19 DEF:max_loadavg15=$rrdfile:loadavg15:MAX \
20 LINE1:max_loadavg5#0000FF:loadavg5 \
21 LINE1:max_loadavg10#00FF00:loadavg10 \
22 LINE1:max_loadavg15#FF0000:loadavg15 \
23 COMMENT:"Last update\: $(date '+%Y-%m-%d %H\:%M\:%S' -r $rrdfile)"
24
图: