2013年10月1日火曜日

【Tomcat】catalina.outのログローテーションを設定する方法

■環境
CentOS 6.3
Apache Tomcat/7.0.32
※chefのcookbooksにてtomcatインストールした場合の設定方法となります
http://kakakikikeke.blogspot.jp/2013/05/opscodecookbooks.html

■概要
tomcatの起動や停止に関するログを記録するcatalina.outですが、
こいつはtomcatのconf/logging.propertiesというログローテーションを定義するプロパティで
ちゃんと日次でローテーションしてくれるはずなのですが、tomcatがずっと起動している場合
ローテーションで日付付きのファイル自体は作成させるのですが、ログ自体はずっとcatalina.outというログファイルに吐き続けるため
catalina.outがどんどん肥大化していってしまいます

そんな場合にちゃんとローテーションしたタイミングでcatalina.outも切り替えてくれる方法を記載します
他にも方法はあると思いますので参考程度に見て下さい

■設定方法
vim /etc/init.d/tomcat7

以下を編集
$SU "$TOMCAT_USER" -c "touch $CATALINA_OUT"
↓
#$SU "$TOMCAT_USER" -c "touch $CATALINA_OUT"

org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 &
echo \$! > "$CATALINA_PID"
↓
org.apache.catalina.startup.Bootstrap "$@" start >/dev/null 2>&1 &
echo \$! > "$CATALINA_PID" | /usr/sbin/rotatelogs $CATALINA_BASE/logs/catalina.%Y-%m-%d.log 86400 540

service tomcat7 restart
サービスを再起動

lsof | grep catalina.out
catalina.outを掴んでいるプロセスがいないことを確認する

rm catalina.out
df -h
ディスク容量が大きくなっていることを確認する
ここでディスク容量が減らなかったりするとまだcatalina.outをtomcatが掴んでしまっており見た目は削除されたファイルですが、
実は裏ではcatalina.outにログを吐き続けているためどんどん肥大化しディスクサイズを逼迫していきます

rotetelogsはインストールされている環境に合わせてパスを変更してください
引数に86400を指定することで毎日0時にローテーションするようになります

また今回はchefでインストールしたtomcatの場合を紹介しましたが他の方法でインストールした場合もほぼ同様に設定可能です
/usr/local/tomcat/bin/catalina.sh
等の起動スクリプトに同じような記述があるのでそこを編集すれば問題ありません

0 件のコメント:

コメントを投稿