Apacheアクセスログを理解する
- On 2020年6月5日
Apache のアクセスログとは?
前述したように、Apache のアクセスログは Apache HTTP サーバによって生成されるログファイルの一つです。この特定のログファイルは、Apache サーバによって処理された全てのリクエストのデータが記録されます。ですから、もし誰かがあなたのサイトのWebページを訪問した場合、 アクセスログファイルにはこのイベントに関する詳細が記録されます。
この情報は様々な状況で価値があります。例えば、特定のWebページにアクセスしようとする人が同じリクエストで失敗している場合、リンクはもはや存在しないページを指している可能性があります。サイト上の特定のページの読み込みに時間がかかっている場合、ログエントリはパフォーマンスを改善するためにリファクタリングされたSQLクエリを示している可能性があります。
Apache のアクセスログはどこにある?
Apache アクセスログの場所は Apache HTTP サーバが動作しているシステムに依存します。Apache HTTP サーバのインスタンスの大部分は Linux ディストリビューション上で動作しています。そこで、この記事では、Linux マシン上で Apache のアクセスログがどこにあるのかを詳細に説明します。
例えば、Ubuntu Linux ディストリビューションでは、アクセスログの記録はデフォルトで以下の場所に書き込まれます。
/var/log/apache2/access.log
また、CentOSでは以下の場所にあります。
/var/log/httpd/access.log
デフォルトの場所は他の Linux ディストリビューションでは多少異なるかもしれませんが、 ほとんどの場合はそれほど遠くを探す必要はありません。最終的には、アクセスログの場所とフォーマット(これについては後述します)は CustomLog ディレクティブで定義されていて、Apache HTTP サーバの設定の中で見たり変更したりすることができます。
Apache のアクセスログの解釈
Apache のアクセスログがどのようなもので、どこにあるのかがわかったところで、開発チームや他の IT 担当者が有効に活用できるように、エントリをどのように解釈するかを説明します。
Apache のアクセスログを読む
Apache のアクセスログを理解するには、解析者がアクセスログがどのような形式で記録されているかを理解する必要があります。前述したように、アクセスログのフォーマットは場所と共に CustomLog ディレクティブで定義されています。以下では、Apache のアクセスログでよく利用されている2つの一般的なログフォーマットを見ていきます。
Common Log Format(共通ログフォーマット)
Common Log Format は、いろいろなWebサーバがサーバログファイルを生成する際に使用する標準化されたテキストファイル形式です。Apache HTTP サーバでは、Common Log Format を使用して、開発者や管理者が読みやすいアクセスログを生成することができます。さらに、複数のWebサーバで使用されている標準化されたフォーマットなので、Common Log Formatのログファイルは多くのログ解析プラットフォームで簡単に使用することができます。
Common Log Format で書かれたアクセスログレコードは以下のようになります。
127.0.0.1 – Scott [10/Dec/2019:13:55:36 -0700] “GET /server-status HTTP/1.1” 200 2326
上記のサンプルレコードのフィールドは以下を表します。
- 127.0.0.0.1:要求を行ったクライアントの IP アドレス。
- ログファイルの2番目のフィールドを定義するハイフンはクライアントの ID です。このフィールドはハイフンとして返されることが多く、Apache の HTTP サーバのドキュメントでは、制御された内部ネットワークの場合を除いて、この特定のフィールドに頼らないことを推奨しています。
- Scott:リソースをリクエストする人の userid です。
- [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 リファラ。リソースへのリクエストが発生したアドレスを表します。
- “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 HTTP サーバ設定ファイルの中の 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 サーバ用に複数のアクセスログを設定できないというルールはありません。
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 サーバには、 graceful restartとパイプ経由のログを使用することでこれを行う機能があります。
Apache サーバのgraceful restartは、クライアント接続を失うことなく再起動することができます。この再起動により、Apache はクライアントを中断することなく新しいログファイルを開いたり書いたりすることができるようになり、スペースを節約するために古いログファイルを 圧縮したり削除したりする処理を実行できるようになります。
一方、パイプ経由のログ処理では、サーバの再起動なしにログのローテーションを行うことができます。例えば、Apache HTTP サーバには rotatelogs というプログラムが含まれています。rotatelogs プログラムには、時間やサイズに基づいて条件付きでログをローテートさせるオプションが含まれています。
Sumo Logic による Apache アクセスログの分析
ログファイルに大量のデータを収集することは、データを効果的に管理し、簡単に分析できる場合にのみ有用です。適切に行われた場合、Webサーバの設定やアプリケーションの改善の機会を特定するために活用できる貴重な洞察が得られます。Apacheのアクセスログを扱う際には、Sumo Logicと統合してApacheのログファイルを収集するのがベストです。
開始のプロセスは比較的簡単です。実際、SumoLogicコレクターとApacheアクセスログ用のローカルファイルソースを設定するだけで、数分で基本的な使い方ができるようになります。Sumo Logic がログ管理とデータ分析のプロセスをどのように改善できるか、今すぐチェックしてみてください。
Scott Fitzpatrick
Scott FitzpatrickはFixate IOのコントリビューターで、8年近いソフトウェア開発経験を持っています。Java、ColdFusion、HTML/CSS、JavaScript、SQLを含む多くの言語やフレームワークの仕事をしてきています。
- Apache のアクセスログとは?
前述したように、Apache のアクセスログは Apache HTTP サーバによって生成されるログファイルの一つです。この特定のログファイルは、Apache サーバによって処理された全てのリクエストのデータが記録されます。ですから、もし誰かがあなたのサイトのWebページを訪問した場合、 アクセスログファイルにはこのイベントに関する詳細が記録されます。
この情報は様々な状況で価値があります。例えば、特定のWebページにアクセスしようとする人が同じリクエストで失敗している場合、リンクはもはや存在しないページを指している可能性があります。サイト上の特定のページの読み込みに時間がかかっている場合、ログエントリはパフォーマンスを改善するためにリファクタリングされたSQLクエリを示している可能性があります。
Apache のアクセスログはどこにある?
Apache アクセスログの場所は Apache HTTP サーバが動作しているシステムに依存します。Apache HTTP サーバのインスタンスの大部分は Linux ディストリビューション上で動作しています。そこで、この記事では、Linux マシン上で Apache のアクセスログがどこにあるのかを詳細に説明します。 例えば、Ubuntu Linux ディストリビューションでは、アクセスログの記録はデフォルトで以下の場所に書き込まれます。 /var/log/apache2/access.log また、CentOSでは以下の場所にあります。 /var/log/httpd/access.log デフォルトの場所は他の Linux ディストリビューションでは多少異なるかもしれませんが、 ほとんどの場合はそれほど遠くを探す必要はありません。最終的には、アクセスログの場所とフォーマット(これについては後述します)は CustomLog ディレクティブで定義されていて、Apache HTTP サーバの設定の中で見たり変更したりすることができます。Apache のアクセスログの解釈
Apache のアクセスログがどのようなもので、どこにあるのかがわかったところで、開発チームや他の IT 担当者が有効に活用できるように、エントリをどのように解釈するかを説明します。Apache のアクセスログを読む
Apache のアクセスログを理解するには、解析者がアクセスログがどのような形式で記録されているかを理解する必要があります。前述したように、アクセスログのフォーマットは場所と共に CustomLog ディレクティブで定義されています。以下では、Apache のアクセスログでよく利用されている2つの一般的なログフォーマットを見ていきます。Common Log Format(共通ログフォーマット)
Common Log Format は、いろいろなWebサーバがサーバログファイルを生成する際に使用する標準化されたテキストファイル形式です。Apache HTTP サーバでは、Common Log Format を使用して、開発者や管理者が読みやすいアクセスログを生成することができます。さらに、複数のWebサーバで使用されている標準化されたフォーマットなので、Common Log Formatのログファイルは多くのログ解析プラットフォームで簡単に使用することができます。 Common Log Format で書かれたアクセスログレコードは以下のようになります。 127.0.0.1 - Scott [10/Dec/2019:13:55:36 -0700] 'GET /server-status HTTP/1.1' 200 2326 上記のサンプルレコードのフィールドは以下を表します。- 127.0.0.0.1:要求を行ったクライアントの IP アドレス。
- ログファイルの2番目のフィールドを定義するハイフンはクライアントの ID です。このフィールドはハイフンとして返されることが多く、Apache の HTTP サーバのドキュメントでは、制御された内部ネットワークの場合を除いて、この特定のフィールドに頼らないことを推奨しています。
- Scott:リソースをリクエストする人の userid です。
- [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 リファラ。リソースへのリクエストが発生したアドレスを表します。
- '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 HTTP サーバ設定ファイルの中の 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 サーバ用に複数のアクセスログを設定できないというルールはありません。 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 サーバには、 graceful restartとパイプ経由のログを使用することでこれを行う機能があります。 Apache サーバのgraceful restartは、クライアント接続を失うことなく再起動することができます。この再起動により、Apache はクライアントを中断することなく新しいログファイルを開いたり書いたりすることができるようになり、スペースを節約するために古いログファイルを 圧縮したり削除したりする処理を実行できるようになります。 一方、パイプ経由のログ処理では、サーバの再起動なしにログのローテーションを行うことができます。例えば、Apache HTTP サーバには rotatelogs というプログラムが含まれています。rotatelogs プログラムには、時間やサイズに基づいて条件付きでログをローテートさせるオプションが含まれています。Sumo Logic による Apache アクセスログの分析
ログファイルに大量のデータを収集することは、データを効果的に管理し、簡単に分析できる場合にのみ有用です。適切に行われた場合、Webサーバの設定やアプリケーションの改善の機会を特定するために活用できる貴重な洞察が得られます。Apacheのアクセスログを扱う際には、Sumo Logicと統合してApacheのログファイルを収集するのがベストです。 開始のプロセスは比較的簡単です。実際、SumoLogicコレクターとApacheアクセスログ用のローカルファイルソースを設定するだけで、数分で基本的な使い方ができるようになります。Sumo Logic がログ管理とデータ分析のプロセスをどのように改善できるか、今すぐチェックしてみてください。Scott Fitzpatrick
Scott FitzpatrickはFixate IOのコントリビューターで、8年近いソフトウェア開発経験を持っています。Java、ColdFusion、HTML/CSS、JavaScript、SQLを含む多くの言語やフレームワークの仕事をしてきています。" target="_blank">
0 Comments