关于shell调用RRDTOOL的绘图
所谓的“Round Robin” 其实是一种存储数据的方式,使用固定大小的空间来存储数据,并有一个指针指向最新的数据的位置。我们可以把用于存储数据的数据库的空间看成一个圆,上面有很多刻度。这些刻度所在的位置就代表用于存储数据的地方。所谓指针,可以认为是从圆心指向这些刻度的一条直线。指针会随着数据的读写自动移动。要注意的是,这个圆没有起点和终点,所以指针可以一直移动,而不用担心到达终点后就无法前进的问题。在一段时间后,当所有的空间都存满了数据,就又从头开始存放。这样整个存储空间的大小就是一个固定的数值。所以RRDtool 就是使用类似的方式来存放数据的工具, RRDtool 所使用的数据库文件的后缀名是‘.rrd’。
我想要的是效果是:
参考 http://www.blogjava.net/ruoyoux/articles/257138.html
参考 http://rrdtool.cs.pu.edu.tw/doc/index.en.html
参考 http://blog.163.com/liulianyixin@126/blog/static/85483924201172353055261/
先安装rrdtool
1 先yum安装所要的库文件: [root@hmg2 yum.repos.d]#yum install cairo-devel libxml2-devel pango-devel pango libpng-devel freetype freetype-devel libart_lgpl-devel 然后下载rrdtool包,安装: [root@hmg2 src]#wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.3.1.tar.gz [root@hmg2 src]#tar -zxvf rrdtool-1.3.1.tar.gz [root@hmg2 src]#./configure --prefix=/usr/local/rrdtool && make && make install 运行rrdtool �Cv测试安装成功没有: [root@hmg2 src]#rrdtool -v //可以看到RRDTool的用法以及版本信息 另一种yum安装 [root@hmg2 src]#wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm [root@hmg2 src]#rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm [root@hmg2 src]#yum -y install rrdtool* xiaorui.cc
建立rrdtool的rra库
[root@dns1 root]# rrdtool create eth0.rrd \ > --start $(date �Cd ‘1 days ago’ +%s) \ > --step 300 \ > DS:eth0_in:COUNTER:600:0:12500000 \ # 600 是 heartbeat;0 是最小值;12500000 表示最大值; > DS:eth0_out:COUNER:600:0:12500000 \ # 如果没有最小值/最大值,可以用 U 代替,例如 U:U > RRA:AVERAGE:0.5:1:600 \ # 1 表示对1个 PDP 取平均。实际上就等于 PDP 的值 > RRA:AVERAGE:0.5:4:600 \ # 4 表示每4个 PDP 合成为一个 CDP,也就是20分钟。方法是对4个PDP取平均, > RRA:AVERAGE:0.5:24:600 \ # 同上,但改为24个,也就是24*5=120分钟=2小时。 > RRA:AVERAGE:0.5:288:730 # 同上,但改为288个,也就是 288*5=1440分钟=1天 [root@dns1 root]# |
建立图片~
[root@dns1 bob]# rrdtool graph 1.png \ > --start now-120000 \ # 表示起始时间是当前时间往前 120000 秒,也就是 33 个小时左右>DEF:value1=eth0.rrd:eth0_in:AVERAGE \ # 从eth0.rrd 中取出 eth0_in 的数据,CF 类型为 AVERAGE> AREA:value1#ff0000 # 用“方块”的形式来绘制 value1 ,注意这里是用 value1 ,不是用 eth0_in481x154 # 如果 RRDtool 有绘图方面的语句,则这里显示图片大小,否则为 0x0。[root@dns1 bob]#
同时使用 �CS 和 :step
[root@dns1 bob]# rrdtool graph 5.png > -S 1200 \ # -S 指定 resolution=1200> --start now-120000 \>DEF:value1=eth0.rrd:eth0_in:AVERAGE:step=300 \ # :step 指定 resolution=300> AREA:value1#ff0000 481x154[root@dns1 bob]#
让两个对象显示不同时间段的数据
[root@dns1 bob]# rrdtool graph 1.png \> --start now-2h \ # 规定时间为2小时内>DEF:value1=eth0.rrd:eth0_in:AVERAGE:end=now:start=end-1h \ # 规定时间为1小时内 >DEF:value2=eth0.rrd:eth0_out:AVERAGE \ # 没有指定 :start 和 :end,默认和 �C-start 一样也是2小时> AREA:value1#00ff00:in \> LINE2:value2#ff0000:out:STACK 475x168[root@dns1 bob]#
模板的过程~
#!/bin/bashSNMPNETSTAT=/usr/bin/snmpnetstatkk=`$SNAMPNETSTAT -v 2c -c $2 -Can -Cp tcp $1|grep -i 'established'|wc -l`echo -n "established:$kk"sh 123.sh 10.10.10.1 pubiccact 左面的面板data input methodsname snmp_tcp lianjie/bin/bash <path_cacti>/scripts/123.sh <hostname> <snmp_community>addhostnamecacti 左面的面板data templates 这个是创建数据源cacti 左面的面板graph templates
一个简单的rrdtool绘图测试~
##########测试################# rrdtool create mysql.rrd --step 3 DS:myselect:COUNTER:5:0:U RRA:AVERAGE:0.5:1:28800 RRA:AVERAGE:0.5:10:2880 RRA:LAST:0.5:10:2880 mysql --batch -e "show GLOBAL STATUS LIKE 'com_select'"|awk '/Com_select/{print $2}' vim 123.sh while true do kkk=`mysql --batch -e "show GLOBAL STATUS LIKE 'com_select'"|awk '/Com_select/{print $2}'` rrdtool update mysql.rrd N:$kkk sleep 3 done rrdtool fetch -r 5 mysql.rrd LAST 有最大和当前 但是最大出点问题 rrdtool graph mysql.png -s 1328989986 -t "mysql select " -v "selects/3" DEF:select30=mysql.rrd:myselect:AVERAGE:step=30 DEF:max30=mysql.rrd:myselect:MAX:step=30 DEF:last30=mysql.rrd:myselect:LAST:step=30 LINE1:select30#FF0000:"SELECT" GPRINT:max30:MAX:"MAXIMUM\: %6.2lf" GPRINT:last30:LAST:"CURRENT\: %10.2lf" 修改 把GPRINT 改成别的函数 倒是可以了 rrdtool graph mysql.png -s 1328989986 -t "mysql select " -v "selects/3" DEF:select30=mysql.rrd:myselect:AVERAGE:step=30 DEF:max30=mysql.rrd:myselect:AVERAGE:step=30 DEF:last30=mysql.rrd:myselect:LAST:step=30 LINE1:select30#FF0000:"SELECT" GPRINT:max30:MAX:"MAXIMUM\: %6.2lf" GPRINT:last30:LAST:"CURRENT\: %10.2lf" 这个可以查看当前 CURRENT rrdtool graph mysql.png -s 1328989986 -t "mysql select " -v "selects/3" DEF:select30=mysql.rrd:myselect:AVERAGE:step=30 DEF:last30=mysql.rrd:myselect:LAST:step=30 LINE1:select30#FF0000:"SELECT" GPRINT:last30:LAST:"CURRENT\: %10.2lf" |
网页显示,可以简单写个html的页面,试图多的话,也可以用php调取列表~
<imgsrc="1.gif"width="396"height="325"border="0"alt=""><imgsrc="mysql.png"width="497"height="173"border="0"alt=""><imgsrc="a.png"width="497"height="173"border="0"alt="">