下面是在RedHat9下实现的一个完整的例子:
1.安装RRDtool工具,可以选择RPM包安装和源代码包安装。安装包可以到baidu和google下搜一下,安装是用到gcc工具。
我选择源代码安装:
$>./configure --prefix=/usr/local/rrdtool $>make $>make install
安装好后检查一下:[root@pc071 study]# rrdtool RRDtool 1.0.42 Copyright 1997-2001 by Tobias Oetiker <tobi@oetiker.ch> Usage: rrdtool [options] command command_options Valid commands: create, update, graph, dump, restore, last, info, fetch, tune, resize, xport RRDtool is distributed under the Terms of the GNU General Public License Version 2. (www.gnu.org/copyleft/gpl.html) For more information read the RRD manpages
看到以上信息就没什么问题了。
2.安装并配置apache,使其支持web页的显示,本例使用源代码安装:
rpm -ivh httpd-2.0
修改配置文件:
ServerName 本机IP:80
修改网页默认存放位置:/tmp/www/traffic_out
3.在监控机上安装下面的个包:
rpm –ivh net-snmp-utils-5.0.6-17…..rpm SNMP工具(snmpget,snmpwalk)
rpm –ivh net-snmp -5.0.6-17…..rpm
在被监控机上安装rpm –ivh net-snmp -5.0.6-17…..rpm
打开默认的/etc/snmp/snmp.conf文件,更改如下配置:
(1)、查找以下字段: 代码: # sec.name source community com2sec notConfigUser default public 将"comunity"字段改为你要设置的密码.比如"bizcnpublic". 将“default”改为你想哪台机器可以看到你的snmp信息,如10.10.10.10。授权服务器IP
(2)、查找以下字段:代码: #### # Finally, grant the group read-only access to the systemview view. # group context sec.model sec.level prefix read write notif access notConfigGroup "" any noauth exact systemview none none 将"read"字段改为all. 代码: #access notConfigGroup "" any noauth exact all none none
(3)、查找以下字段:代码: ## incl/excl subtree mask #view all included .1 80 将该行前面的"#"去掉.
(4)、查找以下字段:代码#
#name incl/excl subtree mask(optional)
添加一行view all included .1
变成
#name incl/excl subtree mask(optional)
view all included .1
(5)、查找一下字段:代码
#view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc
将该行前面的"#"去掉.保存关闭.
(6)、运行/etc/init.d/snmpd start命令运行snmpd. 如果有防火墙,打开UDP 161端口。 最后运行netstat -ln查看161端口是否打开了. 使用ntsysv,让snmp服务,每次开机自动运行。 如果没有安装snmp服务,请在RH的安装光盘上找到net-snmp.rpm,再安装。启动
4.编写以下脚本,并给执行权限:
(1)保存为create_test.sh,并执行。
#建立RRD文档
#!/bin/bash
#所要监视机器的ip列表
ip="192.168.100.1 192.168.100.2"
for ip in $ip
do
DIR=/tmp/www/traffic_out
RRDFILE="${DIR}/rrd/watch_$ip.rrd"
#rrdtool建档语法:
# rrdtool create filename [--start|-b start time][--step|-s step] \
# [DS:ds-name:DST:heartbeat:min:max] \
# [RRA:CF:xff:steps:rows]
#[--start|-b start time] 数据纪录的起始时间
#[--step|-s step] 纪录数据的间隔时间,习惯上取300秒
#[DS:ds-name:DST:heartbeat:min:max] DS Data Source DS "宣告" 的意思,ds-name DS名称,DST DS类型,
#heartbeat有效时间,min:max数据的有效范围
#DS类型:如果輸入数据依序為 98 100 98:
#1.GAUGE(个別值,像CPU loading):产生图形时画 98 100 98
#2.COUNTER (累計值,像流量資料):产生图形时画 2 -2
#3.DERIVE (累計值,像流量資料),小于0画0:产生图形时画 2 0
#4.ABSOLUTE 如同 COUNTER,但 COUNTER 可能 overflow(数值过大),所以会取绝对值
#[RRA:CF:xff:steps:rows] RRA Round Robin Archive,你可以把它看成像 DS,定义存储数据的笔数,
#cf 有四种类型AVERAGE,MAX,MIN,LAST. XFF:STEPS:ROWS 一段时间内纪录数据的笔数,如0.5:6:14400 6X(300/60)=30分钟内纪录数据14400笔
#300为间隔时间
/usr/local/rrdtool/bin/rrdtool create $RRDFILE -s 300 \
DS:in:COUNTER:600:0:1000000000 \
DS:out:COUNTER:600:0:100000000 \
RRA:AVERAGE:0.5:1:14400 \
RRA:AVERAGE:0.5:6:4800 \
RRA:AVERAGE:0.5:24:1200 \
RRA:AVERAGE:0.5:288:600 \
RRA:MAX:0.5:1:14400 \
RRA:MAX:0.5:6:4800 \
RRA:MAX:0.5:24:1200 \
RRA:MAX:0.5:288:600
done
(2)保存为update_test.sh
#!/bin/bash
DIR=/tmp/www/traffic_out
host="192.168.100.1 192.168.100.2"
for ip in $host
do
OUT_OCTETS=`snmpget -v 1 -c public $ip .1.3.6.1.2.1.2.2.1.16.2 |cut -d " " -f 4`
IN_OCTETS=`snmpget -v 1 -c public $ip .1.3.6.1.2.1.2.2.1.10.2 |cut -d " " -f 4`
RRD_PATH="${DIR}/rrd/watch_${ip}.rrd"
now=`date +%s`
/usr/local/rrdtool/bin/rrdtool update $RRD_PATH ${now}:${IN_OCTETS}:${OUT_OCTETS}
done
(3)保存为update_graph.sh
#更新RRD资料
#!/bin/sh
DIR=/tmp/www/traffic_out
${DIR}/update_test.sh
${DIR}/graph_watch.sh
(4)保存为graph_test.sh
#!/bin/bash
#http://www.yunzheng.org/webcolor.htm 可在此网站查找颜色代码
DIR=/tmp/www/traffic_out
image_path="${DIR}/images"
set 192.168.100.1 192.168.100.2
RRDFILE="${DIR}/rrd/watch_"
DATE=`date "+%F %H:%M" `
for t in day week month year
do
/usr/local/rrdtool/bin/rrdtool graph ${image_path}/total_watch_${t}.png \
-t "Total Traffic –TEST ($DATE)" \
-s `date -d "-1 $t" +%s` \
-e `date -d "-5 minute" +%s` \
DEF:in1=$RRDFILE$1.rrd:in:AVERAGE \
DEF:out1=$RRDFILE$1.rrd:out:AVERAGE \
DEF:in2=$RRDFILE$2.rrd:in:AVERAGE \
DEF:out2=$RRDFILE$2.rrd:out:AVERAGE \
CDEF:IN1=in1,8,* \
CDEF:OUT1=out1,8,* \
CDEF:IN2=in2,8,* \
CDEF:OUT2=out2,8,* \
CDEF:IN1_UN=IN1,UN,0,IN1,IF \
CDEF:OUT1_UN=OUT1,UN,0,OUT1,IF \
CDEF:IN2_UN=IN2,UN,0,IN2,IF \
CDEF:OUT2_UN=OUT2,UN,0,OUT2,IF \
CDEF:IN_Total=IN1_UN,IN2_UN,+ \
CDEF:OUT_Total=OUT1_UN,OUT2_UN,+ \
COMMENT:"OUT MAX AVG MIN NOW \n" \
AREA:OUT1#8020c0:"OUT $1 " \
GPRINT:OUT1:MAX:"%12.2lf%s" \
GPRINT:OUT1:AVERAGE:"%12.2lf%s" \
GPRINT:OUT1:MIN:"%12.2lf%s" \
GPRINT:OUT1:LAST:"%12.2lf%s\n" \
STACK:OUT2#80ffc0:"OUT $2 " \
GPRINT:OUT2:MAX:"%12.2lf%s" \
GPRINT:OUT2:AVERAGE:"%12.2lf%s" \
GPRINT:OUT2:MIN:"%12.2lf%s" \
GPRINT:OUT2:LAST:"%12.2lf%s\n" \
COMMENT:"IN MAX AVG MIN NOW \n" \
STACK:IN1_UN#800060:"IN $1" \
GPRINT:IN1:MAX:"%12.2lf%s" \
GPRINT:IN1:AVERAGE:"%12.2lf%s" \
GPRINT:IN1:MIN:"%12.2lf%s" \
GPRINT:IN1:LAST:"%12.2lf%s\n" \
STACK:IN2_UN#0000ff:"IN$2 " \
GPRINT:IN2:MAX:"%12.2lf%s" \
GPRINT:IN2:AVERAGE:"%12.2lf%s" \
GPRINT:IN2:MIN:"%12.2lf%s" \
GPRINT:IN2:LAST:"%12.2lf%s\n" \
COMMENT:"\n" \
COMMENT:"OUT_TOTAL MAX AVG MIN NOW \n" \
LINE2:OUT_Total#ff0000:"OUT Total " \
GPRINT:OUT_Total:MAX:"%12.2lf%s" \
GPRINT:OUT_Total:AVERAGE:"%12.2lf%s" \
GPRINT:OUT_Total:MIN:"%12.2lf%s" \
GPRINT:OUT_Total:LAST:"%12.2lf%s\n" \
COMMENT:"IN_TOTAL MAX AVG MIN NOW \n" \
LINE2:IN_Total#000000:"IN Total " \
GPRINT:IN_Total:MAX:"%12.2lf%s" \
GPRINT:IN_Total:AVERAGE:"%12.2lf%s" \
GPRINT:IN_Total:MIN:"%12.2lf%s" \
GPRINT:IN_Total:LAST:"%12.2lf%s\n" \
-w 700 -h 350
done
(5)将以上文件存放到/tmp/www/traffic_out目录下,并在此目录下创建rrd和images子目录。
(6)创建web页,保存为/tmp/www/traffic_out/index.html,并设置apache指向该目录(/tmp/www/traffic_out)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>RRDTool</TITLE>
<META HTTP-EQUIV="Refresh" CONTENT="300">
<META HTTP-EQUIV="Cache-Control" content="no-cache">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="Tue, 09 Aug 2005 12:37:33 GMT">
</HEAD>
<BODY bgcolor="#ffffff" text="#000000" link="#000000" vlink="#000000" alink="#000000">
<!-- commandline was: indexmaker firewall_1.cfg -->
<H1>Total Traffic - TEST</H1>
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=10>
<TR>
<TD><DIV><B>Day view </B></DIV>
<DIV><IMG BORDER=1 ALT="total_watch_dayly" SRC="./images/total_watch_day.png"></A><BR>
</DIV>
</TD></tr>
<tr><TD><DIV>Week view<B></B></DIV>
<DIV><IMG BORDER=1 ALT="total_watch_weekly" SRC="./images/total_watch_week.png"></A><BR>
</SMALL></DIV>
</TD></TR>
<TR>
</TR>
<tr><TD><DIV>Month view<B></B></DIV>
<DIV><IMG BORDER=1 ALT="total_watch_monthly" SRC="./images/total_watch_month.png"></A><BR>
</SMALL></DIV>
</TD></TR>
<TR>
</TR>
<tr><TD><DIV>year view <B></B></DIV>
<DIV><IMG BORDER=1 ALT="total_watch_yearly" SRC="./images/total_watch_year.png"></A><BR>
</SMALL></DIV>
</TD></TR>
<TR>
</TR>
</TABLE>
<BR>
5.编辑crontab -e加入以下内容:
#每5分钟执行一次update_graph.sh,不显示标准输出和错误输出到屏幕上
*/5 * * * * /tmp/www/traffic_out/update_graph.sh >/dev/null 2>&1
6.系统启动时启动服务,编辑/etc/rc.d/rc.local,加入一下两行:
/sbin/service httpd start
/sbin/service snmpd start
到此本实例完成。