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)は、下記の計算式で算出します。
Excelフォーマットの説明
順を追って、Excelフォーマットを説明します。
SNMPGetで取得したデータを”カンマ区切り”で貼り付けます。
Input/Outputのそれぞれに対して、前回取得値との差分を計算します。
例)
=D5-D4
=E5-E4
dateは「日付」と「時刻」を連結します。※セルの書式設定で、表示形式を「yyyy/m/d h:mm」とします。
例)
=B5+C5
Input/Outputのそれぞれに対して、転送速度を計算します。※ここでは、Mbpsに変換するため1024で2回割っています。
例)
=G5*8/1024/1024/60
=H5*8/1024/1024/60
③で作成した表を折れ線グラフで表示します。X軸に関しては、軸のオプションで「テキスト軸」とします。
グラフの範囲や書式は適宜変更してください。
Excelフォーマットのダウンロード
作成したExcelのフォーマットは下記です。(関数とグラフのみのフォーマットですので、自由に改変して利用してください。)
注意点
今回の手順には、いくつかの注意点があります。
注意点1 カウンター値の上限
トラフィック量を取得する際に使用するMIB(ifHCInOctets/ifHCOutOctets)は、64bitのカウンターのため、「18446744073709551615」が最大値です。※最大値に達すると0に戻ります。
そのため、前回取得値との差分を計算する際は注意が必要です。
注意点2 Excelの桁数制限
Excelの有効桁数が15桁までのため、16桁以上の値になると関数での計算ができなくなります。
この場合は、ネットワーク機器のカウンターリセットを行うか、Excel関数以外での計算(プログラミング等)が必要になります。
まとめ
ネットワークエンジニアにとって、トラフィック量を把握することは、ネットワークを管理するうえで重要な要素です。通常は、「監視ツール」や「回線キャリアのサービス」でトラフィック量を確認することが多いと思います。
しかし、そのような環境がない状態でトラフィック量を確認するには、今回紹介した方法が役に立つと思います。また、監視ツールのグラフについては、見た目がイマイチな場合もあります。そのような場合も、ネットワーク機器からトラフィック情報を取得する方法を知っていれば、報告資料に使うようなキレイなグラフを作ることができます。
以上で、ネットワークトラフィック情報の取得【SNMPGet&cronでの定期取得】の説明は完了です!