第13回 Apacheのログを活用しよう Apacheのログは情報の宝庫だ。サイトの不具合や不審なアクセスを見つけたり、閲覧者の移動経路などからサイトを使いやすくする手掛かりを得ることができる。そのためには、ログの見方やカスタマイズ方法を知る必要がある。 一志 達也<ichishi@pochi.tis.co.jp>TIS株式会社 2002/2/16
|
Apacheが残すログ
Apacheが残すログにはいくつかの種類がある。まずは、どういったログを残すのか、それを知っておくことから始めよう。
- アクセスログ
通常、「ログ」といえばこのアクセスログを意味する。アクセスログは、Webブラウザがサーバ(Apache)に何かをリクエストし、それにApacheが応えるごとに記録される。簡単にいえば、だれかが何かにアクセスするたびに、その結果が記録されるのだ。
詳しくは後述するが、このログに「何を記録するのか」「どのファイルに記録するのか」といったことは、管理者が自由に定義できる。細かな設定を可能としていることは、ログを活用しようと思う管理者にとって大きなメリットである。
- エラーログ
エラーログは、リクエストの結果がエラーになったものだけが記録される。また、アクセスログと違い、エラーログは設定の自由度が低い。設定できるのは、記録するエラーのレベルくらいである。
このログを見ると、設定やリンクの間違いなどに気付くこともある。しかし、それは別な手段でチェックした方がいい。エラーログは、サーバに問題が起きていないことを確認するために使う。
- CGIエラーログ
このログには、CGIスクリプトが発行するエラーだけが記録される。このログは、Apacheの設定ファイルであるhttpd.confに対し、ScriptLogディレクティブを使って設定しなければ作成されない。通常の運用時にこのログを記録することは少なく、CGIスクリプトの開発環境においてのみ記録させることが多い。
間違い(バグ)を含んだCGIスクリプトを作成し、Webブラウザでアクセスすればこのログを作成することができる。その内容を見ると分かるが、サーバ上(端末やエミュレータ)で実行したときに出力されるエラーメッセージとまったく同一のものが記録されるだけである。Webブラウザでテストしたときに、どうしてもうまくいかない場合には、こうしたログが役に立つというレベルのものだ。
- クッキーログ
クッキーログは、ユーザーの行動追跡に使われる。このログは、「mod_usertrack」と(注)いうモジュールを必要とするため、あらかじめApacheにモジュールを組み込んでおかなければ記録できない。
注:以前は「mod_cookie」を使っていたのだが、Apache 1.2から「mod_usertrack」に変更された。
モジュールが組み込まれていて、その機能が有効化されている場合、ApacheはリクエストしたWebブラウザに対して、自動的にクッキー(cookie)を発行する。後で詳しく紹介するが、ここで発行されたクッキーを記録することで、利用者がどういった経路でサイト内を移動したかを分析できる。主に、商業サイトなどでユーザーの行動を分析し、サイトの構造を評価する目的で利用されることが多い。
このように、大きく分けて4種類のログを記録できるわけだが、何でもかんでも記録すればいいというものでもない。冒頭にも述べたとおり、ログは活用してこそ意味があるからである。「何かあったときのために」などといって無駄なログを記録しても、ディスク領域を浪費するだけに終わるだろう。それどころか、ディスクアクセスやCPUの負荷を高め、サーバのレスポンスを悪くすることも考えられる。
ログを残すときは、本当に活用できるかどうかまで含めて検討し、必要最低限の記録を行うように心掛けたい。
エラーログ
では、それぞれのログの設定方法と記録内容の参照方法を解説しよう。本来なら、先ほど紹介した順番のとおりに解説するべきなのだが、設定が複雑なアクセスログは最後に回してエラーログから始めることにする。また、CGIエラーログについては「ScriptLog」ディレクティブで設定するだけであり、記録される内容もスクリプトの単なるエラーメッセージなので、詳細な解説はしないことにする。
■エラーログの設定
エラーログの設定で必要になるディレクティブは、「ErrorLog」と「LogLevel」の2つである。ErrorLogディレクティブはログファイルの位置と名称を指定し、LogLevelディレクティブは記録するログのレベルを指定する。
表1に、LogLevelディレクティブで指定できるログレベルをまとめておいた。例えば、
LogLevel notice |
と指定すると、notice以上のもの(emerg〜notice)が記録されることになる。一般的に、運用状態にあるサーバでは「notice」か「warn」を指定し、テスト状態であれば「info」や「debug」を指定することが多い。
レベル
|
記録される内容
|
|
emerg | 動作不能な状況(Emergencyの意) | |
alert | 修正しなければ(部分的に)動作できない問題 | |
crit | 上記に該当しない動作上の問題(Criticalの意) | |
error | 存在しないファイルへのアクセスなど各種エラー | |
warn | 警告(Warningの意)。設定のミスなどが考えられる場合 | |
notice | 起動停止や設定変更された場合など | |
info | あらゆる情報(プロセスの起動や停止など) | |
debug | Apache関連のデバッグに必要な情報 | |
表1 エラーログのレベル |
ErrorLogディレクティブには、ログを指定するディレクトリとファイルの名称を指定する。例えば、
ErrorLog /usr/local/apache/logs/error.log |
などのように記述する。あるいは、
ErrorLog syslog |
のように、ファイル名の代わりに「syslog」を指定してもよい。この場合、Apache専用のエラーログファイルを作らず、Linuxが標準で持っているsyslogにエラーを記録する。ただし、syslogに記録するよりも管理の利便性から専用のファイルに記録することが多い。
syslogに記録する場合は、
ErrorLog syslog:facility |
のようにすることでsyslogのファシリティを指定することも可能だ。ファシリティの指定がない場合は、local7がデフォルトのファシリティとして採用される。
httpd.confを変更した場合は、Apacheを再起動しないと設定が有効にならない点に注意すること。それは、ほかの設定についても同様である。
■エラーログのチェックポイント
アクセスの結果、エラーが発生するとエラーログが記録される。例えば、存在しないファイルにアクセスした場合やユーザー認証で不正なパスワードを入力した場合などだ。エラーログを設定したら、わざと間違ったアクセスを試み、どんなログが記録されるのか確認しておくといいだろう。
ここでは、いくつか例を挙げてログのどこに着目すべきかを紹介しよう。
[crit] [client 192.168.1.11] (13)Permission
denied: /usr/local/apache/html/root_own.html pcfg_openfile: unable
to check htaccess file, ensure it is readable |
上記のようなログで注目すべきなのは、「Permission denied」の部分である。つまり、ファイルは存在しているがパーミッション(権限)の問題でファイルを読み込めなかったことを意味する。こうした問題はすぐに修正すべきものとして、単なるエラー(error)よりも高レベルのログとして記録される。このようなログを抽出して、問題を早期に修正するようにするべきである。
[alert] [client 192.168.1.11] /home/ichishi/public_html/.htaccess:
Multiple <Files> arguments not (yet) supported. |
この場合も単なるエラーよりも高レベルのログ(alert)として記録されている。これは、.htaccessの内容に間違いがあることを警告している。Apache自身の動作には問題がないが、このユーザーのファイルに正常にアクセスできなくなる。こうした問題も、発見次第修正しなければならない。
[error] [client 192.168.1.11] File does
not exist: /usr/local/apache/html/index.html not_exist |
これは、比較的発生しやすいエラーの1つで、リクエストに対応するファイルがなかったという意味である。このような記録の原因の大半はユーザー側のミスなのだが、リンクのミスという可能性も考えられる。この記録が頻発するようであれば、リンクが間違えていないかなど、検査してみる必要があるだろう。
[error] [client 192.168.1.11] client
denied by server configuration: /home/ichishi/public_html/index.html |
これは、「denied」の部分に注目する。つまり、アクセス制限によってアクセスが拒否されたことを意味している。単にパスワードを打ち間違えても記録されるから、目くじらを立てることもないのだが、これがログに頻繁に現れるようなら不正アクセスということも考えられる。
これらはほんの一例でしかないが、見慣れないエラーでも注意深く英語を解読すればおおよその意味は理解できるはずだ。できればemergなどの例も示したかったが、それらは簡単に発生させられない。もし、error以上のレベルが記録されたら、基本的に対処を要するものだと思った方がよい。
1/2
|