インターネット回線の速度が遅いと感じた時、まず試してみるもののひとつがSpeedtestでしょう。Webブラウザーから簡単に回線速度を測定できるため、
しかし回線速度は常に一定とは限りません。昼間は十分な速度が出ているのに、夜になると遅くなるといったケースもあります。そこで今回は定期的にSpeedtestを実行し、その結果を記録、グラフ化できるSpeedtest TrackerをUbuntu Server上で動かしてみましょう。
Speedtest Trackerとは
Speedtest Trackerは、Ookla Speedtestを定期的に実行し、その結果を保存、可視化するためのWebアプリケーションです。LinuxServer.
インターネット回線の速度を調べるだけであれば、手動でSpeedtestを1回実行するだけでも十分です。しかし回線速度は、時間帯や回線の混雑状況、接続先となるSpeedtestサーバーなどによって変化します。そのため回線品質の傾向を知りたい場合には、同じ条件で継続的に測定することが重要になります。たとえば1時間ごとにSpeedtestを実行しておけば、
一般的にSpeedtestは、接続先となるテストサーバーを選択したあと、レイテンシー、ダウンロード速度、アップロード速度を計測します。Speedtest Trackerは簡単に言えば、この処理をOoklaのSpeedtest CLIを利用して自動的に実行し、その結果をデータベースへ保存するものです。さらに計測結果としきい値とを比較し、下回った際に通知を送るといった処理も可能です。概要はドキュメントを参照してください。
Speedtest Trackerのインストール
今回はDocker Composeを使ってSpeedtest Trackerをインストールします。あらかじめ以下のコマンドで、Docker EngineとDocker Composeプラグインをインストールしておいてください。
$ sudo apt install -U -y docker.io docker-compose-v2
Speedtest TrackerのComposeスタック用ディレクトリを作成します。
$ mkdir -p ~/speedtest-tracker $ cd ~/speedtest-tracker
Speedtest Trackerでは、データの暗号化に使用するAPP_
$ echo "base64:$(openssl rand -base64 32 2>/dev/null)" base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
表示された
続いて、次の内容でcompose.
services:
speedtest-tracker:
image: lscr.io/linuxserver/speedtest-tracker:latest
restart: unless-stopped
container_name: speedtest-tracker
ports:
- 8080:80
environment:
- PUID=1000
- PGID=1000
- APP_KEY=(控えたAPP_KEY)
- APP_URL=http://サーバーのIPアドレス:8080
- ADMIN_NAME=Adminユーザーの名前
- ADMIN_EMAIL=Adminユーザーのメールアドレス
- ADMIN_PASSWORD=Adminユーザーのパスワード
- DB_CONNECTION=sqlite
- TZ=Asia/Tokyo
- DISPLAY_TIMEZONE=Asia/Tokyo
volumes:
- ./config:/config
healthcheck:
test: curl -fSs http://localhost/api/healthcheck | jq -r .message || exit 1
interval: 10s
retries: 3
start_period: 30s
timeout: 10s
Speedtest Trackerのコンテナイメージでは、コンテナの80番ポートでWeb UIが動作します。ここではPortsを指定し、ホストの8080番ポートでコンテナへアクセスできるようにしています。
APP_
- APP_URL=http://192.168.1.10:8080
DB_
DISPLAY_
PUIDとPGIDはSpeedtest Trackerではなく、LinuxServer.
PUID/
$ id uid=1000(mizuno) gid=1000(mizuno) groups=1000(mizuno),4(adm),24(cdrom),27(sudo),30(dip),105(lxd)
ADMIN_
設定が完了したら、次のコマンドでSpeedtest Trackerを起動します。
$ sudo docker compose up -d
ログインとSpeedtestの実行
Webブラウザーで、APP_
ログイン画面が表示されますので、先ほど設定したADMIN_
ログインするとダッシュボードが表示されますが、まだSpeedtestを実行していないため、最初は何も表示されません。
Speedtestはダッシュボードから手動で実行できます。右上にある
一度でも計測を行った後は、ダッシュボードに結果が表示されます。
1回だけでは単なるSpeedtestとそれほど変わりませんが、測定結果が蓄積されると、ダウンロード速度やアップロード速度、Pingなどの推移をグラフで確認できるようになります。右上にある
Adminパネルでできること
画面右上のメニューからAdminパネルへ移動すると、Speedtest Trackerのさまざまな設定を変更できます。
既に解説しましたが、ダッシュボードでは直近の結果や、これまでに実行した計測回数や失敗回数を確認できます。
「Results」
「Users」
「API Tokens」
例えば結果の表示権限のあるトークンを以下のように使うと、JSONで計測結果を受け取ることが可能です。
$ TOKEN='トークン文字列'
$ URL='http://サーバーのIPアドレス:8080'
$ curl -s \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json" \
"$URL/api/v1/results/latest" | jq
「Data Integration」
「Notifications」
もうひとつ便利なのが、測定値にしきい値を設定できることです。
Speedtestを定期的に自動実行する
Speedtest Trackerの本領は定期的な自動実行と記録にあります。定期実行にはSPEEDTEST_
- SPEEDTEST_SCHEDULE=0 */6 * * *
1時間ごとであれば次のようになります。
- SPEEDTEST_SCHEDULE=0 * * * *
この際、追加で設定したいのがSPEEDTEST_
近隣のSpeedtestサーバーは、LinuxServer.
$ sudo docker run -it --rm \
--entrypoint /bin/bash \
lscr.io/linuxserver/speedtest-tracker:latest \
list-servers
使用するサーバーを決めたら、そのIDをcompose.
- SPEEDTEST_SERVERS=50686
設定を変更したら、スタックを再起動します。
$ sudo docker compose up -d
今後は指定したスケジュールに従ってSpeedtestが自動実行され、その結果が蓄積されていきます。
下記は筆者宅の例です。下りはおおむね4Gbps前後出ていることや、夕方から深夜にかけては2Gbps程度まで速度が低下するといった傾向がわかります。またPingにばらつきがなく、パケットロスもないことから、回線自体は安定していることもうかがえます。このように継続して計測値を蓄積することで、本当に回線の速度が落ちているのかを定量的に確認できるわけです。
ただし、Speedtestそのものがそれなりの通信量を発生させる点には注意してください。高速なインターネット回線で数分おきに実行するような設定は、回線やSpeedtestサーバーに余計な負荷をかけます。回線品質の傾向を見るのが目的であれば、まずは1日に数回程度でも十分でしょう。
自宅のインターネットが