Linux、macOSなどのUnix環境でネットワーク速度を測定する計測サーバ検索機能付きベンチマーク用シェルスクリプト(バッチ処理プログラム) ~RHEL、CentOS、Fedora、Ubuntu、macOS、Cygwinなどに対応したネットワークスピードテストのベンチマークツール~

AWS,EC2,Programming,Shell Script

以前の下記の記事でLinux、macOSなどのUnix環境でサーバやクライアントの性能を評価する指標の一つであるディスクアクセス速度のベンチマークを行うシェルスクリプト(バッチ処理プログラム)について紹介しました。

参考記事:Linux、macOSなどのUnix環境でディスク速度を測定するベンチマーク用シェルスクリプト(バッチ処理プログラム) ~RHEL、CentOS、Fedora、Ubuntu、macOS、Cygwinなどに対応したディスクスピードテストのベンチマークツール~

今回はディスク速度の他に重要な位置づけである性能評価指標の一つネットワーク速度を計測するシェルスクリプト(バッチ処理プログラム)を備忘として紹介します。

Linux、macOSなどのUnix環境でネットワーク速度を測定する計測サーバ検索機能付きベンチマーク用シェルスクリプト(バッチ処理プログラム) ~RHEL、CentOS、Fedora、Ubuntu、macOS、Cygwinなどに対応したネットワークスピードテストのベンチマークツール~

シェルスクリプト(バッチ処理プログラム)の基本方針としてはgithubで公開されているspeedtest-cliというPythonスクリプトを利用してネットワーク速度を計測します。

計測時に利用するサーバは世界中に点在しているため、自分が計測したいサーバを選択する必要があります。

そのため、今回紹介するシェルスクリプト(バッチ処理プログラム)では計測サーバ検索機能を追加して、自分の居場所や測定先に指定したいロケーションを探しやすくしています。

計測サーバの検索はスクリプトの引数に文字列を記載することで世界中のサーバリストから対象文字列でgrep検索するようになっています。

Linux、macOSなどのUnix環境でネットワーク速度を測定する計測サーバ検索機能付きベンチマーク用シェルスクリプト(バッチ処理プログラム)

具体的な処理の内容としては、指定したスクリプトディレクトリにspeedtest-cliが存在しなければ、githubからspeedtest-cliをダンロードして実行権限を付与します。

次に世界中の計測サーバリストを指定された引数のキーワードで検索(引数無しの場合は「Japan」で検索)し、検索結果を表示します(検索結果が1件のみの場合はそのサーバで即座にネットワーク速度の測定が行われます)。

計測サーバの検索結果から測定したいサーバのID番号を入力するとネットワーク速度の測定が行えます。

[mag4j@localhost ~]# vim speedtest-select.sh
#!/bin/bash

SCRIPT_DIR=/usr/local/bin

if [ ! -f ${SCRIPT_DIR}/speedtest-cli ]; then
  mkdir -p ${SCRIPT_DIR}
  cd ${SCRIPT_DIR}/
  rm -f ${SCRIPT_DIR}/speedtest-cli
  curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
fi

chmod 755 ${SCRIPT_DIR}/speedtest-cli

cd `dirname $0`

KEYWORD=$1

if [ "${KEYWORD}" = "" ]; then
  KEYWORD=Japan
fi

${SCRIPT_DIR}/speedtest-cli --list | grep "${KEYWORD}"
SERVERS=(`${SCRIPT_DIR}/speedtest-cli --list | grep "${KEYWORD}" | awk '{print $1}' | sed -e 's/)//g'`)

if [ ${#SERVERS[@]} -eq 1 ]; then
  ANS=${SERVERS[0]}
elif [ ${#SERVERS[@]} -eq 0 ]; then
  echo "There is No Search Results."
  exit 0
else
  echo "Which server do you want to use? [Input Number]"
  read ANS
fi

if [ "${ANS}" = "" ]; then
  echo "Answer is Nothing. So Use All Servers of the Above."
  for SERVER in ${SERVERS[@]}; do
    SERVER_ID=`echo ${SERVER} | awk '{print $1}' | sed -e 's/)//g'`
    echo "[`date +"%Y/%m/%d %H:%M:%S"`]Start Speed Test by ${SERVER}"
    ${SCRIPT_DIR}/speedtest-cli --server ${SERVER_ID}
    echo "[`date +"%Y/%m/%d %H:%M:%S"`]End Speed Test by ${SERVER}"
  done
else
  echo "[`date +"%Y/%m/%d %H:%M:%S"`]Start Speed Test by ${ANS}"
  ${SCRIPT_DIR}/speedtest-cli --server ${ANS}
  echo "[`date +"%Y/%m/%d %H:%M:%S"`]End Speed Test by ${ANS}"
fi

Linux、macOSなどのUnix環境でネットワーク速度を測定する計測サーバ検索機能付きベンチマーク用シェルスクリプト(バッチ処理プログラム)の実行例

計測サーバを検索するキーワードを引数にして実行することで、計測サーバを指定したキーワードで検索でき、サーバのIDを入力することで対象のサーバでネットワーク速度の計測ができます。

引数が未指定の場合は「Japan」のキーワードで計測サーバリストを検索した結果が表示されます。

[mag4j@localhost ~]# chmod 755 speedtest-select.sh
[mag4j@localhost ~]# ./speedtest-select.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 47228  100 47228    0     0   217k      0 --:--:-- --:--:-- --:--:--  217k
 8842) kimagure (Sapporo, Japan) [7741.91 km]
 6405) Allied Telesis Capital Corporation (Misawa, Japan) [7884.27 km]
 8193) kamiari (Sendai, Japan) [8069.60 km]
 7139) SoftEther Corporation (Tsukuba, Japan) [8269.45 km]
 8348) Foxcore-LS (Sodegaura, Japan) [8295.79 km]
 6492) denpa893 (Sumida, Japan) [8309.26 km]
12162) Indegene (Tokyo, Japan) [8320.15 km]
 7510) ASEINet (Tokyo, Japan) [8320.15 km]
 6508) at2wn (Yokohama, Japan) [8338.92 km]
 6087) Allied Telesis Capital Corporation (Fussa-shi, Japan) [8342.63 km]
12177) OrukaNet (Yamato, Japan) [8349.39 km]
 8407) Allied Telesis Capital Corporation (Sagamihara, Japan) [8350.18 km]
 6766) JAIST(ino-lab) (Nomi, Japan) [8498.90 km]
 6368) gatolabo (Maibara, Japan) [8592.34 km]
11385) buriitto (Suzuka, Japan) [8599.63 km]
11908) Jun(skjun.net) (Katano, Japan) [8671.66 km]
 8832) OMN (Ikeda, Japan) [8687.63 km]
 6476) rxy (individual) (Osaka, Japan) [8690.91 km]
 6477) satoweb (Sakai, Japan) [8700.48 km]
 7976) denpa893 (Hikari, Japan) [8997.46 km]
  811) GLBB Japan KK (Chatan, Japan) [9855.57 km]
 6581) haza (Haebaru, Japan) [9867.71 km]
Which server do you want to use? [Input Number]
6766
[2017/05/18 00:00:06]Start Speed Test by 6766
Retrieving speedtest.net configuration...
Testing from ...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by JAIST(ino-lab) (Nomi) [8498.90 km]: 45.322 ms
Testing download speed................................................................................
Download: 1085.45 Mbit/s
Testing upload speed................................................................................................
Upload: 798.01 Mbit/s
[2017/05/18 00:00:12]End Speed Test by 6766
[mag4j@localhost ~]# 

[mag4j@localhost ~]# ./speedtest-select.sh Tokyo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 47228  100 47228    0     0   200k      0 --:--:-- --:--:-- --:--:--  201k
12162) Indegene (Tokyo, Japan) [8320.15 km]
 7510) ASEINet (Tokyo, Japan) [8320.15 km]
Which server do you want to use? [Input Number]
7510
[2017/05/18 00:00:39]Start Speed Test by 7510
Retrieving speedtest.net configuration...
Testing from ...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by ASEINet (Tokyo) [8320.15 km]: 90.032 ms
Testing download speed................................................................................
Download: 226.20 Mbit/s
Testing upload speed................................................................................................
Upload: 181.47 Mbit/s
[2017/05/18 00:00:56]End Speed Test by 7510

Reference: Tech Blog citing related sources