ネットワークトラフィック情報の取得【SNMPGet&cronでの定期取得】

当ページのリンクには広告が含まれています。
ネットワークトラフィック情報の取得【SNMPGet&cronでの定期取得】

SNMPを利用して、ネットワーク機器からトラフィック情報を取得します。また、cronを設定して定期的に実行し、Excelでグラフ化を行います。

SNMPの基礎については、下記を参照してください。

Excelではなく、プログラミング(JavaScript)を利用してグラフを表示する方法は、下記を参照してください。


目次

前提事項

下記を前提として、SNMPでのトラフィック情報取得〜グラフ化までを説明します。

  • トラフィック取得対象のネットワーク機器は、Ciscoルーター
  • SNMPのバージョンは、SNMPv2cを利用
  • CLIで、snmpgetコマンドが実行可能なこと
  • cronでの定期実行が可能なこと
  • グラフ化は、Excelを利用

Linux系OSやMacOSであれば、snmpgetコマンドとcronでのトラフィック取得環境の構築は容易だと思います。Windowsの場合は、Cygwinをインストールして実行環境を構築することをおすすめします。

ネットワーク環境

ネットワーク環境は下記の通りです。

ネットワーク環境

Ciscoルーターの設定

Ciscoルーターには下記の設定を行い、SNMPでの情報取得を可能とします。

snmp-server community public ro

SNMPGetでのトラフィック情報取得

ディレクトリ作成

トラフィック情報を格納するディレクトリを作成します。

mkdir snmpget_traffic

コマンド確認

取得日時の表示

「日付」と「時刻」をカンマ区切りで表示します。

date +"%Y/%m/%d,%H:%M:%S"
Terminal[snmpget_traffic]: date +"%Y/%m/%d,%H:%M:%S"
2022/08/18,16:40:20

SNMPGetでトラフィック情報を取得

インターフェースの受信トラフィック量(インプット/Input)を取得するには、下記のコマンドを実行します。

snmpget -v2c -c public 192.168.1.100 IF-MIB::ifHCInOctets.1
or
snmpget -v2c -c public 192.168.1.100 1.3.6.1.2.1.31.1.1.1.6.1
Terminal[snmpget_traffic]: snmpget -v2c -c public 192.168.1.100 IF-MIB::ifHCInOctets.1
IF-MIB::ifHCInOctets.1 = Counter64: 7776

インターフェースの送信トラフィック量(アウトプット/Output)を取得するには、下記のコマンドを実行します。

snmpget -v2c -c public 192.168.1.100 IF-MIB::ifHCOutOctets.1
or
snmpget -v2c -c public 192.168.1.100 1.3.6.1.2.1.31.1.1.1.10.1
Terminal[snmpget_traffic]: snmpwalk -v2c -c public 192.168.1.100 IF-MIB::ifHCInOctets.1
IF-MIB::ifHCInOctets.1 = Counter64: 7628

トラフィック量の値のみを表示する

余計な表示を省略して、トラフィック量の値だけを表示します。

snmpget -v2c -c public 192.168.1.100 IF-MIB::ifHCInOctets.1 | awk '{print $4}'
or
snmpget -v2c -c public 192.168.1.100 IF-MIB::ifHCInOctets.1 |  cut -d " " -f 4

snmpget -v2c -c public 192.168.1.100 IF-MIB::ifHCOutOctets.1 | awk '{print $4}'
or
snmpget -v2c -c public 192.168.1.100 1.3.6.1.2.1.31.1.1.1.10.1 | cut -d " " -f 4
Terminal[snmpget_traffic]: snmpget -v2c -c public 192.168.1.100 IF-MIB::ifHCInOctets.1  | awk '{print $4}'
17040

コマンドを連結

カンマ区切りで「日付」「時刻」「インプット」「アウトプット」が表示できるようにコマンドを連結します。

echo `date +"%Y/%m/%d,%H:%M:%S"`","`snmpwalk -v2c -c public 192.168.1.100 IF-MIB::ifHCInOctets.1 | awk '{print $4}'`","`snmpwalk -v2c -c public 192.168.1.100 IF-MIB::ifHCOutOctets.1 | awk '{print $4}'`
Terminal[snmpget_traffic]: echo `date +"%Y/%m/%d,%H:%M:%S"`","`snmpwalk -v2c -c public 192.168.1.100 IF-MIB::ifHCInOctets.1 | awk '{print $4}'`","`snmpwalk -v2c -c public 192.168.1.100 IF-MIB::ifHCOutOctets.1 | awk '{print $4}'`
2022/08/18,17:21:34,58262,14256

cronでの定期実行

出力先ファイル作成

出力先のcsvファイルを作成します。

echo date,time,In,Out > Router1_Gi0_0.csv
Terminal[snmpget_traffic]: echo date,time,In,Out > Router1_Gi0_0.csv

Terminal[snmpget_traffic]: cat Router1_Gi0_0.csv
date,time,In,Out

cronの登録

cronの編集ウィンドウを開きます。※viでの編集となります。

crontab -e

下記を記載します。※1分間隔で取得する場合

*/1 * * * * echo `date +"\%Y/\%m/\%d,\%H:\%M:\%S"`","`snmpwalk -v2c -c public 192.168.1.100 IF-MIB::ifHCInOctets.1 | awk '{print $4}'`","`snmpwalk -v2c -c public 192.168.1.100 IF-MIB::ifHCOutOctets.1 | awk '{print $4}'` >> /*****/*****/snmpget_traffic/Router1_Gi0_0.csv

*/1 * * * *
→「1分間隔で実行」の意味です。 (5分間隔の場合:*/5 * * * *)

date +”\%Y/\%m/\%d,\%H:\%M:\%S”
→ cronに登録する時は、”%”を”\(バックスラッシュ)”でエスケープする必要があります。

/*****/*****/snmpget_traffic/Router1_Gi0_0.csv
→ 出力先のファイルをフルパスで指定します。

cronに登録されたことを確認します。

crontab -l
Terminal[snmpget_traffic]: crontab -l
*/1 * * * * echo `date +"\%Y/\%m/\%d,\%H:\%M:\%S"`","`snmpwalk -v2c -c public 192.168.1.100 IF-MIB::ifHCInOctets.1 | awk '{print $4}'`","`snmpwalk -v2c -c public 192.168.1.100 IF-MIB::ifHCOutOctets.1 | awk '{print $4}'` >> /*****/*****/snmpget_traffic/Router1_Gi0_0.csv

cronの動作確認

1分間隔でファイルに出力されていることを確認します。

cat Router1_Gi0_0.csv
Terminal[snmpget_traffic]: cat Router1_Gi0_0.csv
date,time,In,Out
2022/08/18,17:40:01,89910,23446
2022/08/18,17:41:00,91918,24165
2022/08/18,17:42:00,93770,24961
2022/08/18,17:43:00,95562,25620
2022/08/18,17:44:00,97426,26279

Excelでグラフ化

トラフィックグラフ

計算式

取得したトラフィック量のデータは、インターフェースで受信・送信した「総通信量(バイト数)」となります。転送速度(bps)は、下記の計算式で算出します。

転送速度(bps) = 取得した値の差分 × 8(byteをbitに変換) ÷ 取得間隔(秒)

Excelフォーマットの説明

順を追って、Excelフォーマットを説明します。

グラフかの説明
STEP
取得したデータを貼り付け

SNMPGetで取得したデータを”カンマ区切り”で貼り付けます。

STEP
前回取得値との差分を計算

Input/Outputのそれぞれに対して、前回取得値との差分を計算します。

例)

=D5-D4
Inputの差分計算
=E5-E4
Outputの差分計算
STEP
転送速度(Mbps)を計算

dateは「日付」と「時刻」を連結します。※セルの書式設定で、表示形式を「yyyy/m/d h:mm」とします。

例)

=B5+C5
日時の結合

Input/Outputのそれぞれに対して、転送速度を計算します。※ここでは、Mbpsに変換するため1024で2回割っています。

例)

=G5*8/1024/1024/60
Inputの転送速度計算
=H5*8/1024/1024/60
Outputの転送速度計算
STEP
グラフ化

③で作成した表を折れ線グラフで表示します。X軸に関しては、軸のオプションで「テキスト軸」とします。

グラフ化

グラフの範囲や書式は適宜変更してください。

Excelフォーマットのダウンロード

作成したExcelのフォーマットは下記です。(関数とグラフのみのフォーマットですので、自由に改変して利用してください。)

注意点

今回の手順には、いくつかの注意点があります。

注意点1 カウンター値の上限

トラフィック量を取得する際に使用するMIB(ifHCInOctets/ifHCOutOctets)は、64bitのカウンターのため、「18446744073709551615」が最大値です。※最大値に達すると0に戻ります。

そのため、前回取得値との差分を計算する際は注意が必要です。

注意点2 Excelの桁数制限

Excelの有効桁数が15桁までのため、16桁以上の値になると関数での計算ができなくなります。

この場合は、ネットワーク機器のカウンターリセットを行うか、Excel関数以外での計算(プログラミング等)が必要になります。

まとめ

ネットワークエンジニアにとって、トラフィック量を把握することは、ネットワークを管理するうえで重要な要素です。通常は、「監視ツール」や「回線キャリアのサービス」でトラフィック量を確認することが多いと思います。

しかし、そのような環境がない状態でトラフィック量を確認するには、今回紹介した方法が役に立つと思います。また、監視ツールのグラフについては、見た目がイマイチな場合もあります。そのような場合も、ネットワーク機器からトラフィック情報を取得する方法を知っていれば、報告資料に使うようなキレイなグラフを作ることができます。

以上で、ネットワークトラフィック情報の取得【SNMPGet&cronでの定期取得】の説明は完了です!

  • URLをコピーしました!
  • URLをコピーしました!
目次