cronの設定とアクセス解析-3

前回、ローテーションの挙動を確認してアレコレ悩んでる最中のアレコレ
後日、最終まとめます。


ログローテをCRONにて実行すると、CRONの実行時間でローテされる。
たとえWeeklyにしていてもMonthlyにしていても、キッチリ00:00にはならない。
これは仕様のようだけども、CRONの時刻をキッチリに変更したところで1秒程度の微妙な誤差が生じる事もある。

ローテされる時間をキッチリ分けたい時はApacheの機能であるrotatelogsを使用すると良いらしい

現在
Apacheログ生成→logrotate.d優先→月別ローテーション→過去ログ保存→余剰分自動削除
月別のローテが、CRONにて実行される時刻で微妙に曖昧なトコロ

変更
Apacheログ生成→rotatelogs→月別ローテ→過去ログ保存→余剰分スクリプトで削除

と、してみたいけども~この方法は永遠に過去ログが保存されるとの事。
コチラには、たいして説明が無いが
http://httpd.apache.org/docs/2.2/ja/logs.html
ファイル名の後にlog.1 log.2と自動で付かず、デフォルトでは1970/1/1からの経過秒数が付いてしまう。

ちょっとだけ書いてあったcronlog
これがとても使えそうなので、あとでよく読んでみたい
http://cronolog.org/
参考サイト
http://www.drk7.jp/MT/archives/000916.html
http://www.nsworks.com/html/soft_apache_inst4_4.html

ローテ前のログを毎日解析したいけども、解析は後回しに
ついでに毎月蓄積されるログの解析も後回しにして、ログが正常にローテされてからの話しでw

rotatelogsで実行させるなら。。。
バーチャルホストごとにログを吐かせて、過去ログは7世代管理で自動で削除させる
年月を追加したファイル名で毎月保存
今月から保存したい月数を引いたファイルを削除すればいい
7ヶ月保存で今月が8月ならば、8ヶ月agoのファイルを削除するようにCRONにやらせる

参考サイト
http://bucci.bp7.org/archives/733
なんとなく出来そうな予感☆

httpd.conf のバーチャルホストに書いたCustomLogにもう1行追記
CustomLog “| /usr/local/apache2/bin/rotatelogs /var/log/apache2/access_log.%Y%m 86400 +540″ combined

上記は24時間ごとの記述ですけども…問題点ありました~
ログを切り分ける作業をApacheのrotatelogsにさせる場合、28日の月もあれば31日の月もある。。。

Apacheのrotatelogsは経過秒数で管理しているもんで…
どうやって毎月にする???

あれこれ悩む。。。
解析に通す為に1ヶ月のログが欲しい
visitorsの場合は累積しないので、1ヶ月で切り分けたログが欲しいわけ
解析結果を保存したいんですわ
で、awstatsやwebalizerは累積表示が出来て蓄積できるので、年間通しての解析結果が欲しいわけです。

ログをローテさせる日時に拘らなければ、簡単なのに。。。
結局~ログをGREPで1ヶ月のログを抽出するか
catコマンドで結合してからGREPのが早い手段のように思います…

バーチャルホスト別でログ蓄積
ローテはCRONまかせ
/Jul/2009 の行を抜き出せば7月のログが出来上がり

が…しかしログが微妙に2ヶ月にまたがっている時は、cat結合してからでいいとしても
ブログなどの過去ログ閲覧された時、ちょうど /Jul/2009 なんてアクセスが記述されてたらどうしよ~

ていうか、毎月キッチリ分ける意味ないように感じてきた。
結局は先達が必要としなかった事を夢見ているので、出来ないってことで^^;

そもそも、キッチリ分けたい理由として
visitorsに通した時に、7月の解析なハズなのに微妙に8月のログが混ざっているからキッチリ分けたい

これが今まで使った事のあるWebalizerやAwstatsの話しだけど
ローテされる前のログを1ヶ月毎日解析せても重複されずキッチリ月別に蓄積してくれる。
差分のみ解析なんてオプションもある。

visitorsをメインに考えず、WebalizerやAwstatsをメインとして、
解析が速いvisitorsを使うのは、過去ログも含めてcatしたログを解析させるで良いのでは

ログ解析で何をこんなに悩んでいるかといえば、結果の文字化け
こっちのがいいけど、化けるからアレも使いたいって事

logrotate.conf 毎週4世代管理
logrotate.d/apache2 毎週7世代管理
※正常に走ったら毎月ローテへ変更


ぁぃ☆次回、自分の欲しい解析を得られるように仕上げます