RRDTool 是十分好的的统计工具,跟 MRTG 是同一位开发反者。相比起 MRTG, MRTG 主要用作统计及监测系统的流量,而 RRDTool 的功能更加强大,可以自订多项数据在同一张图,而且画图也可以自订各种参数,可以画出十分漂亮的统计图表。另一款十分流行的系统监测工具 — Cacti,就是基于 RRDTool 开发的 PHP 程式。
我个人是较喜欢用 RRDTool,虽然 Cacti 安装好,会自行完成大部份设定工具,画的图也很漂亮,但我不太喜欢 Cacti 的操作较繁复,始终我管理的服务器不是很多。
以前要安装 RRDTool 需要自行编译原始码安装,现在 CentOS 默认也可以用 yum 安装,省却了不少工作,只是安装的版本较旧,目前安装安装的版本是 1.4.8, 以下纪录一下安装 RRDTool 及设定监测网络流量的方法。
执行以下指令安装 RRDTool:
现在先建立 rrd 数据库,执行以下指令:
|
1 2 3 4 5 6 7 8 9 10 11 |
# mkdir /etc/rrd # cd /etc/rrd # rrdtool create network.rrd \ -s 300 \ DS:in:DERIVE:600:0:12500000 \ DS:out:DERIVE:600:0:12500000 \ RRA:AVERAGE:0.5:1:576 \ RRA:AVERAGE:0.5:6:672 \ RRA:AVERAGE:0.5:24:732 \ RRA:AVERAGE:0.5:144:1460 |
现在建立了一个名为 network.rrd 的 rrd 数据库在 /etc/rrd 目录下,现在到取得资料。RRDTool 除了可以用 SNMP 取得监测的数据,也可以透过指令的输出取得数据,以下会示范监测系统的流量。
例如我的网卡是 em1, 执行 ifconfig em1 指令,执行结果其中两行包括了量资讯,再用 grep 过滤需要的两行:
RX packets 34179796 bytes 5467568214 (5.0 GiB)
TX packets 37912457 bytes 36763565386 (34.2 GiB)
上面的执行结果,我只需要 5467568214 及 36763565386 两个数值,可以配合 cut 截取所需字串:
5468013207
36766952436
第一行是 IN 的流量,第二行是 OUT 的流量,现在再配合 sed 读取第一行或第二行,就可以取得 IN 及 OUT 的流量数据:
|
1 2 3 4 |
# /usr/sbin/ifconfig em1 | grep bytes|cut -d":" -f2|cut -d" " -f14 | sed -n 1p 5473005822 # /usr/sbin/ifconfig em1 | grep bytes|cut -d":" -f2|cut -d" " -f14 | sed -n 2p 36810395735 |
这两个指令要现在放到 rrdtool 执行,以下是 rrdtool 对 /etc/rrd/network.rrd 更新的指令,先纪下来,一会连同画图的指令一同放到 Shell Script 自动执行:
|
1 |
rrdupdate /etc/rrd/network.rrd N:`/usr/sbin/ifconfig em1 | grep bytes|cut -d":" -f2|cut -d" " -f14 | sed -n 1p`:`/usr/sbin/ifconfig em1 | grep bytes|cut -d":" -f2|cut -d" " -f14 | sed -n 2p` |
先建立储存 rrd 统计图表的目录:
建立以下 rrd-update.sh Shell Script:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#!/bin/sh ### update rrd database rrdupdate /etc/rrd/network.rrd N:`/usr/sbin/ifconfig em1 | grep bytes|cut -d":" -f2|cut -d" " -f14 | sed -n 1p`:`/usr/sbin/ifconfig em1 | grep bytes|cut -d":" -f2|cut -d" " -f14 | sed -n 2p` ### draw image to /var/www/rrd directory for period in day week month year do rrdtool graph /var/www/rrd/network-$period.png -s -1$period \ -P -t "<b>Network Traffic on em1</b>" \ --lazy -l 0 -a PNG \ DEF:in=/etc/rrd/network.rrd:in:AVERAGE \ DEF:out=/etc/rrd/network.rrd:out:AVERAGE \ CDEF:out_neg=out,-1,* \ "AREA:in#00b674:Incoming" \ "LINE1:in#336600" \ "GPRINT:in:MAX: Max\\: %3.1lf %s" \ "GPRINT:in:AVERAGE: Avg\\: %3.1lf %S" \ "GPRINT:in:LAST: Current\\: %3.1lf %Sb/sec\\j" \ "AREA:out_neg#3A6DA1:Outgoing" \ "LINE1:out_neg#072047" \ "GPRINT:out:MAX: Max\\: %3.1lf %S" \ "GPRINT:out:AVERAGE: Avg\\: %3.1lf %S" \ "GPRINT:out:LAST: Current\\: %3.1lf %Sb/sec" \ "HRULE:0#000000" \ -h 113 -w 500 -v "Bytes per Second" > /dev/null done |
例如以上 Shell Script 放在 /root/rrd-update.sh, 执行以下指令:
将 rrd-update.sh 放在 crontab 自动执行,执行 “crontab -e”, 加入以下一行:
|
1 |
*/5 * * * * /root/rrd-update.sh > /dev/null 2>&1 |
过几分镜 rrd-update.sh 执行后,便会在 /var/www/rrd 目录产生图片,等大约半小时后便可以看到有数据的图片了。
上面的画图的指令看似复杂,但只是关于图表的参数,仔细查看 rrdtool 的手册,了解里面的意思,便可以画出很漂亮的图表,而且 rrdtool 除了监测流量外,监测其他系统数据也很实用的。