Apacheのアクセスログにレスポンスタイムを記録する方法

目次

スポンサードリンク

ApacheはオープンソースのWebサーバソフトウェアです。2023年のデータでは22%程度のWebサイトはApacheを利用しているといったデータがありました。以前は 70%近くがApacheを利用していたので、最近シェアは落ちてきていますが、まだまだ利用されている方も多いWebサーバーです。

Apacheで構築したWebサイトにアクセスすると、アクセスした日時やアクセス元のIPアドレス、URLなどの情報がアクセスログに保存されます。

ログフォーマットの指定方法

Apacheの設定ファイルではアクセスログの出力先をCustomLog ディレクティブで指定します。デフォルトの設定では、以下のような設定になっていますが、カスタマイズされている場合は、出力先やログのファイル名が異なることがあるので、念のため、設定ファイルも確認しておきましょう。

CustomLog "logs/access_log" combined

アクセスログに出力される情報は、LogFormat ディレクティブで指定することができます。Apache2.4 では以下の設定がありました。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat ディレクティブの一番後ろの記述(combined)は、フォーマットを識別するための名称です。この名称を、CustomLog ディレクティブで指定することで、対象のアクセスログファイルのフォーマットを指定することができます。

レスポンスタイムを記録する

レスポンスタイムを記録するには、ログフォーマットに %D を追加します。 Apache のドキュメントでは、%T でもリクエストを扱うのにかかった時間を表示できるとありましたが、私の環境では %T は必ず 0になっていたので、%Dを使うことにしました。

単位は、%D がマイクロ秒単位、%T は秒単位です。

LogFormat ディレクティブにフォーマットの指定を追加してみます。今回は以下のようにリファラーヘッダの前に追加してみました。リファラーやUser-Agentには様々な文字が入りますので、その前で出力しておくと、列番号でのカラム指定が容易なため後々集計がしやすくなります。

LogFormat "%h %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" combined

ログファイルを見てみましょう。下記例では、422430 がレスポンスにかかった時間(マイクロ秒)ですね。その後ろのハイフンはリファラーを表しますが、この例ではページのURLを直接していしてアクセスしたのでリファラーがない状態です。リファラーの後に、User-Agentと続いています。

192.168.1.XXX - - [17/May/2024:19:25:23 +0900] "GET /url_sample HTTP/1.1" 200 107085 422430 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"


Linuxの基礎からセキュリティまで、サーバー運用に必要な知識をまとめた書籍

Webシステムの基礎について徹底的に学べるUdemy講座
【PHP, MYSQL, Apache】ガチで学びたい人のためのWEB開発の基礎 icon

関連記事