RRDtool是一种环形数据库工具,我们可以将数据存入该数据库中,而不用担心数据太多,因为这个数据库是环形的,新的数据会覆盖最老的数据。
这与Windows上的taskman类似。RRDtool主要由Tobias Oetiker 编写,这哥们还写了MRTG。RRDtool主要是为了替代MRTG的。
网上有很多RRDtool的介绍和教程,例如:和。不过这些文章上给出的例子程序基本不能直接运行,都
存在着若干小错误,就连上给出的例子都不能直接运行。 我在学习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. 画图
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
图: