- PR -

apacheのログ取得方法について

投稿者投稿内容
kumapoo
ベテラン
会議室デビュー日: 2003/11/21
投稿数: 59
お住まい・勤務地: 住まいも、勤務も東京の品川あたり
投稿日時: 2005-11-21 20:22
kumapooと申します。

apacheのログ取得ポリシーを変更したいと思っています。
どのようにhttpd.confに記述すればよろしいでしょうか?

(現在)
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(GIF)|(JPG)|(PNG)|(css)|(js)|(swf)$" nolog
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{cookie}i\"" combined_cookie
CustomLog /home/www/test-ad.hoge.com/logs/access_log combined_cookie env=!nolog

ドキュメントルート/getgazoulou
に.gif、.jpg、.png 等の呼び出し記録をログに書き込みたいと思います。
ログファイルは2つに分けないで、既存のログをそのまま運用したいと思います。

SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(GIF)|(JPG)|(PNG)|(css)|(js)|(swf)$" nolog

あるディレクトリ→^/getgazoulog/


[ メッセージ編集済み 編集者: kumapoo 編集日時 2005-11-21 20:24 ]

[ メッセージ編集済み 編集者: kumapoo 編集日時 2005-11-21 20:40 ]

[ メッセージ編集済み 編集者: kumapoo 編集日時 2005-11-21 20:42 ]
Uta
常連さん
会議室デビュー日: 2004/05/17
投稿数: 37
投稿日時: 2005-11-22 08:21
こんにちは。投稿された内容から、kumapooさんが何をされたいのか解釈しかねます。

現在[gif/jpg/png/css/js/swf]以外のアクセスを /home/www/(略)/access_logとして取得していて、それとは別途で画像([gif/jpg/png]と仮定)の呼び出し記録を取得したいのですよね?にもかかわらず下記の要望はどうやっても満たせないのではないでしょうか。

引用:
ログファイルは2つに分けないで、既存のログをそのまま運用したいと思います。




画像に対するアクセスログと、画像・Flash・CSS以外の通常のアクセスログを別々に取得するということでしたら以下のような形になるかと思います。
コード:
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)$" image
SetEnvIf Request_URI (略) nolog

CustomLog /doc_root/getgazoulog/image.log combined_cookie env=image
CustomLog /home/www/(略)/access_log combined_cookie env=!nolog





余談になりますが、バックスラッシュってどのようにして表示されているのですか?
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-11-22 09:47
現状どんな設定になってるのかは読み取れても、
どんな結果を意図していて、にもかかわらずどんな結果になってしまうのか、
が書かれてないので、答えにくいのですが。

引用:

SetEnvIf Request_URI ".(gif)|(jpg)|(png)|(GIF)|(JPG)|(PNG)|(css)|(js)|(swf)$" nolog


とりあえず、正規表現部分は、()と|の順序を勘違いしているように見えます。
コード:
\.(gif)
(jpg)
(png)
(GIF)
(JPG)
(PNG)
(css)
(js)
(swf)$


のいずれかにマッチする、みたいな書き方になってます。

「"."、列挙した拡張子文字列、URLの終端」というパターンを表現するなら、
\.(gif|jpg|png|GIF|JPG|PNG|css|js|swf)$
になります。

_________________
Mattun
Microsoft MVP for Directory Services
(Oct 2006-Sep 2007)
kumapoo
ベテラン
会議室デビュー日: 2003/11/21
投稿数: 59
お住まい・勤務地: 住まいも、勤務も東京の品川あたり
投稿日時: 2005-11-22 16:19
Utaさん、Mattunさん
ありがとうございます。

kumapooです。

引用:

現在[gif/jpg/png/css/js/swf]以外のアクセスを /home/www/(略)/access_logとして取得していて、それとは別途で画像([gif/jpg/png]と仮定)の呼び出し記録を取得したいのですよね?にもかかわらず下記の要望はどうやっても満たせないのではないでしょうか。



意味不明な質問なって、すいません、ログ取得のポリシーを設定するのが初めてなもので。前任者の設定を変更しています。下記のように当初の質問内容を修正いたしました。
引用:

ドキュメントルート/getgazoulou
に.gif、.jpg、.png 等の呼び出し記録をログに書き込みたいと思います。
ログファイルは2つに分けないで、既存のログをそのまま運用したいと思います。


ドキュメントルート/getgazoulog
の[gif/jpg/png/css/js/swf]へアクセスがあった場合のみログに書き込みたいと思います。 また、それ以外のディレクトリに関しては既存のポリシー通り、[gif/jpg/png/css/js/swf]のアクセスのログは取得しません。
ログファイルは2つに分けないで、既存のログをそのまま運用したいと思います。

Utaさんのおっしゃるとおり、アクセスログを2つに分けるしかなさそうですね。

バックスラッシュはどうやって挿入したか自分でも覚えていません???

[ メッセージ編集済み 編集者: kumapoo 編集日時 2005-11-22 16:32 ]
kumapoo
ベテラン
会議室デビュー日: 2003/11/21
投稿数: 59
お住まい・勤務地: 住まいも、勤務も東京の品川あたり
投稿日時: 2005-11-22 16:41
kumapooです。

ログ取得の設定変更をしてみました。

#Mattunさん、正規表現の問題はちょっと後で再度確認いたします。。。すいません。

1つのファイル(access_log)へ異なるポリシーを書き込むのはあきらめました。画像ログ用のファイル(image_log)を作成しました。Utaさんのおっしゃる通り、2つのファイルへ分ける設定にしました。

SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(GIF)|(JPG)|(PNG)|(css)|(js)|(swf)$" nolog
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(GIF)|(JPG)|(PNG)|(css)|(js)|(swf)$" imagelog
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{cookie}i\"" combined_cookie
CustomLog /home/www/test-ad.hoge.com/logs/access_log combined_cookie env=!nolog
SetEnvIf Request_URI ^/getgazoulog/ combined_cookie imagelog
CustomLog /home/www/test-ad.hoge.com/logs/access_log combined_cookie env=!nolog
CustomLog /home/www/test-ad.hoge.com/logs/image_log combined_cookie env=imagelog

しかし、
/getgazoulogディレクトリの以外の
[gif/jpg/png/css/js/swf]へアクセスがあった場合に、
image_log
へログが書き込まれてしまいました。
これじゃ、ポリシを分割した意味がありません。

どこがおかしいでしょう?

[ メッセージ編集済み 編集者: kumapoo 編集日時 2005-11-22 16:43 ]
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-11-22 16:54
現在が
1.画像拡張子を持つファイルへのアクセス
 →ログ取得なし
2.それ以外すべて
 →ログ取得あり
の1.の部分を
コード:
SetEnvIf Request_URI "\\.(gif)|(jpg)|(png)|(GIF)|(JPG)|(PNG)|(css)|(js)|(swf)$" nolog 


の正規表現部分で表現してるんだから、その部分を修正して
1.not(/getgazoulog内)かつ画像拡張子を持つファイルへのアクセス
 →ログ取得なし
2.それ以外すべて
 (/getgazoulog内 かつ 画像拡張子を持つファイルへのアクセス も含まれる)
 →ログ取得あり
ってのが求める動作ですか?

コード:
SetEnvIf Request_URI  "[^(/getgazoulog)].*\\.(gif|jpg|png|GIF|JPG|PNG|css|js|swf)$ nolog


とかになるんだろうか。正規表現苦手(汗


/getgazoulog内の画像ファイル以外のログは取らない、とか言われると
また条件が面倒になるけど、その辺はどうなんでしょう?
_________________
Mattun
Microsoft MVP for Directory Services
(Oct 2006-Sep 2007)
kumapoo
ベテラン
会議室デビュー日: 2003/11/21
投稿数: 59
お住まい・勤務地: 住まいも、勤務も東京の品川あたり
投稿日時: 2005-11-22 17:05
kumapooです。

引用:

1.not(/getgazoulog内)かつ画像拡張子を持つファイルへのアクセス
 →ログ取得なし
2.それ以外すべて
 (/getgazoulog内 かつ 画像拡張子を持つファイルへのアクセス も含まれる)
 →ログ取得あり
ってのが求める動作ですか?



私が設定したいのは、まさにその仕様です

引用:

/getgazoulog内の画像ファイル以外のログは取らない、とか言われると
また条件が面倒になるけど、その辺はどうなんでしょう?



getgazoulogへは
[gif/jpg/png/css/js/swf]
以外のファイルは格納しません。
ですので、問題ないです。

mattunさんの設定でちろっとデバッグしてみます。

コード:

SetEnvIf Request_URI "[^(/getgazoulog)].*\.(gif|jpg|png|GIF|JPG|PNG|css|js|swf)$" nolog



ありがとうございます、mattunさん。

[ メッセージ編集済み 編集者: kumapoo 編集日時 2005-11-22 17:08 ]
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-11-22 17:10
とりあえず、僕が書いた正規表現は全然自信がないし、
http://www.example.com/hoge/getgazoulog/foo.img
みたいなURLはどうするのか?とかは全然考慮してないです。

ここまでくると完全に正規表現(SetEnvIfで使えるのはPerl互換の正規表現)の
問題なので、試行錯誤するついでに正規表現関連のWebサイトや書籍でも
漁ってください。
まあやり始めるときり無いですが<正規表現
_________________
Mattun
Microsoft MVP for Directory Services
(Oct 2006-Sep 2007)

スキルアップ/キャリアアップ(JOB@IT)