トラフィック情報は平均をとりたいので「RRA:AVERAGE」となる。15分間の平均とするなら、15分÷5分=3サンプル分の平均をとればよい。Unknownの許容率は、仮に50%(0.5)としよう。
30日分保存したいという設定は、15分で割って、30日×24時間×60分÷15 = 2880を指定すればよい。これらを設定するコマンドは、次のようになる。
$ rrdtool create packets.rrd --start 1177945200 --step 300 DS:InPackets:COUNTER:600:0:U DS:OutPackets:COUNTER:600:0:U RRA:AVERAGE:0.5:3:2880 RRA:AVERAGE:0.5:3:2880
正しく作成されたかどうかは、infoオプションを使って調べることができる。
$ rrdtool info packets.rrd
データベースができたなら、このRRDファイルに値を格納する。値を格納するには、次のようにupdateを指定する。
rrdtool update [ファイル名] [タイムスタンプ:データ] [タイムスタンプ:データ] …
タイムスタンプは省略することもできる。省略した場合には、現在時刻が使われる。
指定するデータ順序は、RRDファイルに定義した順となるが、次のように--templateオプションを使って、明示的にデータの並びを指定することもできる。
rrdtool update [ファイル名] --template [フィールド名1:フィールド名2:]… [タイムスタンプ値:フィールド1の値:フィールド2の値]…
SNMPと組み合わせるのであれば、もちろん、snmpgetコマンドを実行して、インタフェースを出入りするパケット数を得て、その値を上記のように埋め込んでrrdtoolコマンドを実行するプログラムを作るということになる。
実際にそのようにして作成したシェルスクリプトが、リスト1である。
リスト1では、snmpgetコマンドのオプションに「-Oqv」を指定している。これにより、純粋に値だけを取得できる。インタフェースに対応するMIBのOIDについては、「第5回 図解で知るSNMP――MIB情報のすべて」を参照してほしい。
ここではシェルスクリプトで処理しているが、Perlモジュールを使って、SNMPからデータを取得してRRDtoolに書き込むこともできる。
#!/bin/sh
# コミュニティ名(-cオプション)は適時変更すること
# またifInOctets.3やifOutOctets.3の「.3」は3番目のインタフェースという意味である(連載第5回目を参照)
/usr/local/rrdtool/bin/rrdtool update packets.rrd \
#!/bin/sh
# コミュニティ名(-cオプション)は適時変更すること
# またifInOctets.3やifOutOctets.3の「.3」は3番目のインタフェースという意味である(連載第5回目を参照)
/usr/local/rrdtool/bin/rrdtool update packets.rrd \
--template InPackets:OutPackets \
`date +%s`:`snmpget -c hogeprivate -v 1 -Oqv localhost ifInOctets.3`:`snmpget -c hogeprivate -v 1 -Oqv localhost ifOutOctets.3`
実際にデータが格納されたかどうかは、前述のinfoオプションで参照できるほか、dumpオプションを使うと、XML形式でダンプできる。また、データが最後に格納されたタイムスタンプ値は、lastオプションで取得できる。
Copyright © ITmedia, Inc. All Rights Reserved.