こんにちは、インフラグループの人見です。
今回は、社内から「インターネットへの通信量をリアルタイムで確認したい」という要望を受けて、
インフラエンジニアとして可能な範囲で「通信量の取得」と「取得した情報を社内公開するための仕組み」を構築しましたので、ご紹介します。
通信量の取得に向けたアプローチ
本来であれば、法人向けの高機能なインターネット回線を契約すれば、通信状況の可視化は容易に実現できます。しかし、当時弊社で契約していた回線は、監視機能が付いていない一般的な家庭用回線でした。
私たちはインフラエンジニアであり、アプリケーション開発には不慣れ…
そこで!扱えるツールを駆使して、なんとか要望を実現することにしました。
社内からの要望は以下の通りです
・インターネットへの通信量をリアルタイムで把握したい
・通信状況を社内ユーザー全体に公開したい
上記の社内要望に応えるべく、以下のツールを組み合わせて構築しました。
・Tera Termマクロ:Cisco機器から通信量を取得
・タスクスケジューラー:定期実行(10分間隔)
・Excel Online:CSVデータの加工とグラフ作成
・SharePoint Online:社内公開用のプラットフォーム

まず、ネットワーク構成を見直し、インターネットゲートウェイが接続されている
L3スイッチ (Cisco)に着目しました。
弊社は、全国に約600の店舗拠点と約20の本部拠点があり、
全ての拠点がインターネットにアクセスする際、該当のCiscoスイッチを経由していることが分かりました。

Ciscoスイッチで「show interface」コマンドを実行することで、
上記図の赤枠のインターフェイスごとに通信量を取得できるのでは?と考えました。
実際にTera Term接続し確認してみると、以下のような結果が出力されました。
Switch# sh int gigabitethernet 1/0/<ポート番号> | include bytes’
354441156511 packets input, 294235132971476 bytes, 0 no buffer
赤字「bytes」の値が、インターフェースの受信(input)通信量です。
この値を取得することで、今までの社内のインターネットアクセス通信量が分かりました。
通信量の計算方法
Ciscoスイッチでshow interfaceコマンドで通信量を取得できることまでは分かりましたが、
この通信量は、今までの通信量の総計になります。
この通信量はパケットが発生するたびに通信量が増加していくのですが、
10分間隔で通信量を取得し、その「差」を計算することで通信量を計測できると考えました。
例えば10分前の値が以下で、
Switch# sh int gigabitethernet 1/0/<ポート番号> | include bytes’
354441156511 packets input, 294235132971476 bytes
現在の値が以下だった場合、
Switch# sh int gigabitethernet 1/0/<ポート番号> | include bytes’
354441156511 packets input, 294240087493076 bytes
その差は[4,954,521,600 bytes]になります。
その値を以下の計算式にあてはめます。
[取得したbyte量] ÷ 10分 ÷ 60秒 × 8(byte→bit) ÷ 1024 ÷ 1024 = Mbps
以下が実際に使用したTera Termマクロのコードです。
そうすると、
[4,954,521,600 bytes]÷10÷60×8÷1024 = 53Mbps となります。
その結果、該当の10分間は平均で53Mbpsの通信量があったことになります。
自動取得の手法
10分間隔でshow interfaceコマンドを実行し、その差を求めることで、通信量を取得することができる
ということは分かりましたが、人間が10分間隔で24時間show interfaceコマンドを実行し続けることは無理があります…
そのため、通信量の取得を自動化する必要があります。
では、自動化はどうしたのかというと、Tera Termマクロとタスクスケジューラーで自動化できることが分かりました。
実際に作成したTera Termマクロは以下の通りです。
1 HOSTADD='IPアドレス'
2 USERNAME='管理者アカウント'
3 PASSWORD='パスワード'
4 ENPASS='イネーブルパスワード'
5 INT1='sh interfaces gigabitethernet 1/0/ポート番号 | include bytes'
6 SHINT1 = 'Tera Term'
7
8 COMMAND = HOSTADD
9 strconcat COMMAND ':22 /ssh /2 /auth=password /user='
10 strconcat COMMAND USERNAME
11 strconcat COMMAND ' /passwd='
12 strconcat COMMAND PASSWORD
13 connect COMMAND
14
15 getdate DATE '.csv'
16 strconcat SHINT1 DATE
17
18 wait '>'
19 pause 5
20 sendln 'en'
21 wait 'Password'
22 pause 3
23 sendln ENPASS
24 wait '#'
25 pause 3
26 sendln 'terminal length 0'
27 wait '#'
28 pause 3
29 logopen SHINT1 0 1
30 sendln INT1
31 pause 3
32 logclose
33 sendln 'exit'
上記のコマンドをメモ帳で記載し、拡張子「.ttl」で保存すればTera Termマクロとして保存ができます。
このマクロをタスクスケジューラーにて10分間隔で実行することで、通信量を自動的に取得することができました。
次回は、Tera Termマクロで取得した通信量をExcel Onlineに貼り付け、グラフ化する方法をご紹介します!