
ログファイルは、ウェブアプリケーション内の問題をデバッグする際、開発者やシステム管理者にとって欠かせないツールです。また、ウェブサイトの不具合をトラブルシューティングする際の主要な情報源となることもよくあります。
これらのログの中でも、Apache HTTPサーバーのアクセスログは、アプリケーションのデバッグやユーザーのアクティビティに関する分析情報を得るための重要なリソースとして傑出した存在です。
Apacheアクセスログの詳細、記録内容、ログの場所、ログに含まれるデータの解釈方法については以下をお読みください。ログデータの真の力は分析を通じて得られる情報にあるため、このブログでは、Sumo LogicのようなSaaSログ分析プラットフォームを使用してアクセスログデータから実用的な分析情報を得るメリットについてご説明します。
Apacheのアクセスログとウェブサーバー監視におけるその役割とは
前述のように、ApacheアクセスログファイルはApacheウェブサーバーが生成する複数のログファイルの一つです。この特定のログファイルには、Apacheサーバーによって処理されたすべてのリクエストのデータが記録されます。つまり、誰かにサイトのウェブページにアクセスされると、アクセスログファイルにはそのイベントに関する詳細が記録されます。
この情報は、以下のようなさまざまな状況で役立ちます。
- 特定のウェブページにアクセスしようとする各ユーザーに共通のリクエストが失敗している場合、リンクが指しているページがすでに存在しない可能性があります。
- サイト上の特定のページの読み込みに通常よりも時間がかかる場合、ログエントリにはサーバーのパフォーマンス向上のために最適化が必要なSQLクエリが強調表示される可能性があります。
- サイトの特定のページが非常に人気がある場合、アクセスログからデータを集約することで、よくリクエストされるリソースが明らかになり、企業がコンテンツを最適化するのに役立ちます。
Apacheのアクセスログはどこにありますか?
Apacheのアクセスログの場所はApache HTTPサーバーを実行しているシステムによって異なります。ほとんどのApacheサーバーインスタンスはLinuxディストリビューションで実行されるため、ここではLinuxマシン上のApacheアクセスログの場所に焦点を当てます。
例えばUbuntu Linuxディストリビューションでは、デフォルトでアクセスログレコードが書き込まれる場所はこちら:
/var/log/apache2/access.log
デフォルトの場所は、他のLinuxディストリビューションでは多少異なることもありますが、ほとんどの場合はそれほど詳しく調べる必要はありません。最終的に、アクセスログの場所と形式(これについては後述します)は、CustomLogディレクティブによって定義されます。このディレクティブは、Apache HTTPサーバーの設定内で表示および変更できます。
Apacheアクセスログの解釈
Apacheのアクセスログがどのようなもので、どこにあるかがわかったところで、 開発チームやその他のIT担当者がログエントリを最大限に活用できるように、エントリを解釈する準備が整いました。
ログエントリを理解するには、Apacheログ形式を理解する必要があります。アクセスログの形式は、CustomLogディレクティブで定義されています。以下は、Apacheのアクセスログでよく使用される2種類のログ形式です。
Common Log Format
Common Log Format(CLF、共通ログ形式)は、さまざまなウェブサーバーがサーバーログファイルを生成するために使用する標準化されたテキストファイル形式です。Apache HTTPサーバーでは、Common Log Formatを使用して、開発者や管理者にとって読みやすいアクセスログを生成できます。さらに、CLF形式のログファイルは複数のウェブサーバーで使用されている標準形式であるため、多くのログ分析プラットフォームで簡単に使用できます。
CLFで書かれたアクセスログのサンプルレコードはこちら:
127.0.0.1 - Scott [10/Dec/2019:13:55:36 -0700] "GET /server-status HTTP/1.1" 200 2326
各フィールドは以下を表します。
- 127.0.0.1:リクエストを行ったクライアントのIPアドレス
- ハイフン:クライアントのID。 このフィールドはハイフンで返されることが多く、ApacheのHTTPサーバーのドキュメントでは、制御された内部ネットワークの場合を除き、この特定のフィールドを当てにしないことを推奨しています。
- Scott:リクエスト送信者のユーザーID
- [10/Dec/2019:13:55:36 -0700]:リクエストの日時
- 「GET /server-status HTTP/1.1」:リクエストの種類と要求されているリソース
- 200:HTTPステータスコード.
- 2326:クライアントに返されるオブジェクトのサイズ。
Combined Log Format
Apacheのアクセスログでよく使用されるもう一つの形式はCombined Log Formatです。この形式はCommon Log Formatに似ているものの、ログ分析やデバッグ操作のためのより多くの情報を提供するために、いくつかの追加フィールドが含まれています。Combined Log Formatで記録されるアクセスログの記録は次のようになります。
127.0.0.1 - Scott [10/Dec/2019:13:55:36 -0700] "GET /server-status HTTP/1.1" 200 2326 "http://localhost/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
ご覧のとおり、最初の7つのフィールドはCommon Log Formatのものと同じです。残りのフィールドは以下2つの追加プロパティを表します。
- 「http://localhost/」:これはHTTPリファラーで、ソースURLを示します。
- 「Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36」:これはユーザーエージェントで、クライアントのブラウザの詳細を示します。
CustomLogディレクティブ
先ほど、Apacheのアクセスログは Apache設定ファイル内のCustomLogディレクティブで設定されるとご説明しました。そこで、CustomLogディレクティブの柔軟性をご覧いただくために、アクセスログの設定例を取り上げたいと思います。
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /var/log/apache2/access.log combined
この設定では、LogFormatディレクティブを用いて統合ログ形式を定義した後、CustomLogディレクティブを使用してアクセスログの場所と形式を指定します。ご覧のように、アクセスログの場所や形式を変更するのは簡単なことです。さらに、CustomLogディレクティブには他にも機能がいくつかあります。
複数のアクセスログ
Apache HTTP サーバーに複数のアクセスログを設定するには、次のようにCustomLogディレクティブを追加して、カスタマイズされたアクセスログファイルを追加するだけです。
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{User-agent}i" agent
CustomLog /var/log/apache2/access.log combined
CustomLog /var/log/apache2/agent_access.log agent
条件付きログ
さらに、アクセスログは条件付きで書き込むことができます。これは、特定のクライアントに関連付けられたレコードを除外するなど、さまざまな理由で役立ちます。通常、これは環境変数を設定し、「env」句で参照して実行します。詳細については、CustomLogディレクティブの公式ドキュメントをご覧ください。
ログローテーションとパイプログ.
サーバーログは大量のストレージを消費するため、アーカイブされたログファイルの管理が不可欠です。比較的負荷の高いApacheサーバーではログファイル(特にアクセスログ)が急増しやすいため、古いログファイルを定期的に移動または削除するプロセスを確立することが重要です。幸い、Apache HTTPサーバーは、グレースフルリスタートとパイプログプロセスを使用することでこれを実行できます。
グレースフルリスタートにより、Apacheサーバーはクライアントの接続を失うことなく新しいアクセスログファイルに切り替えることができます。この再起動により、Apacheはクライアントの中断なしに新しいログファイルを開いて書き込むことができるため、古いログファイルを圧縮または削除してスペースを節約できます。
一方、パイプログプロセスでは、サーバーを再起動することなくログローテーションを実行できます。例えば、Apache HTTPサーバーにはrotatelogsというプログラムが含まれています。アクセスログエントリは、単にファイルに書き込むのではなく、パイプを介してこのプログラムに書き込むことができます。rotatelogsプログラムには、時間やサイズに基づいて条件付きでログをローテーションするオプションがあります。
Sumo LogicによるApacheアクセスログの分析.
大量のログデータを収集することは、データを効果的に管理・分析できる場合にのみ有効です。これが適切に行われれば、ウェブサーバやアプリケーションのパフォーマンス向上に活用できる貴重な分析情報が得られます。
Sumo Logicとの統合により、Apacheログファイルの収集が簡素化され、Apacheアクセスログの作業時に有益な視覚化を簡単に生成できるようになります。
使い始めるのは簡単です。Sumo LogicのコレクターとApacheアクセスログ用のローカルファイルソースを設定すれば、数分で稼働を開始できます。
ログ管理とデータ分析プロセスの強化を始めましょう。 今すぐ30日間の無料トライアルでSumo Logicをお試しください。


