这是我自己的rrdtool实例,从rrdtool安装到把mysql数据库里数据监控到网页。很详细的一个例子啦!
转载请注明http://www.cnblogs.com/juandx/articles/3864113.html
要学习rrdtool请关注http://www.cnblogs.com/juandx/articles/3854324.html
实例
1. 安装rrdtool和mysql
Sudo apt-get install rrdtool
Sudo apt-get install mysql-client
Sudo apt-get install mysql-server
2. Create
我是在下面这个目录进行工作的
在shell窗口直接执行create命令
rrdtool create test2.rrd \
--step 5 \
DS:traffic_in:COUNTER:10:0:1250000 \
DS:traffic_out:COUNTER:10:0:1250000 \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:12:600 \
RRA:AVERAGE:0.5:720:600 \
RRA:AVERAGE:0.5:17280:600 \
RRA:AVERAGE:0.5:535680:600
如下图
这样就会在目录test2下生成一个test2.rrd文件
在test2目录下新建目录html来放html文件,在html里新建images来存放图片。
建一个数据库和表
进入mysql
建数据库
Create database rrd_test;
建一个表flow
create table flow(
id int(4) primary key not null,
traffic_in double,
traffic_out double,
name varchar(30));
插入一些数据
建一个shell脚本,initial_table.sh
#!/bin/bash
#生成数据库原始数据
mysql -uroot -p123 -e "truncate table rrd_test.test2_flow"
for((I=1;I<=4;I++));do
random1=$RANDOM%10
random2=$RANDOM%10
sw=s$I
echo random1
echo random2
echo $sw
mysql -uroot -p123 -e "INSERT INTO rrd_test.test2_flow(id,traffic_in,traffic_out,name) VALUES ($I,$random1,$random2,'$sw')"
mysql -uroot -p123 -e "SELECT * FROM rrd_test.test2_flow" &> /dev/null
done
然后sh –x initial.sh
然后在数据库里可以看到有数据了:
3. 插入随机数据到mysql,更新rrdtool数据库,画图
以下shell脚本是如下内容:
1、 更新rrdtool数据库
2、 随机插入数据岛mysql数据库
3、 画图
直接vi graph.sh
#!/bin/bash
#定时刷新生成图片
while true; do
traffic_in=`mysql -uroot -p123 rrd_test --batch -e "select * from test2_flow where id=1"|awk 'NR==2{print $2}'`
traffic_out=`mysql -uroot -p123 rrd_test --batch -e "select * from test2_flow where id=1"|awk 'NR==2{print $3}'`
rrdtool updatev /home/wb/testmysqlrrdtool/test2/test2.rrd N:$traffic_in:$traffic_out
random1_in=$RANDOM%1000000
random1_out=$RANDOM%1000000
random2_in=$RANDOM%1000
random2_out=$RANDOM%1000
random3_in=$RANDOM%1000
random3_out=$RANDOM%1000
random4_in=$RANDOM%1000
random4_out=$RANDOM%1000
echo $random1_in
echo $random1_out
mysql -uroot -p123 -e "UPDATE rrd_test.test2_flow set traffic_in=traffic_in+$random1_in,traffic_out=traffic_out+$random1_out where rrd_test.test2_flow.name='s1'"
mysql -uroot -p123 -e "UPDATE rrd_test.test2_flow set traffic_in=traffic_in+$random2_in,traffic_out=traffic_out+$random2_out where rrd_test.test2_flow.name='s2'"
mysql -uroot -p123 -e "UPDATE rrd_test.test2_flow set traffic_in=traffic_in+$random3_in,traffic_out=traffic_out+$random3_out where rrd_test.test2_flow.name='s3'"
mysql -uroot -p123 -e "UPDATE rrd_test.test2_flow set traffic_in=traffic_in+$random4_in,traffic_out=traffic_out+$random4_out where rrd_test.test2_flow.name='s4'"
rrdtool graph /home/wb/testmysqlrrdtool/test2/html/images/second_s1.png -S 5 --start now-300 -t "traffic flow -second" -v "flow values" --lower-limit -5000 --upper-limit 20000 --rigid DEF:value1=test2.rrd:traffic_in:AVERAGE DEF:value2=test2.rrd:traffic_out:AVERAGE COMMENT:" \n" COMMENT:" now------------average----------max-------------min \n" COMMENT:" \n" AREA:value1#00FF00:"in " GPRINT:value1:LAST:'%13.2lf' GPRINT:value1:AVERAGE:%13.2lf GPRINT:value1:MAX:%13.2lf GPRINT:value1:MIN:%13.2lf COMMENT:" \n" LINE2:value2#ff0000:"out":STACK GPRINT:value2:LAST:%13.2lf GPRINT:value2:AVERAGE:%13.2lf GPRINT:value2:MAX:%13.2lf GPRINT:value2:MIN:%13.2lf COMMENT:" \n" COMMENT:" \n" COMMENT:" \n" COMMENT:"LAST UPDATED \:$(date '+%Y-%m-%d %H\:%M')\n" -Y
rrdtool graph /home/wb/testmysqlrrdtool/test2/html/images/minute_s1.png -S 60 --start now-3600 -t "traffic flow -minute" -v "flow values" --lower-limit -5000 --upper-limit 20000 --rigid DEF:value1=test2.rrd:traffic_in:AVERAGE DEF:value2=test2.rrd:traffic_out:AVERAGE COMMENT:" \n" COMMENT:" now------------average----------max-------------min \n" COMMENT:" \n" AREA:value1#00FF00:"in " GPRINT:value1:LAST:'%13.2lf' GPRINT:value1:AVERAGE:%13.2lf GPRINT:value1:MAX:%13.2lf GPRINT:value1:MIN:%13.2lf COMMENT:" \n" LINE2:value2#ff0000:"out":STACK GPRINT:value2:LAST:%13.2lf GPRINT:value2:AVERAGE:%13.2lf GPRINT:value2:MAX:%13.2lf GPRINT:value2:MIN:%13.2lf COMMENT:" \n" COMMENT:" \n" COMMENT:" \n" COMMENT:"LAST UPDATED \:$(date '+%Y-%m-%d %H\:%M')\n" -Y
rrdtool graph /home/wb/testmysqlrrdtool/test2/html/images/hour_s1.png -S 3600 --start now-86400 -t "traffic flow -hour" -v "flow values" --lower-limit -5000 --upper-limit 20000 --rigid DEF:value1=test2.rrd:traffic_in:AVERAGE DEF:value2=test2.rrd:traffic_out:AVERAGE COMMENT:" \n" COMMENT:" now------------average----------max-------------min \n" COMMENT:" \n" AREA:value1#00FF00:"in " GPRINT:value1:LAST:'%13.2lf' GPRINT:value1:AVERAGE:%13.2lf GPRINT:value1:MAX:%13.2lf GPRINT:value1:MIN:%13.2lf COMMENT:" \n" LINE2:value2#ff0000:"out":STACK GPRINT:value2:LAST:%13.2lf GPRINT:value2:AVERAGE:%13.2lf GPRINT:value2:MAX:%13.2lf GPRINT:value2:MIN:%13.2lf COMMENT:" \n" COMMENT:" \n" COMMENT:" \n" COMMENT:"LAST UPDATED \:$(date '+%Y-%m-%d %H\:%M')\n" -Y
rrdtool graph /home/wb/testmysqlrrdtool/test2/html/images/day_s1.png -S 86400 --start now-2678400 -t "traffic flow -day" -v "flow values" --lower-limit -5000 --upper-limit 20000 --rigid DEF:value1=test2.rrd:traffic_in:AVERAGE DEF:value2=test2.rrd:traffic_out:AVERAGE COMMENT:" \n" COMMENT:" now------------average----------max-------------min \n" COMMENT:" \n" AREA:value1#00FF00:"in " GPRINT:value1:LAST:'%13.2lf' GPRINT:value1:AVERAGE:%13.2lf GPRINT:value1:MAX:%13.2lf GPRINT:value1:MIN:%13.2lf COMMENT:" \n" LINE2:value2#ff0000:"out":STACK GPRINT:value2:LAST:%13.2lf GPRINT:value2:AVERAGE:%13.2lf GPRINT:value2:MAX:%13.2lf GPRINT:value2:MIN:%13.2lf COMMENT:" \n" COMMENT:" \n" COMMENT:" \n" COMMENT:"LAST UPDATED \:$(date '+%Y-%m-%d %H\:%M')\n" -Y
rrdtool graph /home/wb/testmysqlrrdtool/test2/html/images/month_s1.png -S 2678400 --start now-32140800 -t "traffic flow -month" -v "flow values" --lower-limit -5000 --upper-limit 20000 --rigid DEF:value1=test2.rrd:traffic_in:AVERAGE DEF:value2=test2.rrd:traffic_out:AVERAGE COMMENT:" \n" COMMENT:" now------------average----------max-------------min \n" COMMENT:" \n" AREA:value1#00FF00:"in " GPRINT:value1:LAST:'%13.2lf' GPRINT:value1:AVERAGE:%13.2lf GPRINT:value1:MAX:%13.2lf GPRINT:value1:MIN:%13.2lf COMMENT:" \n" LINE2:value2#ff0000:"out":STACK GPRINT:value2:LAST:%13.2lf GPRINT:value2:AVERAGE:%13.2lf GPRINT:value2:MAX:%13.2lf GPRINT:value2:MIN:%13.2lf COMMENT:" \n" COMMENT:" \n" COMMENT:" \n" COMMENT:"LAST UPDATED \:$(date '+%Y-%m-%d %H\:%M')\n" -Y
sleep 5
done
最后可以看到文件夹里的东西如下:
然后执行graph.sh
Sh –x graph.sh
4. 生成网页
安装python
Sudo apt-ge install python
在test2目录下执行python –m SimpleHTTPServer 8888启动服务器
在html目录下编辑文件second_s1.html
<html>
<head>
<title>jiankong</title>
<meta http-equiv="refresh" content="60"/>
<script type="text/javascript" src="script_s1.js"></script>
</head>
<body>
<div align="center">
<form>
</br>
<select id="newLocation">
<option selected="selected">Select a topic</option>
<option value="second_s1.html">second</option>
<option value="minute_s1.html" >minute</option>
<option value="hour_s1.html" >hour</option>
<option value="day_s1.html" >day</option>
<option value="month_s1.html" >month</option>
</select>
<input type="button" οnclick="location.reload()" value="fresh">
</br>
<img src="images/second_s1.png"></img>
</form>
</div>
</body>
</html>
同理对应生成minuti、hour、day、month的各个html文件,以便用来切换,只用更改红色标记的地方既可
这里的index.html和second_s1.html内容一样
在html目录下编辑script_s1.js
window.onload = initForm;
//window.onunload = function {};
function initForm() {
document.getElementById("newLocation").selectedIndex = 0;
document.getElementById("newLocation").onchange = jumpPage;
}
function jumpPage() {
var newLoc = document.getElementById("newLocation");
var newPage = newLoc.options[newLoc.selectedIndex].value;
if(newPage !=""){
window.location = newPage;
}
}
5. 大功告成!
打开浏览器,访问localhost:8888/html/second_s1.html即可成功!
转载请注明http://www.cnblogs.com/juandx/articles/3864113.html