Apacheのアクセス・ログの読み方と解析方法を説明します。

 Webサイトへのアクセス情報はログとしてファイルに保存されています。このログを閲覧すればどのくらいのユーザーがどのファイルにアクセスしているかなどを集計できます。サーバー上で引き起こったエラーを確認したり,不正ユーザーが攻撃を行っている形跡を調べたりすることも可能です。

 では,Apacheのログを実際に閲覧してみましょう。

ログを閲覧する

 Apacheのログには主に,いつどのマシンからどのファイルにアクセスが行われたかなどを保存している「access_log」,Apache上で発生したエラー情報などを保存する「error_log」があります。ログ・ファイルは/var/log/httpd ディレクトリに保存されます。

 access_log には,図1のように1行ごとに1つのアクセス・ログが記載されています。内容は,「アクセス元のIP アドレスやホスト名」,「ID 情報」,「認証ユーザー名」,「アクセスした日時」,「メソッド,アクセスしたファイル,プロトコル」,「ステータス・コード」,「送信したデータ容量」です。

:
192.168.1.102 - - [13/Nov/2006:13:08:58 +0900] "GET 
/index.html HTTP/1.1" 200 1672
:
192.168.1.12 - fukuda [15/Nov/2006:10:07:12 +0900] "GET 
/project/ HTTP/1.1" 200 361
:
図1●access_logの内容
access_logはアクセスをしてきた相手や要求ファイルなどの情報を保存している。

 図1の1つ目のログならば,192 .168 . 1 . 102のマシンがindex.htmlファイルを要求し,Apacheがその内容を送った(ステータス・コードが200)と分かります。

 図2は,error_logです。内容は「エラー発生の日時」,「ログの種類」,「ログの内容」となっています。ログの種類には,重大なエラーが発生したことを表す[crit],エラーが発生したことを表す[error],警告を表す[warn],起動などのイベントを表す[notice]などがあります。図2の2つ目で,存在しないファイルにアクセスがあったことが分かります。

:
[Fri Jan 12 18:02:43 2007] [notice] SIGHUP received. 
Attempting to restart
:
[Fri Jan 12 18:02:46 2007] [error] [client 192.168.1.102] 
File does not exist: /usr/local/apache2/htdo
cs/aaa
:
図2●error_logの内容
Apache上で発生したエラー情報などを保存している。

referrer_logとagent_logを保存する

 access_logやerror_logのほかに,どのファイルやサイトからのリンクでアクセスして来たかを記載する「referrer_log」というログがあります。referrer_logを閲覧すれば,どのサイトからリンクされているかなどを知ることができます。

 また,どのブラウザを利用しているかを記載する「agent_log」もあります。agent_logを閲覧すれば,利用者のブラウザの種類を確認できます。

 Fedora8の場合は,access_logの各行末にreferrer_logとagent_log が付加されます。

Webalizerでログを集計する

 ログを集計するアプリケーションを利用すると,こうしたログの管理が簡単になります。ここではWebalizerを紹介します。

写真1●ログの集計アプリケーション「Webalizer」
写真1●ログの集計アプリケーション「Webalizer」

 Webalizer はApacheのログを集計し,グラフにして表示してくれます。集計結果は,Webブラウザで閲覧できます(写真1)。どの国からアクセスがあったかなども集計できます。

 では,実際にWebalizerをインストールしてログを集計してみましょう。

 Fedora 8の場合は,yum を利用してWebalizerのパッケージを入手およびインストールできます。インストールは次のように実行します。


$ su
# yum install webalizer

 インストールが完了したら,ログを閲覧できるマシンを設定します。

 /etc/httpd/conf.d/webalizerファイルの「# Allow form .example.com」の行を編集します。

 例えば,192 . 168 . 1 . 0のネットワーク(ネットマスク長は24)に接続されているマシンだけがログを閲覧できるようにするには,

Allow from 192.168.1.0/
24

と変更します。設定できたらApacheを再起動します。次に,

$ su
# webalizer

と実行して,ログを集計します。これで,ブラウザから「http://サーバーのホスト名/usage/」にアクセスすると,ログが閲覧できます。

 ログは毎日午前4時ころに自動的に集計されます。