はじめに
この記事は、知名度の低い穴場中の穴場企業シスコシステムズの有志による Cisco Systems Japan Advent Calendar 2019 の 14 日目として投稿しています。
- 2017年版: https://qiita.com/advent-calendar/2017/cisco
- 2018年版: https://qiita.com/advent-calendar/2018/cisco
- 2019年版: https://qiita.com/advent-calendar/2019/cisco
TL;DR
- ネットワークの利用状況を可視化するために、端末の通信量に応じて💡⚡✨イルミネーション✨⚡💡を色々なパターンで光らせます
- SNMP で通信量の統計情報を取得する方法は一般的に 1 - 5 分間の平均スループットを計算するため、実際の利用状況を即座にイルミネーションに反映させることができません
- Steaming Telemetry を使うことで、プログラムに優しい形式 (XML, JSON) でネットワーク機器からリアルタイムに統計情報を取得できます
- この記事では 5 秒間の平均スループットを元にイルミネーションを制御することができました
- 今年は自宅ラックやネットワーク機器をイルミネーションしましょう!✨✨✨
動作例
クリスマスイルミネーション
クリスマスツリーはたったの 300 円。ドン・キホーテと関連会社に感謝を申し上げます。
自宅ラック
友人の自宅ラックをイルミネーションしてみました😇 (Thanks to @takemon62act)
At-A-Glance
- AP = アクセスポイント
- WLC = ワイヤレス LAN コントローラ
通信の可視化
企業組織のネットワークに限らず、一般的な家庭で使われているネットワークにおいても、その利用状況は可視化されています。例えば、ルータやスイッチ等の機器には各インターフェイスの接続状態を表すリンク LED やトラフィックがあることを示すアクティビティ LED が備わっています。これらの LED は極めて限られた面積の中にも関わらず、わかりやすく通信を可視化してくれます。
しかし、どう考えても✨✨派手さ✨✨が足りません。
この記事はアドベントカレンダーの一部なわけですから、クリスマスにちなんで、派手にイルミネーションする必要があります。そこで、とりあえず Amazon で LED イルミネーションライトを買ってきました。
リモコンで 8 つの点灯パターンを切り替えることができます。1,000 円ほどで購入しました。消費電力ゼロと電池式が特徴らしいです。
スループットを計算することの難しさ
この記事では「ネットワークがたくさん使われているときに✨✨派手に光る✨✨」ことを目指して、ネットワークのスループットに注目します。
企業組織のネットワークにおいて利用状況を可視化する一般的な方法は、SNMP を使って定期的にネットワーク機器から通信量の統計情報を取得し、その差分から帯域幅を算出するものです。
参考: SNMP を使用した帯域幅使用率の計算方法 (15 年以上前から公開されている)
このような方法では、装置から情報を取得する間隔 (サンプリングレート) によって精度に大きな違いが生まれます。例えば、統計情報を 5 分おき に取得すると、その 5 分間の中で 💣 爆発的 💣 な変化があったことに気付くことができません。
では、数秒おきの情報を取得すればいいのでしょうか??
残念ながらネットワーク機器のリソースは非常に限られているため、SNMP を使って数秒おきに情報を問い合わせてしまうと、ネットワーク機器側の負荷が高くなってしまいます。
そこで次世代 SNMPと呼ばれているStreaming Telemetry の出番です。Streaming Telemetry では「いつ(*秒おきに, 値が変化したら)」「どこに(IP アドレス, ポート)」「なにが欲しい」のか、予めネットワーク機器に対して宣言します。ネットワーク装置から能動的に情報を送信するため、SNMP と比較して軽い負荷でリアルタイムなデータを取得することができます。
Streaming Telemetry は最近日本でも多く取り上げられているため、色々な情報が Web で見つかります。興味がある方はぜひ以下をご参照ください。
- Streaming Telemetryで実現!サイレント障害における予兆検知への道 :: JANOG41
- IOS XEのModel Driven Telemetryを試してみた
- Cisco Model Driven Telemetryの参考資料メモ
構成部品
IoT リモコン - Broadlink RM Mini3
[Broadlink RM Mini3](https://www.amazon.co.jp/dp/B07VMDMGZV)LED イルミネーションに赤外線を送信するために、スマートホームなどの文脈で話題の「スマートリモコン」「IoT リモコン」を使います。ちゃんとしたものは高価なので、今回はあくまで実験目的として技適未取得の怪しい製品を eBay で買ってきました 😈
社名を出しながら電波法に違反すると炎上間違いなしですが 総務省関東総合通信局へ技適未取得機器を用いた実験等の特例を届けることで、実験のために合法的に利用しています 🎉
申告書を郵送すると、届出書データとして yaml ファイルがメールで送付されてきて感動しました。
Cisco Catalyst 9800-CL ワイヤレス コントローラ
Cisco Catalyst といえば スイッチ と思いますよね???
[Cisco Catalyst 9800 Series Wireless Controllers (cisco.com)](https://www.cisco.com/c/en/us/products/wireless/catalyst-9800-series-wireless-controllers/index.html)より引用
違います! ワイヤレス製品も含めた Catalyst 9000 シリーズとして約 1 年前にブランド統合されました。
従来と大きく異なる点はルータやスイッチと同様に Cisco IOS XE が採用されていることです。これによって、プログラマビリティが飛躍的に向上されています。また、ルータでは当たり前の仮想環境との親和性も大きく向上しました。
この記事では仮想アプライアンス Catalyst 9800-CL 16.12.1s を利用しています。
Python プログラム
ソースコードは Gist にアップロードしました。自由に使ってください。Cisco ではないネットワーク機器でも同じように動くはず、です。
$ python main.py --help
usage: main.py [-h] -u USERNAME [-p PASSWORD] [--port PORT] [--period PERIOD]
destination ifname
パラメータを入力してください
positional arguments:
destination Connects and logs into the specified destination
ifname Interface name to check its bandwidth (i.e.,
GigabitEthernet1)
optional arguments:
-h, --help show this help message and exit
-u USERNAME, --username USERNAME
Username (default: None)
-p PASSWORD, --password PASSWORD
Password (default: Prompt if not specified)
--port PORT Port (default: 830)
--period PERIOD Period in centiseconds for periodic subscription
(default: 500)
例えばこんな感じで実行します。
$ python main.py -u cisco -p cisco switch.example.com GigabitEthernet2
最後に
免責事項
本サイトおよび対応するコメントにおいて表明される意見は、投稿者本人の個人的意見であり、シスコの意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、シスコや他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Web サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。