ウェブサイト(Webサーバ)のページ単位でレスポンスタイム・レスポンス速度(表示スピード)を測定するシェルスクリプト(バッチ処理プログラム) ~APIサーバのPOSTメソッドの応答時間計測にも使用できるコマンド実行式の測定ツール~

AWS,EC2,Lambda,Programming,Shell Script

スマートフォンを始めとするスマートデバイスの普及やモノをインターネットで繋ぐIoTの開発が活発化してきた最近では、ウェブサイトのレスポンスタイム・レスポンス速度はさらに重要な要素となってきました。

一般的なGETメソッドで表示をしているウェブサイトについてはJavaScriptを含めた表示速度を計測するサイトが多く登場しており、それらのサイトを使用することでレスポンスタイムを計測することもできます。

一方でウェブブラウザでウェブサイトを表示する速度だけではなく、IoTの思想を実現するためにはAPIサーバの応答時間も非常に重要になってきます。

APIサーバにおいてはPOSTメソッドでの通信を採用しているものも多いため、POSTメソッドに対応した測定ツールが必要です。

今回はGETメソッド、POSTメソッドの両方に対応したコマンドライン実行式のレスポンスタイム・レスポンス速度(表示スピード)を測定するシェルスクリプト(バッチ処理プログラム)を備忘録として記載します。

ウェブサイト(Webサーバ)のページ単位でレスポンスタイム・レスポンス速度(表示スピード)を測定するシェルスクリプト(バッチ処理プログラム) ~APIサーバのPOSTメソッドの応答時間計測にも使用できるコマンド実行式の測定ツール~

基本方針としてはメソッドにGET、POSTを指定したcurlコマンドを用いてレスポンスタイムを取得します。

同時にレスポンスのステータスも取得できるため、正常に対象URLと通信できたかも確認可能です。

ウェブサイト(Webサーバ)のページ単位で応答時間(レスポンス速度・表示スピード)を測定するシェルスクリプト(バッチ処理プログラム)

第一引数にメソッドの指定、第二引数にレスポンスタイム測定対象のURLを指定して実行します。

なお、下記のサンプルではPOSTのパラメタについては省略しています。必要であればPOSTパラメタを指定する引数を追加して対応してください。

[mag4j@localhost ~]# vim website_response_time.sh
#!/bin/bash

METHOD=$1
SITE_URL=$2

#メソッドの入力値を大文字に揃える。
METHOD=`echo "${METHOD}" | tr 'a-z' 'A-Z'`

#GET, POST以外のメソッドの場合は使用方法を表示して終了。
if [ "${METHOD}" != "GET" -a "${METHOD}" != "POST" ]; then
  echo "Usage: $(basename $0) [METHOD(GET or POST)] [SITE_URL]"
  exit 1
fi

#URLがURLフォーマットの正規表現に一致しない場合は終了。
if [[ ! "${SITE_URL}" =~ ^(https?|ftp|s3)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$ ]]; then
  echo "URL is Invalid Format."
  exit 1
fi

#正しいメソッド、URLでリクエストを投げ、スタータスとレスポンスタイムを取得する。
RES=`curl -kL -X "${METHOD}" "${SITE_URL}" -o /dev/null -w "{\"site\": \"${SITE_URL}\", \"method\": \"${METHOD}\", \"http_status\": \"%{http_code}\", \"response_time\": \"%{time_total}\"}\n" 2> /dev/null`

echo ${RES}

ウェブサイト(Webサーバ)のページ単位で応答時間(レスポンス速度・表示スピード)を測定するシェルスクリプト(バッチ処理プログラム)の実行例

[mag4j@localhost ~]# chmod 755 website_response_time.sh
[mag4j@localhost ~]# ./website_response_time.sh get https://www.google.com
{"site": "https://www.google.com", "method": "GET", "http_status": "200", "response_time": "0.130"}
[mag4j@localhost ~]# ./website_response_time.sh post https://your_api_server.com
{"site": "https://your_api_server.com", "method": "POST", "http_status": "200", "response_time": "0.300"}
Reference: Tech Blog citing related sources