ネットスピードをRaspberry PiとGASでメトリクスする
どもー、 id:kazuph1986 です。
この記事はAkerun Advent Calendar 2018の5日目の記事です(そんな気がするのです)。
今日は家のネットスピードがヤバすぎ(遅い)なので、実際にどれくらいの通信速度が出るかを収集してみました。
Setup
今回はこれを使います。環境はRaspberry Piを家の回線に有線接続してます。
CLI上でSpeedTestできる便利なやつです。
インストール
curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py chmod +x speedtest-cli
使い方はとっても簡単で特にオプションを付けずに叩けばOKです。
$ speedtest-cli Retrieving speedtest.net configuration... Testing from Softbank BB (126.199.26.185)... Retrieving speedtest.net server list... Selecting best server based on ping... Hosted by Love4Taylor (Tokyo) [3.36 km]: 50.447 ms Testing download speed................................................................................ Download: 6.70 Mbit/s Testing upload speed................................................................................................ Upload: 4.17 Mbit/s
うん、遅いですね。
以下のようにサーバーを指定して叩くことも可能です。
# 日本のサーバーを選択して… $ speedtest-cli --list | grep "Japan" # 番号を直接指定 $ speedtest-cli --server 15047 # 出力をシンプルにすることもできます $ speedtest-cli --server 15047 --simple Ping: 55.566 ms Download: 14.01 Mbit/s Upload: 4.17 Mbit/s
GasでAPIの作成
スプレッドシートを作成して、スクリプトエディタを開いて以下のように書きました。
function doPost(e){ if (e.parameter.net_speed_ping) { var data = [ new Date(), e.parameter.net_speed_ping, // ms e.parameter.net_speed_download, // mbps e.parameter.net_speed_upload // mbps ]; addData("home metrics net_speed", data); } return ContentService.createTextOutput("ok"); } function addData(sheetName, data){ var sheet = SpreadsheetApp.openById("<YOUR_SPREADSHEET_ID>").getSheetByName(sheetName); sheet.appendRow(data) }
このスクリプトのAPIとしての公開方法はこちらを御覧ください。
APIを叩く
Raspberry Pi上に以下のようなスクリプトを置いて叩いています。shellしか使ってないのでお手軽ですね。
#!/bin/bash # Ping: 35.752 ms # Download: 7.37 Mbits/s # Upload: 0.59 Mbits/s echo `date` start speed test speedtest-cli --server 15047 --simple | tee .net_speed.log net_speed_ping=$(cat .net_speed.log | cut -d' ' -f2 | awk 'NR==1') net_speed_download=$(cat .net_speed.log | cut -d' ' -f2 | awk 'NR==2') net_speed_upload=$(cat .net_speed.log | cut -d' ' -f2 | awk 'NR==3') url=https://script.google.com/macros/s/<YOUR_GAS_API_URL>/exec curl $url \ -XPOST \ -d net_speed_ping=$net_speed_ping \ -d net_speed_download=$net_speed_download \ -d net_speed_upload=$net_speed_upload echo `date` end speed test
あとは以下のようなcronを設置すれば完成です。
*/5 * * * * root /home/pi/post_net_speed.sh >> /var/log/syslog 2>&1
5分毎としました。
結果
以下のようにデータが溜まりはじめました。
グラフにするとこんな感じ。6日間くらいのデータです。わかりやすく山と谷が出てます。
ということで結果としては、一番ネットをいじりたい20時〜24時で1〜数Mbps程度に下がり、深夜帯に復活していき朝6時にピークの25Mbpsくらいの速度が出るという感じでした。 これだと朝に早起きして好きなことをした方が良さそうです。
まとめ
Raspberry PiとGASで簡単に家の回線スピードを可視化してみました。
結果的には、「まあみんな使う時間帯は遅くなるよね・・・」という感じで「わかっていた」という気持ちもあるのですが、 妻にこの実態を見せたことで「ネットもっと速くして」という感じで話が進み、現在導入中になってます。
やはり数字で語るのは効果的ですね。
ということで、Nuro契約しました(改善結果はまたどこかで上げます)。
ではでは。
Photosynthでは一緒にはたらく仲間を募集しています!