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

- 動作環境
- Rocky Linux 9.3 (Blue Onyx)
- RRDtool 1.8.0
- 公式のビルド手順 https://github.com/oetiker/rrdtool-1.x/blob/master/doc/rrdbuild.pod
必要なパッケージをインストール
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ファイルの作成
- https://www.itmedia.co.jp/enterprise/articles/0705/30/news022.html を読む
- 5分毎の平均・最大値を1年間保存(
365d*60min*24h/5min=105120rows) - 24時間の平均・最大値を20年間保存(
7300d*60min*24h/1440min=7300rows)
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のグラフを参考にデザインしていく
- https://www.jpix.ad.jp/ix/technical/traffic.php
- https://www.jpnap.net/ix/traffic_tokyo
- https://www.bbix.net/service/ix/traffic-graph
#!/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年代からデータが残っていて感心しました。
