今回は、Apacheのログの見方と変更方法についてです。
Apacheのログは、ほとんど何も考えずに common あるいは、それに Referer
(参照元URL) ,User-Agent
(ユーザエージェント:使っているブラウザ情報など) を追加した combined のフォーマットを使っていませんか?
そのログの見方とフォーマットの変更方法について、簡単に解説してみます。
- 目次
- 履歴
2013年4月4日 初版
Apacheのログはどこで設定できるか?
Apacheのログの設定は、VirtualHost
ディレクティブで設定できますが、もし、設定しない場合は、(ディレクティブ外の)デフォルトの設定が有効となります。
デフォルトの設定( /etc/httpd/conf/httpd.conf )では、以下のような感じで設定されていると思います。
|
[フォーマット] : LogLevel level
level
には、以下の項目を設定することができます:
- emerg : 緊急 – システムが利用できない
- alert : 直ちに対処が必要
- crit : 致命的な状態
- error : エラー
- warn : 警告
- notice : 普通だが、重要な情報
- info : 追加情報 “
- debug : デバッグメッセージ
[フォーマット] : ErrorLog file-path|syslog[:facility]
file-path
には、エラーログの出力先ファイルパスを設定することができます。
また、syslog
を指定した場合は、文字通りsyslogへ出力します。
この時、セキュリティ上ユーザ名を指定するために facility
を用います。
パイプ’|’を指定した場合、パイプ’|’以降のプログラム(あるいはシェル)へログ情報を引き渡します。
|
[フォーマット] : LogFormat format|nickname [nickname]
format
には、カスタムログ書式で決まった形式でフォーマットを指定することができます。
format
の代わりに既に設定されているLogFormat
のnickname
を指定することもできます。これは、Aliasesのような使い方ができます。
最後の[nickname]
は、ここでフォーマット定義したものの名前を指定します。
[カスタムログ書式]
フォーマット文字列 | 説明 | ||||||
---|---|---|---|---|---|---|---|
%% |
パーセント記号 | ||||||
%a |
リモート IP アドレス | ||||||
%A |
ローカル IP アドレス | ||||||
%B |
レスポンスのバイト数。HTTP ヘッダは除く。 | ||||||
%b |
レスポンスのバイト数。HTTP ヘッダは除く。CLF 書式。
すなわち、1 バイトも送られなかったときは 0 ではなく、
‘- ‘ になる | ||||||
%{Foobar}C |
サーバに送られたリクエスト中のクッキー Foobar の値 | ||||||
%D |
リクエストを処理するのにかかった時間、マイクロ秒単位 | ||||||
%{FOOBAR}e |
環境変数 FOOBAR の内容 | ||||||
%f |
ファイル名 | ||||||
%h |
リモートホスト | ||||||
%H |
リクエストプロトコル | ||||||
%{Foobar}i |
サーバに送られたリクエストの Foobar:
ヘッダの内容 | ||||||
%l |
(identd からもし提供されていれば) リモートログ名。
これは mod_ident がサーバに存在して、
IdentityCheck
ディレクティブが On に設定されていない限り、
- になります。 | ||||||
%m |
リクエストメソッド | ||||||
%{Foobar}n |
他のモジュールからのメモ Foobar の内容 | ||||||
%{Foobar}o |
応答の Foobar: ヘッダの内容 | ||||||
%p |
リクエストを扱っているサーバの正式なポート | ||||||
%P |
リクエストを扱った子プロセスのプロセス ID | ||||||
%{format}P |
リクエストを扱ったワーカーのプロセス ID かスレッド ID。
format として有効な値は pid , tid ,
hextid です。hextid を使うには
APR 1.2.0 以降が必要です。
| ||||||
%q |
問い合せ文字列 (存在する場合は前に ? が追加される。
そうでない場合は空文字列) | ||||||
%r |
リクエストの最初の行 | ||||||
%s |
ステータス。内部でリダイレクトされたリクエストは、元々の
リクエストのステータス — 最後のステータスは %>s
| ||||||
%t |
リクエストを受付けた時刻。 CLF の時刻の書式 (標準の英語の書式) | ||||||
%{format}t |
format で与えられた書式による時刻。format は
strftime (3) の
書式である必要がある。(地域化されている可能性がある) | ||||||
%T |
リクエストを扱うのにかかった時間、秒単位 | ||||||
%u |
リモートユーザ (認証によるもの。ステータス (%s ) が
401 のときは意味がないものである可能性がある)
| ||||||
%U |
リクエストされた URL パス。クエリ文字列は含まない | ||||||
%v |
リクエストを扱っているサーバの正式な ServerName | ||||||
%V |
UseCanonicalName の設定によるサーバ名 | ||||||
%X |
応答が完了したときの接続ステータス:
(このディレクティブは Apache
1.3 の後期のバージョンでは | ||||||
%I |
リクエストとヘッダを含む、受け取ったバイト数。
0 にはならない。
これを使用するためには mod_logio が必要 | ||||||
%O |
ヘッダを含む、送信したバイト数。0 にはならない。
これを使用するためには mod_logio が必要 |
(出典:http://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html#formats)
[フォーマット] : CustomLog file|pipe format|nickname [env=[!]environment-variable]
file
には、アクセスログの出力先ファイルパスを設定することができます。
パイプ’|’を指定した場合、パイプ’|’以降のプログラム(あるいはシェル)へログ情報を引き渡します。
nickname
には、LogFormat
で定義したフォーマットの名前を指定します。
もちろん、そのままログフォーマットを指定することもできますが、煩雑になるので、ほとんどの場合は、LogFormat
で定義したフォーマットの名前を指定することが多いです。
env
は、SetEnvIf
ディレクティブで設定した情報を判断してログ情報を振り分けことができます。
|
よく使うcombinedフォーマットの見方
先のデフォルトの設定例にも出てきたよく使うcombinedフォーマットに見方について簡単に解説してみます。
[定義]
|
[解説]
実際のログイメージです。
|
上記のログを解説すると、
- 119.241.27.221から、日付が 2013-4-4 04:22:21 にアクセスがあった。
- GET … でアクセスしているので、単純にウェブページ( /debian/network-config-debian.html )を参照している。(こが’POST’になるとフォームからの要求などになります。)
- 200 で正常に読み込みできた。
- “http://www.google.co.jp/url?sa=…(省略)” は、Googleの検索結果からページに訪れたことを意味する。
- “Mozilla/5.0 …(省略)” は、ブラウザはFireFox が使われていることを意味する。
ということになります。
combined
(直訳:共用)とは、米国立スーパーコンピュータ応用研究所(NCSA)で開発されたウェブサーバー NCSA HTTPd と同じログフォーマットであることに由来します。
その NCSA HTTPd の コードベースが、独立プロジェクトである Apache プロジェクトに引き継がれ、開発が継続された経緯があります。ただし、現在のApacheのソースコードは、 Apache プロジェクトによって全く別物に書き換えられました。ログフォーマットを変更する
先のデフォルトの設定例にも出てきたよく使うcombinedフォーマットを見やすいように変更してみます。また、ログ情報の追加、削除もやってみます。
[combinedログフォーマットの変更例]
|
[変更したcombinedログフォーマットの出力例]
|
上記の例では、以下の情報が追加、削除されています。
削除された情報 : %l(identd が提供されていればリモートログ名) %b(レスポンスのバイト数)
追加された情報 : %D(リクエストを処理するのにかかった時間) %P(サーバのTCPポート番号)
また日本人にとって見やすい日付フォーマットへ変更し、
何時(どれくらい)、誰が、何を、結果、何処から、何を使って
という順序に変更してみました。
おそらく必要最小限のログは、何時、誰が、何をアクセスして、結果どうなったか という情報ではないかと思います。 先の良く使う
common
,combined
は、いずれもその情報を網羅していますので、それをあえて変更することは、ほとんどないかと思います。ただし、先にも書いたようにログフォーマットを変更するのは簡単ですが、ログフォーマットを変更すると Webalyzerなどのアクセスログ解析ツールが使えなくなることがあります。
もし、それらのアクセスログ解析ツールを使用されている場合は、ログフォーマットを大胆に変更するのでなく、ログ情報を最後尾に追加する程度に収めていた方が無難かもしれません。
色々な影響が出てくることも考えられますので、ログフォーマットの変更は慎重に。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :