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

ログを整理したいと思い立って意図したように動かしたくいじる

☆アクセスログ・エラーログを毎日解析実行しながら、月ごとログも蓄積したい☆
☆バーチャルホストごとに別々の独立したログで解析したい
☆CRONにて自動実行させている毎日の解析は時間はどうでもいい
☆CRONにて自動実行している毎月のログは1日~月末24時でキッチリ分け蓄積したい
☆月毎のログファイルは7つまで保存



要するに…
バーチャルホストごとにログを作成させ、現行ログで毎日出力
月が変わったら先月のログを1ヶ月間の解析ファイルとして保存し、ログファイルは過去7ヶ月保存


バーチャルホストのログ設定
httpd.conf
・ログファイルの内容設定
crontab
・ログファイル関連のみならず他の自動実行も含まれる。
・日ごと、週ごと、月ごとにまとめてあるので、気楽に時間を変更すると他に影響がでるかも
logrotate.conf
・ログローテ全体の設定
・ローテーションの実行間隔や、過去ログ記録数、圧縮など
・通常、cron.dailyに置いてある
logrotated.d
・各ログファイルごとの詳細な設定


CustomLog や ErrorLogディレクティブを内に記述する
例)

ServerName www.example.com
DocumentRoot /home/httpd
CustomLog logs/access_log combined env=!nolog
ErrorLog logs/error_log combined


ServerName 001.example.com
DocumentRoot /home/001
CustomLog logs/001access_log combined env=!nolog
ErrorLog logs/001error_log combined

当然ファイル名は別。バーチャルホスト別にログファイルが作成される。
apacheを再起動させると指定したファイルが出来る
例としてエラーログも個別にしたが、必要なければアクセスログのみで良い
しばらく見てみたいだけで個別にした。

ちなみにLogFormatで %v を入れるとバーチャルホスト名の付いたログになるらしい
ログを分けず1つのログファイルにバーチャルホスト別で記録させたいって場合は良い



続いてcronでローテーションをいじる
crontab         メインファイル。各実行時刻などが
/etc/cron.hourly    毎時タスクの設定ファイルを置く
/etc/cron.daily     毎日タスクの設定ファイルを置く
/etc/cron.monthly   毎月タスクの設定ファイルを置く
/etc/cron.weekly    毎週タスクの設定ファイルを置く
/etc/cron.d        上記以外の設定ファイルを置くディレクトリらしい。。。

hourly・daily・monthly・weekly の各ディレクトリの実行設定はcrontab(触らない
hourly・daily・monthly・weekly のディレクトリにcron書式で書いたファイルを放り込めば自動で実行される

cronデーモンがcrontabの通りに実行する



ログローテを行うlogrotate.confは日毎のログもあるかもしれないので
 /etc/cron.daily
各ログごとの設定はlogrotate.conf、logrotated.dの内容が優先される


ログローテの詳細
logrotate.conf

weekly
rotate 4
create
#compress
include /etc/logrotate.d
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}

特別問題が無ければ、rotateの保存数のみ変更でもOK
全てのログを毎週ローテして4世代保存
logrotated.dを優先するので、logrotate.confの編集はこの程度



各ログファイル別の設定
logrotated.d/apache2

各ログ別に設定があるので、自分で増やしたバーチャルホストのログファイルを追記
今回に関しては、全て同一設定なのでまとめて記述

/var/log/apache2/access_log /var/log/apache2/001access_log /var/log/apache2/001error_log /var/log/apache2/error_log {
missingok
monthly
rotate 7
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/apache2.pid 2>/dev/null` 2> /dev/null || true
endscript
}

※今回始めて気がついたが、Vine4.2では endscript のあとに monthly と記述してあった。その為に毎週ローテーションされていたのか?
また、ログの指定には /var/log/apache2/*log と記述してあった。これでは全てのログに適用されてしまう。必要であれば個別に指定



cron.dailyに放り込んであるlogrotate.confによりログローテが毎日実行されログローテされるが
基本的にlogrotate.confに記述してある通り毎週の実行。
尚且つ、logrotated.dにより個別に設定したものが優先される


続いてアクセス解析
cron.dailyにより毎日解析
とりあえず近いログが見たいので
access_log、001access_log のみ解析に通す
アクセスログとエラーログのファイル自体は毎月ローテーションされ、7世代管理される
CRONにより月毎にローテーションされたログファイル
access_log.1 001access_log.1 001error_log.1 error_log.1 を解析
これが先月1ヶ月の解析となる


以上で意図した通りのローテと解析、ログファイルの蓄積が出来るハズ
解析のCRONはまた後で



参考にしたサイト
http://park15.wakwak.com/~unixlife/linux/sys-logrotate.html
http://www.atmarkit.co.jp/flinux/rensai/root03/root03c.html
http://httpd.apache.org/docs/2.0/ja/logs.html