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