Fascinated with Tofu

豆腐に魅せられて

家のインターネットの回線速度を speedtest-cli で観測する

はじめに

集合住宅のインターネットは利用者が少ない昼間は比較的すいていて、夜間は混雑していることが多いらしい。 インターネットが遅いなと感じたときにみんながよく使っている speedtestコマンドラインツール版があると知り、定期実行して観測してみました。

speedtest-cli のインストール

LinuxでもSpeedtestがしたい(speedtest-cli) を参考にさせてもらいながら、家の mac にインストールしました。 git cloneして該当する実行ファイルがspeedtest.pyが実行できればよさそうなので以下のようにしました。試しに実行した結果も少しマスクして載せておきます。

) # git clone https://github.com/sivel/speedtest-cli                                           
Cloning into 'speedtest-cli'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 1153 (delta 0), reused 1 (delta 0), pack-reused 1150
Receiving objects: 100% (1153/1153), 325.70 KiB | 619.00 KiB/s, done.
Resolving deltas: 100% (684/684), done.
) # cd speedtest-cli/                                                                           
speedtest-cli) # ./speedtest.py                                                                         
Retrieving speedtest.net configuration...
Testing from Softbank BB (x.x.x.x)...  
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by GLBB Japan (Tokyo) [6.63 km]: 8.084 m≈s
Testing download speed................................................................................
Download: 117.30 Mbit/s
Testing upload speed................................................................................................
Upload: 190.38 Mbit/s

その他の要件としては、 ・インターネット速度の定点観測という趣旨なので、テスト用サーバは固定する(今回は IPA さん 14263 にしてみた) ・可視化しやすいように CSV エクスポートする

ということで、実行コマンドは以下 ./speedtest.py --server 14623 --csv >> result.csv

CSV エクスポートした場合は以下のような出力となる

14623,IPA CyberLab,Bunkyo,2019-08-11T10:58:53.465639Z,10.824939774573073,5.235,216961778.00509918,167021284.0664986,,x.x.x.x

そのため、./speedtest.pyの結果と見比べて、あらかじめ一行目にラベルを入れておきます。名前は適当です。最後から二番目の値が欠けているのも謎です。

id,test_server,city,date,distance,rtt,download,upload,,ip

定期実行の設定

30分に一回取得する cron の設定をします。実行は絶対パスで記載する点に注意します。

crontab -l
*/30 * * * * python ~/speedtest-cli/speedtest.py --server 14623 --csv >> ~/speedtest-cli/result.csv

splunk (docker) の準備

CSV をかんたんに時系列データとして可視化する方法として、今回は splunk を利用します。使い捨てのプロセスの感覚で、Docker 上で立てます。 ローカルディレクトリを Docker コンテナから参照させたいため、以下の記事を参考にコンテナを起動します。 【Docker】Dockerでホストのディレクトリをマウントする

docker run -p 8000:8000 -e "SPLUNK_START_ARGS=--accept-license" -e "SPLUNK_PASSWORD=hogehoge" -v  ~/speedtest-cli:/opt/splunk/etc splunk/splunk

起動後は http://localhost:8000 にアクセスして、データ参照設定をします。

Settings > DATA > Data inputs

Local inputs > File & Directories > Add new

ここで Browse から先程マウントしたディレクトリを参照して、result.csv を選択します。その他の設定はそのままでどんどん進んでいけば大丈夫です。

結果の可視化

時系列に表示するため timechart 関数を使います。

host=e02bb3812356 | eval download_mb=download/1000000 | timechart avg(download_mb)

CSV の場合ダウンロードとアップロードの速度が生の数字 (Bit/sec) で表示されるため、わかりやすくメガ (MBit/sec) に変換するため、eval 関数で1000000で割っています。たまたま hostname で引っ掛けてますが他のインプットデータがないので「*」とかでもよいです。

集合住宅タイプの光フレッツなので夜はなんとなく遅いなと感じていたが、夜間と昼間でそこまで差がなかったのが意外。