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 除了監測流量外,監測其他系統數據也很實用的。