WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

Apacheのアクセスログを管理する

      2012/12/09

アクセスログの取得

アクセスログには、”アクセスされた時刻”や”IPアドレス”、”ユーザエージェント”などの訪問者の情報が記録されています。
一般的にApacheでログと言えば、”アクセスログ”のことを指す場合が多いです。

アクセスログのフォーマットを指定する

アクセスログのフォーマットはApacheの設定ファイル内の”LogFormat”ディレクティブで指定できます。
フォーマットに指定することで、ユーザエージェントやリファラ、クエリ情報など必要に応じた情報をログに記録することができます。

“LogFormat”ディレクティブには、必要に応じたパラメーラを組み合わせた”フォーマット文字列”と”そのフォーマットに与えるニックネーム”の2つの引数を与えます。
デフォルトでは下記のように設定されています。

[root@centos ~]#  vi /etc/http/conf/http.conf    Apacheの設定ファイルを開く
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

ひとつめの引数にある”%h”や”%l”といったパラメータはそれぞれ下表のような意味合いを持っています。

パラメータ 意味
%a リモートIPアドレス
%A ローカルIPアドレス
%b 送信したバイト数(※HTTPヘッダを除く)
%D 処理に要した時間(※ms)
%f ファイル名
%h リモートホスト名
%H プロトコル
%m リクエストメソッド
%p リクエストを処理したサーバのポート番号
%P リクエストを処理した子プロセスのプロセスID
%q クエリ文字列
%r リクエストの最初の行
%s ステータスコード
%{format}t 日時
%T 処理に要した時間(※s)
%U URLパス(※クエリ情報は含まない)
%U URLパス(※クエリ情報は含まない)

これらのパラメータの組み合わせで適宜、取得するログ情報の取捨選択ができるようになっています。

アクセスログを記録するファイルを指定する

アクセスログを記録するファイルは、Apacheの設定ファイル内の”CustomLog”ディレクティブで指定されています。
“CustomLog”ディレクティブの1つ目の引数は”ログを記録するファイルへのパス”、2つ目の引数は”LogFormatディレクティブで定義したフォーマットのニックネーム”となります。

[root@centos ~]#  vi /etc/http/conf/http.conf    Apacheの設定ファイルを開く
CustomLog logs/access_log combined   ※"ServerRoot直下のlogs/access_log"に"LogFormatはcombined"でログを記録

上記のように、ファイルへのパスが絶対パスではない場合は、ServerRoot からの相対パスとみなされます。

ログを記録しない条件を定義する

基本的にApacheではすべてのリクエストに対してログを採るようになっています。
従って、自分がデバッグ時にアクセスしたときや、自社LAN内からのアクセスもすべてログとして取得されます。

必要に応じて、”特定のホストからはログを取得しない”などの条件を設けることで、ログが見易くなり、肥大化も避けることができます。
下記はLAN内からのアクセスはログに記録しないように設定する例です。

[root@centos ~]#  vi /etc/http/conf/http.conf    Apacheの設定ファイルを開く
SetEnvIf Remote_Addr 192.168.0. no_log
CustomLog logs/access_log combined env=!no_log

また、デフォルトでは画像へのリクエストでもログが記録されます。
画像へのリクエストをログに記録しない場合は下記も追記します。

SetEnvIf Request_URI "\.(gif|jpg|png|JPG|GIF|PNG|bmp|css|ico|ICO)$" no_log

 - WEBサーバ構築 , , , , ,