Webサーバーのログ設定を確認する
トラブルシューティングやアクセス解析の元データとなるWebサーバーの「ログ」について、その保存のされ方から確認していきます。【連載コラム:Linuxを学ぼう(25)】
今回は、Webサーバーのログ設定を確認してみます。ログの確認はトラブルシューティングの基本ですが、Webサーバーの場合にはそれに加えてアクセス解析などを行いたいというニーズもあります。まずはログがどのように保存されるのか、Apache Webサーバーの設定を読み解いて確認しましょう。
ログの記録場所を設定ファイルから読み解く
まず、Apache Webサーバーの設定ファイルから、ログがどこに記録されているのかを読み解いてみましょう。
設定ファイルは「/etc/httpd/conf/httpd.conf」です。設定ファイルの冒頭にコメントで以下のように記述されています。
# Configuration and logfile names: If the filenames you specify for many
# of the server's control files begin with "/" (or "drive:/" for Win32), the
# server will use that explicit path. If the filenames do *not* begin
# with "/", the value of ServerRoot is prepended -- so 'log/access_log'
# with ServerRoot set to '/www' will be interpreted by the
# server as '/www/log/access_log', where as '/log/access_log' will be
# interpreted as '/log/access_log'.
ポイントは「ファイル名が/で始まっていない場合にはServerRootの値が前に入る」ということです。では、ServerRootの値を確認してみましょう。エディタの検索などで探してみます。
ServerRoot "/etc/httpd"
設定ファイルがそうであるように、/etc/httpdディレクトリ以下に各種ファイルが集まっているのは、このServerRootが設定されているからです。
ログファイルの保存場所を確認
では、ログファイルはどこにあるでしょうか。「log」というキーワードで探していきます。まず、エラーログの保存場所の定義であるErrorLogが見つかります。
ErrorLog "logs/error_log"
「/」で始まっていないので、ServerRootの値が前に付けられるので実際には「/etc/httpd/logs/error_log」がエラーログのファイル名となります。
では、通常のアクセスログはどうでしょうか。ErrorLogのもう少し下を見ると、以下のような記述が見つかります。
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here. Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
#CustomLog "logs/access_log" common
#
# If you prefer a logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
CustomLog "logs/access_log" combined
まず、上のブロックは一般的なログフォーマットの定義について説明していますが、実際の定義はコメントアウトされているので適用されていません。そして下のブロックで複合的なログフォーマットの説明があり、
CustomLog "logs/access_log" combined
として定義されています。アクセスログは「/etc/httpd/logs/access_log」に複合フォーマット(combined)で保存されていることが分かります。
ログフォーマットの定義
では、一般的なフォーマットと、複合的なフォーマットとは何か?というと、少し上に定義が記述されています。
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
違いはRefererとUser-Agentの2つが追加されている点です。
Refererは、そのページにアクセスする際に別のページのリンクを辿った場合、そのリンク元のURLが入ります。これを使うことでアクセスしてきたユーザーの行動履歴を追うことができます。
User-Agentは、ユーザーがどのようなブラウザを使っているかの情報が入ります。
どちらも、簡単ですがユーザーのアクセス行動分析などに使える情報が追加で記録されることになります。
もちろん、これらの定義をさらにカスタマイズすることで必要なログを取得できますが、分析ツールなどを使うのであれば、そちらの設定に合わせた変更が必要となるでしょう。
次回は、実際にログファイルに記録されている情報を確認してみます。
- 筆者紹介
宮原 徹 氏
Linux標準教科書、Linuxサーバー構築標準教科書などの監修者。LinuCレベル1/レベル2 Version10.0の改訂作業にも協力。また、幅広いOSSに関する情報提供の場として「オープンソースカンファレンス(OSC)」の企画運営も。
バックナンバー
第23回:WebサーバーでPHPを動かす
第22回:WEBサーバーにコンテンツを配置する
第21回:外部からWebサーバーにアクセスする
第20回:Webサーバーを動かす
第19回:Webサーバーをインストールする