第7回 RRDtoolでグラフ化モニタリングSNMPによるネットワークモニタリング「第2版」(4/8 ページ)

» 2007年05月30日 09時05分 公開
[大澤文孝,ITmedia]

 トラフィック情報は平均をとりたいので「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ファイルに格納する

 データベースができたなら、この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に書き込むこともできる。

リスト1■SNMPのデータを取得してrrdtool updateでデータを格納する例

#!/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.

注目のテーマ