家のインターネットの回線速度を 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 で引っ掛けてますが他のインプットデータがないので「*」とかでもよいです。
集合住宅タイプの光フレッツなので夜はなんとなく遅いなと感じていたが、夜間と昼間でそこまで差がなかったのが意外。