百度首页 | 百度空间
 
查看文章
 
RRDTool应用示例
2006-09-03 21:38

 下面是在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
 
 到此本实例完成。


类别:网络监控 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu