1 はじめに
「回線速度」というものは、
時間帯やご近所さんの利用状況などの様々な要因で変化するものなので、
1回だけ測ったところでは大した意味は持ちません。
回線速度の測定と言えば、おなじみのサービスとして思いつくサイトがいくつかあるかと思います。
そういったサービスのほとんどはブラウザやスマホアプリで測定をするものです。
継続的な測定をするにあたって、毎度ブラウザやアプリを立ち上げているのでは面倒この上ありません。
そんななか、
Ooklaが
提供するコマンドラインで実行可能な”Speedtest CLI”
というアプリケーションを利用すれば、
Linuxであればcron、Windowsであればタスクスケジューラで、
定期的に自動で測定データを収集することができるようになります。
測定データをグラフ化するには、Excelを利用するのが定番な方法なのかもしれません。
Excelなどを使わずとも、図1-1に示すように簡単にグラフ化できる下のサービスを見つけましたので、
本記事で使い方を紹介したいと思います。
2 コマンドラインで実行可能なスピードテストアプリケーション
Ooklaの
Speedtest CLIは、
コマンドラインで使用できるネットワーク接続測定アプリケーションです。
これを利用することにより、自動化されたスクリプトをセットアップして、
経時的な傾向を含む接続パフォーマンスデータが収集できるようになります。
2.1 Speedtest CLIの入手とインストール
Speedtest CLIは、下に示すサイトから入手することができます。
https://www.speedtest.net/ja/apps/cli
Linux、Windows、macOSなどへのインストール方法についても、
同ページに記載されています。
どのOSであっても、インストールはわずか2~3ステップですので、本記事には記載しません。
2.2 Speedtest CLIの使い方
基本的には、図2.2-1に示すように”speedtest”と叩くだけです。
測定結果の出力は、標準出力となります。
なお、初回実行時には下に示すように、
「End User License Agreement」の同意が求められますので、
「YES」と同意する必要があります。
2.3 Speedtest CLIのコマンド・オプション
Speedtest CLIには
いくつかのコマンド・オプションがありますが、
どこにも説明書きが無いようですので、”speedtest -h”で確認するしかありません。
バージョンによって少々異なるようですが、
2023年1月最新の”Ookla 1.2.0.84 (ea6b6773cf) Linux/x86_64-linux-musl”では、
図2.3-1に示すようになっています。
よく使われると思われるオプションを表2.3-1に整理しました。
3 Machinist
3.1 Machinist概要
Speedtest CLIにより定期的にスピードテストを実行した結果は、
下に示すURLのIIJ /
Machinistというサービスを利用すれば、
簡単にグラフ化することができます。
Machinistは、
アップロードされた回線速度測定データを基にグラフを作成します。
測定項目が10まで、データの保存が直近1カ月であれば、無料で利用することができます。
本記事では、回線速度測定データのフラフ化の方法だけに止めます。
Machinistの
その他の使い方や詳しい使い方については、本記事では説明は行いません。
詳しい利用方法については、次のページをご覧ください。
3.2 Machinistアカウントの新規登録とAPIキーの作成
Machinistに回線速度測定データをアップロードし、グラフを作成するには、
MachinistのアカウントとAPIキーが必要です。
3.2.1 Machinistアカウントの新規登録
下に示すURLのMachinistの トップページ右上にある「ログイン」をクリックします。
図3.2-1に示す画面に切り替わりますので、
下に示す2つを入力して、「新規登録」をクリックします。
・メールアドレス
・パスワード
Machinist新規アカウントの登録は、以上です。
3.2.2 APIキーの作成
APIキーは、ユーザーを認証するためのものです。
ダッシュボード・ページ右上アカウント右横にある「▽」をクリックすると、
メニューが表示されます。
「アカウント設定」を選択すると、図3.2-2の画面が開きます。
「APIキー」フィールドの「新規生成」をクリックすることで、
APIキーを作成することができます。
「名前」は、測定データをアップロードする際には使用しません。
APIキーの「名前」は人間が識別するものですので、ご自分がわかり易いものを適当に付けてください。
3.3 測定データのHTTP POST
測定データは、JSON形式で、次のURLにPOSTします。
https://gw.machinist.iij.jp/endpoint
3.3.1 送信するリクエストのフォーマット
本項では、送信するリクエストのheader、bodyの内容について示します。
headerの構成は、下に示すようになります。
Machinistで収集する値はmetric(メトリック)と呼ばれ、
送信時は複数のmetrics(メトリクス)フィールドに含めます。
各metricは、下に示すフィールドで分けることができます。
・ agentフィールド 送信元を識別
・ namespaceフィールド 大まかな種別
・ nameフィールド メトリックの名前
・ data_pointフィールド 送信するデータ
tags(タグ)を付けることで、より細かくmetricを分類することも可能です。
3.3.2 レスポンス
表3.3-6に測定データPOSTのレスポンスを示します。
3.3.3 測定データのHTTP POSTサンプル
下にSpeedtest CLIを実行して、
回線速度測定結果をMachinistへPOSTするBashのサンプルを示します。
これをcronに登録しておけば、
定期的に回線速度測定データを自動でアップロードすることができるようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#!/bin/bash declare -A DATA ##### ユーザ変数 ##### API_KEY=XXXXXXXXXXXXXXXX AGENT_ID= XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX ##### データ生成 ##### now=$(date +%s) RESULT=$(speedtest -s 6405 -f csv) if [ -z "$RESULT" ]; then exit 1 fi DATA=( ["RTT"]=$(echo $RESULT | cut -d, -f3 | tr -d '"') ["Download"]=$(( $(echo $RESULT | cut -d, -f6 | tr -d '"') * 8 )) ["Upload"]=$(( $(echo $RESULT | cut -d, -f7 | tr -d '"') * 8 )) ) ##### データ送信 ##### for N in ${!DATA[@]}; do curl -s -X POST -H "Content-Type: application/json" -H "Authorization: Bearer ${API_KEY}" "https://gw.machinist.iij.jp/endpoint" -d @- <<EOS { "agent_id": "$AGENT_ID", "metrics": [ { "namespace": "Speedtest.net", "name": "$N", "tags": { "location": "OCN" }, "data_point": { "value": ${DATA[$N]}, "timestamp": $now } } ] } EOS done |
Bashサンプルにおいて、
”-s 6405”は、
テスト先サーバーを「Allied Telesis Capital Corporation Misawa Japan」にする指定です。
”speedtest -s 6405 -f csv”と実行していますので、測定結果はCSV形式で出力されます。
各項目の並びと内容については、”speedtest -s 6405 -f csv --output-header”で確認して見てください。
ヘッダー付きで出力されますので、各項目の内容を確認することができます。
グラフ化に使うために抽出しているデータ項目は、次の3つです。
・3番目の「idle latency (Round Trip Time = 俗に言うPing値)」
・6番目の「download(ダウンロード速度(バイト/秒)」
・7番目の「upload(アップロード速度(バイト/秒)」
CSV形式で出力した場合、download、uploadの値の単位は、バイト/秒となってしまいます。
ビット/秒に変換するために8倍しています(グラフ表示で、bps、kbps、Mbpsの単位変換が容易)。
4 参考資料
本記事を書くにあたって、参考にした資料を下に示します。
Machinist
Speedtest CLI:コマンドライン用のインターネット速度テスト
おうちの回線速度をお手軽に可視化してみよう - IIJ Engineers Blog
LinuxでもSpeedtestがしたい(speedtest-cli) - Qiita
Speedtest CLI & Elastic Stackで回線速度を可視化・監視する
Ookla Speedtest サーバー 一覧【JP】
以上
HTMLだと、
思うように編集することは難しく、やろうすればとっても時間が掛かります。
ですので、本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。
役に立てていただければ、うれしく思います。
このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元と著者名は明らかにしてください。
なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。