mod_log_forensic
サーバに送られたリクエストの forensic ロギング
Extension
mod_log_forensic.c
log_forensic_module
mod_unique_id
はバージョン 2.1 からは必須では なくなった

このモジュールはクライアントリクエストの forensic ロギングを 行ないます。ログ収集はリクエストの処理の前と後に行なわれますので、 forensic ログは各リクエストに対して二行ログ収集します。 Forensic ロガーは非常に厳密です。これは以下のことを意味します:

- フォーマットは固定です。実行時にロギングフォーマットを変更することは できません。
- データを書けない場合は子プロセスはその場で終了し、さらにコアを ダンプするかもしれません (CoreDumpDirectory ディレクティブの設定に依ります)。

Forensic ログの出力を検査するためには、 配布物の support ディレクトリにある `check_forensic` スクリプトが役に立つでしょう。

Apache ログファイル
mod_log_config

# Forensic ログフォーマット

各リクエストは2回ログ収集されます。最初はリクエストが処理される 前 (つまり、ヘッダを受け取った後) です。2度目のログは リクエストが処理された後、通常のログ収集と同じときに 行なわれます。

各リクエストを識別するために、リクエストには 一意なリクエスト ID が割り当てられます。この forensic ID は フォーマット文字列 `%{forensic-id}n` を使うことで 通常の transfer ログにログ収集することもできます。 mod_unique_id を使っている場合は、それが生成する ID が使われます。

最初の行は forensic ID、リクエスト行と受け取ったすべてのヘッダを パイプ文字 (`|`) で分離してログ収集します。 例えば以下のようになります (実際はすべて同じ行になります):

+yQtJf8CoAB4AAFNXBIEAAAAA|GET /manual/de/images/down.gif HTTP/1.1|Host:localhost%3a8080|User-Agent:Mozilla/5.0 (X11; U; Linux i686; en-US; rv%3a1.6) Gecko/20040216 Firefox/0.8|Accept:image/png, etc...

最初のプラス文字がこのログは最初のログであることを示します。 二番目の行はマイナス文字と ID のみです:

-yQtJf8CoAB4AAFNXBIEAAAAA

`check_forensic` スクリプトは引数としてログファイルの名前を 取ります。`+`/`-` の ID の組を調べ、完了していない リクエストがある場合は警告を発します。

# セキュリティの問題

ログファイルが保存されるディレクトリがサーバを起動したユーザ 以外で書き込み可能になっているときにセキュリティが破られる可能性が あることについての詳細はセキュリティのこつを 参照してください。

ForensicLog
Forensic ログのファイル名を設定する
ForensicLog filename|pipe
server config
virtual host

ForensicLog ディレクティブは forensic 解析のための サーバへのリクエストをログ収集に使います。 各ログエントリには、普通の CustomLog ディレクティブを使ってリクエストと関連付けることの できる 一意な ID が割り当てられます。mod_log_forensic は `forensic-id` というトークンを作成し、フォーマット文字列 `%{forensic-id}n` を使うことでそのトークンを transfer ログに 追加することができます。

引数はログが書き出される位置を指定し、以下の 2種類の値のどちらかを 取ることができます:

filename
  ServerRoot
  からの 相対ファイル名
pipe
  パイプ文字 "`|`" と、その後にログ情報を標準入力から 受け取るプログラム。プログラム名は ServerRoot からの相対パスとしても 指定できます。

  # セキュリティ:

  プログラムを使う場合、そのプログラムは httpd を起動したユーザで 実行されます。つまり、サーバが root で実行された場合は root で 実行されるということです。プログラムが安全であるか、より権限の少ない ユーザに切り替えるようになっていることを確かめてください。

  # 注

  Unix 以外のプラットフォームでファイル名を入力するときは、 プラットフォームがバックスラッシュの使用を許可している場合でも、 スラッシュのみが使われるように気をつけてください。 普通は設定ファイルすべてにおいて、スラッシュの方を使用するように してください。