Loading
BLOG 開発者ブログ

2023年7月11日

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ですね。

公式ドキュメント | InfluxDB OSS 2.7

データ収集

それでは具体的なステップに進みましょう。
まずは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/ にアクセスすると、以下のようなセットアップ画面が表示されるため、必要事項を入力していきます。

InfluxDBセットアップ画面


ユーザーとバケットの初期設定


初期設定完了!



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を用いたさまざまなデータ分析テクニックについて探求していこうと思いますので、ぜひご期待ください。



watanabe.tのブログ

クラウドソリューショングループ所属

昔はモバイルアプリ開発を、今はGCP, AWS, Firebaseなどのクラウド周りの提案/開発を行っているエンジニアです。

AWS認定ソリューションアーキテクト取得しました!