アクセスログから各リクエストの詳細情報を取得する

WEBサーバなどから出力されるアクセスログ。1リクエスト1行の単位で記録されており、アクセスが多いサイトでは膨大な量になります。目視していただけではなかなか読み解くのが難しいアクセスログですが、実は様々なことを教えてくれます。

この記事では、アクセスログからリクエストごとの

  • 処理件数
  • 平均応答時間
  • 平均サイズ

を集計する方法を紹介します。

リクエストごとに集計するメリット

リクエストごとに集計を行うことで、どのリクエストに問題が発生しているかを把握することが可能です。とたえば、速度遅延の障害が発生したときに、全体に問題が発生しているのか、それとも特定のリクエストのみに問題が発生しているのかを切り分けすることが可能です。

また、2つの時間帯の情報を比較することで、異常が発生しているのか、通常通りの状態なのかを確認することもできます。

リクエストごとに集計する方法

ここではもっとも原始的にシェルを利用して集計していきます。アクセスログの形式は「combinedD」形式を前提としています。標準的に利用されている「combined」形式の場合は平均応答速度の取得はできませんのでご注意ください。

もっと詳しく->ログフォーマットは「combinedD」がおすすめ

#/bin/sh

# 入力ファイルになるアクセスログ
ACCESS_LOG='access_log'
# 情報取得時刻(grepで対象ログを特定するために利用
BASE_TIME='2020:10:0'
# 結果出力用ファイル
RESULT_FILE='request_smy.csv'

# 以下、一時ファイル
FILE_LIST='tmp_file.list'
ACCESS_LOG_TMP='tmp_access_log'
ACCESS_LOG_TMP2='tmp2_access_log'
RESULT_FILE_TMP='tmp_result.csv'

#----------------------
# ファイル一覧を取得(URLパラメータは除外)
#----------------------
cat $ACCESS_LOG|grep $BASE_TIME>$ACCESS_LOG_TMP
cat $ACCESS_LOG_TMP|awk '{print $7}'|cut -d? -f1|sort|uniq|egrep -v "\.svg|\.css|\.js|\.class|\.gif|\.jpg|\.jpeg|\.png|\.bmp|\.ico|\.swf|/js/|\.cur|healthcheck.txt|\.xml">$FILE_LIST

#----------------------
# 時間リストごとに平均応答速度と件数を取得する
#----------------------
echo > $RESULT_FILE_TMP
while read record
  do

    grep $record $ACCESS_LOG_TMP>$ACCESS_LOG_TMP2

    # 件数を取得する
    count=`grep -c $record $ACCESS_LOG_TMP2`

    # 平均サイズを取得する
    responsesize=`cat $ACCESS_LOG_TMP2|awk '{m+=$10} END{print m/NR/1000;}'`

    # 平均タイムを取得する
    responsetime=`cat $ACCESS_LOG_TMP2|awk '{m+=$(NF)} END{print m/NR/1000000;}'`

    # 結果をファイル出力
    echo $record,$count,$responsetime,$responsesize >> $RESULT_FILE_TMP
done < $FILE_LIST

#----------------------
# ソート 2:件数, 3:平均応答速度
#----------------------
echo "url,count,responsetime(s),size(KB)"> $RESULT_FILE
sort -t , -k 3 -n -r $RESULT_FILE_TMP>>$RESULT_FILE

echo $RESULT_FILE

上記シェルを実行すると次のような結果が取得できます。

/store/item/detail/GHAUE,4,7.41896,46.992
/store/item/index/20,15,2.12357,81.2373
/store/item/index/,17,1.88189,75.6009
/store/item/detail/IEJGH,2,0.823318,35.0895
/store/item/detail/FJJIE,2,0.691789,60.851
/store/gift/detail/09u3jg,2,0.688783,71.812

先頭行は
「/store/item/detail/GHAUE」へ4回アクセスがあり、平均応答速度は7.41896秒かかり、平均レスポンスサイズが46.992KBだったことが把握できます。

まとめ

膨大なデータとなるアクセスログですが、中身を精査すると様々なことがわかります。

リクエストごとの集計を行うことで、よりアプリケーション側に寄った詳細な調査が可能です。アクセスログを上手に活用できるようになりましょう。

アクセスログを解析したい人は次の記事もおすすめです。

コメントは受け付けていません。