« NVR500 で IPv6 IPoE 接続 | トップページ

2017年5月 7日 (日)

回線速度の時間推移を測定してグラフ化する

一般的に回線速度の計測サイトはWebインタフェースか独自アプリケーションを利用し、測定する度に操作が必要なことが多い。その時点での回線速度を測定するだけならば何も問題は無いのだが、例えば1日の回線速度の推移を自動で取得しようとすると、なかなか難しい。

Githubで公開されているspeedtest-cliをインストールすることで、speediest.netが提供している速度測定サービスをターミナルから利用できるので、あとは繰り返し実行すれば回線速度の推移を取得することが出来る。

一番簡単なインストール方法はeasy_install を使用することで、ターミナルを起動して

easy_install speediest-cli
を実行すれば良い。
ただし、今回は後々のメンテナンスを考慮して、パッケージマネージャーのHomebrewを使用することにした。
最初にターミナルを起動、
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
を実行してHomebrewをインストール。
次に同じくターミナルから
brew install speedtest_cli
を実行。
インストール後に、
speedtest-cli --version
を実行し、バージョンナンバーが表示されればOK。

speedtest.netで測定する際に、Webやアプリケーションでは一番近いサーバーを選択してくれるが、コマンドラインからの実行ではサーバーを選択しなければならない。

speedtest-cli --list
を実行するとサーバーリストが表示されるが、世界中のサーバーが表示されてしまうので
speedtest-cli --list | grep 'Japan'
で日本のサーバーのみを出力、その中から一番近いサーバーを選択する。
今回はリストの中から一番近い12162) Indegene (Tokyo, Japan) サーバーを設定することにした。
speedtest-cli --server 12162
シェルの中から実行することと、集計のために余計な情報は必要ないので、
--simpleオプションを設定して、
speediest-cli --server 12162 --simple
を実行すれば
Ping: 7.647 ms
Download: 413.27 Mbit/s
Upload: 200.56 Mbit/s
の3つの情報が出力される。

次に、このコマンドを一定間隔で実行するシェルを作成する。
実行結果はグラフ化しやすいように、測定した時刻を加えてCSV形式でテキストに出力。

#! /bin/sh
while true; do
DATA=`speedtest-cli --server 12162 --simple | tr '\n' ','` #コマンド実行結果の改行を,に置換
TIME=`date '+%Y/%m/%d %T'` #実行時間を取得
echo $TIME','$DATA >> result.csv #結果をresult.csvファイルに出力
sleep 600
done
このまま実行して、終了時にはcontrol+cで終了しても良いのだが、時間になったら終了する処理を追加。ついでにヘッダ行の出力も追加しておく。
実行間隔はサーバーへの負荷等を考慮して、10分(600秒)ごととする。
#! /bin/sh
ENDTIME="2017/05/04 20:00:00" #終了させたい日時
INTERVAL="600" #実行間隔(秒)、一回の測定時間以上を設定すること
FILENAME="result"`date '+%Y%m%d%H%M%S'`".csv" #ファイル名に開始時刻を追加
echo "DateTime,Ping,Download,Upload" >> $FILENAME #ヘッダ行を出力
while true; do
TIME=`date '+%Y/%m/%d %T'`
DATA=`speedtest-cli --server 12162 --simple | tr '\n' ','`
echo $TIME','$DATA >> $FILENAME
if [ `date -jf "%Y/%m/%d %H:%M:%S" "$ENDTIME" '+%s'` -lt `date '+%s'` ]; then
break #指定日時を経過したら繰り返しを終了
fi
sleep `expr $INTERVAL - $(expr $(date '+%s') - $(date -jf "%Y/%m/%d %H:%M:%S" "$TIME" '+%s'))` #実行間隔から前回実行に掛かった時間を減算して待機
done
拡張子を.shにしたテキストファイルとして保存し、
chmod +x シェル名.sh
で実行権限を設定して準備完了。

ターミナルから/bin/bash シェル名.sh を実行して後は放置。

測定後にExcelで集計処理を行って、最大値・最小値と平均の推移を見やすくするために株価チャートで作成。
株価チャートは1軸でしか作成出来ないため、一方のグラフの背景を透明にして重ね合わせしたものをテンプレートとして、都度データ範囲を変更することにする。

Graph


グラフのとおり、同じ時間帯でもサーバーの状況や経路の影響で最大値と最小値の差が200Mb/s以上になる場合もある。曜日や祝日でも異なる数値になるし、測定しているパソコンの利用状況や宅内LANの影響もあるだろう。あくまで傾向を確認する程度の信頼性しかないことは留意しておく必要がある。

今回のグラフは5月5日(金)21:00〜5月6日(土)22:00のもの。

|

« NVR500 で IPv6 IPoE 接続 | トップページ

internet」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/579837/65249156

この記事へのトラックバック一覧です: 回線速度の時間推移を測定してグラフ化する:

« NVR500 で IPv6 IPoE 接続 | トップページ