InfluxDBを使ってWi-Fiの通信速度を簡単に可視化する方法
Wi-Fiの通信速度の変動を把握することで、通信環境の最適化を図りたいと思ったことはありませんか?
今回はそういった問題へのアプローチとして、オープンソースの時系列データベース、InfluxDBを利用してみます。
この記事では、私がInfluxDBを初めて利用し、Wi-Fi通信速度の計測とその可視化をどのように行ったのか、詳しく解説します!
目次
はじめに
こんにちは。
クラウドソリューショングループのwatanabe.tです。
近年のテレワークの増加に伴い、安定したWi-Fi通信速度の重要性は増しています。一方で、私自身がテレワークをする中で、Wi-Fiの通信速度の変動に悩まされることが多く、ビデオ会議の品質やWebアプリケーションのパフォーマンスに影響を及ぼしていました。
そこで、この記事ではWi-Fi通信速度を時系列データとして記録し、それを分かりやすく可視化する方法を探求していきます。
具体的には、オープンソースの時系列データベースであるInfluxDBを使用して、ネットワークのパフォーマンスを可視化する方法を紹介します。
これにより、特定の時間帯が遅くなりやすいのかなど、通信速度のトレンドを把握し、適切な対策を立てることが可能となります。
なお、通信速度の計測には Speedtest® by Ookla® を用いました。
InfluxDBとは?
InfluxDBは、時系列データを取り扱うためのオープンソースのデータベースシステムです。
大量のデータをリアルタイムに処理し、時間の経過とともにデータを効率的に分析する能力を持っています。こういった特性から、ネットワークパフォーマンスやメモリ負荷のような時系列データのモニタリングと分析に利用することができます。
特にInfluxDBの強みとしては、NoSQLなどと比較して大量のデータを処理できる「高速性」、GUIでの簡単な操作ができるダッシュボードによる「利便性」が挙げられます。
また、ソースコードはGoで書かれており、外部依存のない単一バイナリとして動作するのもGoodですね。
データ収集
それでは具体的なステップに進みましょう。
まずはWi-Fi通信速度のデータをSpeedtestで収集します。
ちなみに、今回Speedtestを利用したのは、シンプルで使いやすく、計測結果をCSV形式でエクスポートできるためです。
Speedtestは直感的な操作が可能なため特段説明は不要かと思いますが、ページアクセス後に「GO」を選択すると計測が行われます。
計測結果一覧は「RESULTS」から確認できます。ここからもある程度グラフ化したものが確認できますが、時間によらず描画間隔が一定のため、あまり直感的ではありません。
データエクスポートは「Export Results」で行えるため、CSVファイルをダウンロードしておきます。
InfluxDBのセットアップ
次に、InfluxDBをインストールし、設定を行った上で起動します。
といっても、今回は公式Dockerイメージを利用するため、docker runするだけです。
docker run -p 8086:8086 -v influxdb2:/var/lib/influxdb2 influxdb:2.7
起動後に http://localhost:8086/ にアクセスすると、以下のようなセットアップ画面が表示されるため、必要事項を入力していきます。
Extended annotated CSVへの変換
SpeedtestからエクスポートしたCSVはそのままInfluxDBへインポートするには、マッピング情報が不足しています。そのため、InfluxDBに特化したCSVフォーマットである「Extended annotated CSV」へ変換します。
このフォーマットの詳細な説明は 公式ドキュメント を参考にしていただければと思いますが、これを利用することで各列の取り込み有無やグルーピング、データ形式を予めCSVファイル側で指定することができます。
※ 実運用時は取り込むためのAPI等で設定することが多いと思いますが、今回は簡単のため。
SpeedtestからエクスポートしたCSVファイルは以下のようになっています。
IP_ADDRESS,TEST_DATE,TIME_ZONE,DOWNLOAD_MEGABITS,UPLOAD_MEGABITS,LATENCY_MS,SERVER_NAME,DISTANCE_MILES,CONNECTION_MODE,SERVER_COUNT
198.51.100.10,06/15/2023 18:45,GMT,55.40,48.37,4,Tokyo,0,multi,4
198.51.100.20,06/15/2023 18:45,GMT,22.80,52.23,13,Tokyo,0,multi,4
これにヘッダーを追加し、datetimeの形式を修正して以下のようなフォーマットにします。
#group,true,false,false,false,false,false,true,false,false,false
#datatype,string,dateTime:RFC3339,ignored,double,double,long,measurement,ignored,tag,ignored
#default,,,,,,,,,,
,IP_ADDRESS,TEST_DATE,TIME_ZONE,DOWNLOAD_MEGABITS,UPLOAD_MEGABITS,LATENCY_MS,SERVER_NAME,DISTANCE_MILES,CONNECTION_MODE,SERVER_COUNT
,198.51.100.10,2023-06-15T18:45:00Z,GMT,55.4,48.37,4,Tokyo,0,multi,4
,198.51.100.20,2023-06-15T18:45:00Z,GMT,22.8,52.23,13,Tokyo,0,multi,4
データインポート
ここまで来たらもう一息です。
作成したCSVファイルをdocker cpなどでコンテナの中に持ち込んだら、以下のコマンドでデータインポートします。
influx write -b speedtest -f ./speedtest-annotated-data.csv
特にエラーが表示されなければインポート成功です!
http://localhost:8086/ の Data Explorer タブにアクセスし、対象のbuckets, tagを選択して、「SUBMIT」を押すと以下のようなグラフが表示されます。
おわりに
この記事では、InfluxDBを使ったWi-Fi通信速度のモニタリングと可視化の概要を紹介しました。しかし、これはInfluxDBを利用する一例に過ぎません。
InfluxDBは、様々な種類の時系列データを効率的に処理、分析するための強力なツールです。
今後の記事では、さらに詳しい手順や、InfluxDBを用いたさまざまなデータ分析テクニックについて探求していこうと思いますので、ぜひご期待ください。