メインコンテンツまでスキップ

RRDtoolでヤマハルータの通信量を可視化

· 約4分
macaron
ゆぶ

古き良きRRDtoolを使ってヤマハルータの通信量を可視化しました。
今回はあえてCactiやMuninのようなフロントエンドツールを使わずにピュアなRRDtoolに触れてみました。(苦行)

必要なパッケージをインストール

dnf install tar gcc make pcre-devel libxml2-devel glib2-devel pango-devel perl-ExtUtils-MakeMaker

ソースのダウンロードと展開

cd /usr/local/src
curl -LO https://github.com/oetiker/rrdtool-1.x/releases/download/v1.8.0/rrdtool-1.8.0.tar.gz
tar xvf rrdtool-1.8.0.tar.gz
rm -y rrdtool-1.8.0.tar.gz
cd rrdtool-1.8.0
./configure --prefix=/usr/local/rrdtool-1.8.0

コンパイルとインストール

make && make install

バージョンアップを考慮してシンボリックリンクを作成&PATHを通しておく

ln -s /usr/local/rrdtool-1.8.0 /usr/local/rrdtool
cd /usr/local/rrdtool/bin
find . -type f -print | xargs -I{} ln -s /usr/local/rrdtool/bin/{} /usr/local/bin/{}

rrdtool -v
RRDtool 1.8.0 Copyright by Tobias Oetiker <tobi@oetiker.ch>
Compiled Apr 20 2024 22:32:14

Usage: rrdtool [options] command command_options
Valid commands: create, update, updatev, graph, graphv, dump, restore,
last, lastupdate, first, info, list, fetch, tune,
resize, xport, flushcached

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

manコマンドで参照できるように /etc/man_db.conf の35行目あたりにMANPATHを追記した

MANPATH_MAP /usr/local/bin /usr/local/rrdtool/share/man

SNMP

dnf install net-snmp-utils

ヤマハルータ側でアクセスを許可するホストを設定(サーバIPアドレスは 10.10.20.101

administrator
snmpv2c host 10.10.20.101 public
save

データが返ってきたら👌(10.10.20.1 はルータのIPアドレス)

snmpwalk -v 2c -c public 10.10.20.1 ifDescr
snmpwalk -v 2c -c public 10.10.20.1 ifHCInOctets.2
snmpwalk -v 2c -c public 10.10.20.1 ifHCOutOctets.2

RRDファイルの作成

rrdtool create traffic_lan2.rrd \
--start 1704034800 \
--step 60 \
DS:ifHCInOctets:COUNTER:240:0:U \
DS:ifHCOutOctets:COUNTER:240:0:U \
RRA:AVERAGE:0.5:5:105120 \
RRA:AVERAGE:0.5:1440:7300 \
RRA:MAX:0.5:5:105120 \
RRA:MAX:0.5:1440:7300
ヒント

rrdtool info や rrdtool dump を使って生成された.rrdファイルの設定と状態を確認できる

RRDファイルに値を格納

rrdupdater.sh というシェルスクリプトを作成し cron に登録しておく

#!/bin/sh

/usr/local/bin/rrdupdate traffic_lan2.rrd \
--template ifHCInOctets:ifHCOutOctets \
`date +%s`:`snmpget -v 2c -c public 10.10.20.1 -Oqv ifHCInOctets.2`:`snmpget -v 2c -c public 10.10.20.1 -Oqv ifHCOutOctets.2`

crontab -e

* * * * * ./rrdupdater.sh

グラフの作成

IXのグラフを参考にデザインしていく

#!/bin/sh

/usr/local/bin/rrdtool graph traffic/total_daily_in.png \
--start -118800 --end now \
--title "Last 24Hours InTraffic\n" \
--vertical-label "bits per second" \
--watermark "`date`" \
--x-grid MINUTE:60:HOUR:6:HOUR:3:0:%H \
--alt-y-grid \
--lower-limit 0 \
--width 450 \
--height 150 \
DEF:rx_avg=traffic_lan2.rrd:ifHCInOctets:AVERAGE \
CDEF:rx_bit="rx_avg,8,*" \
AREA:rx_bit#00CF00:" incoming avg" \
GPRINT:rx_bit:MIN:"(min = %5.2lf%s" \
GPRINT:rx_bit:AVERAGE:"avg = %5.2lf%s" \
GPRINT:rx_bit:MAX:"max = %5.2lf%s)" \
GPRINT:rx_bit:LAST:"last = %5.2lf%s\n" \
COMMENT:"Copyright(c) 2024 macaron lab All Rights Reserved.\r" \
VRULE:$(date -d "yesterday 00:00" +"%s")#ED1A3D \
VRULE:$(date -d "today 00:00" +"%s")#ED1A3D

/usr/local/bin/rrdtool graph traffic/total_daily_out.png \
--start -118800 --end now \
--title "Last 24Hours OutTraffic\n" \
--vertical-label "bits per second" \
--watermark "`date`" \
--x-grid MINUTE:60:HOUR:6:HOUR:3:0:%H \
--alt-y-grid \
--lower-limit 0 \
--width 450 \
--height 150 \
DEF:tx_avg=traffic_lan2.rrd:ifHCOutOctets:AVERAGE \
CDEF:tx_bit="tx_avg,8,*" \
AREA:tx_bit#00CF00:" outgoing avg" \
GPRINT:tx_bit:MIN:"(min = %5.2lf%s" \
GPRINT:tx_bit:AVERAGE:"avg = %5.2lf%s" \
GPRINT:tx_bit:MAX:"max = %5.2lf%s)" \
GPRINT:tx_bit:LAST:"last = %5.2lf%s\n" \
COMMENT:"Copyright(c) 2024 macaron lab All Rights Reserved.\r" \
VRULE:$(date -d "yesterday 00:00" +"%s")#ED1A3D \
VRULE:$(date -d "today 00:00" +"%s")#ED1A3D

最後に

CactiやMuninにはLAMP環境が必要ですが、RRDtoolは単なるコマンドラインツールです。そのため、ほぼメンテナンスフリーで長期にわたってデータを記録するのに適しています。
また、グラフは画像として出力されるためWebサイトでの掲載や管理も簡単です。これも主要なIXでRRDtoolが使われている理由なのかなと思います。 それにしても、IXのグラフは1990年代からデータが残っていて感心しました。