logrotateを使用してログを圧縮およびクリーンアップするが、ローテーションしない方法


10

バルブ(org.apache.catalina.valves.FastCommonAccessLogValve)を介してアクセスログを作成するTomcatサーバーがあります。このバルブは、アクセスログファイルのローテーションを処理しますが、しばらくした後の圧縮や削除は行いません。

現時点ではfind [...] -mtime +30 [...]、ログの圧縮と削除に使用するcronジョブがあります。私はむしろlogrotateを使用したいので、ログローテーションはすべてのログの中央の場所にあります。Tomcatのためだけに別のソリューションを用意するのは好きではありません。

logrotateのドキュメントを読みましたが、まだ少し迷っています。ログファイルを圧縮してクリーンアップするためだけにlogrotateを使用できますか?どうすればいいですか?

または、問題を回避すると、ログファイルを圧縮してクリーンアップするTomcatアクセスログバルブがありますか?

お手伝いありがとうございます !


ところで:FastCommonAccessLogValveは6.0で廃止されtomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/valves/...
Janning

回答:


17

私が見たかなり単純なものはこのように動作します。

/etc/logrotate.dにtomcatと呼ばれる次のファイルを作成します:-

/var/log/tomcat/catalina.out { 
  copytruncate 
  daily 
  rotate 7 
  compress 
  missingok 
}

この実行の毎日は圧縮はファイルをES、および7日の価値を保つ(7を回転させます)。copytruncateは、元のファイルをコピーしてから切り捨てるため、tomcatを再起動する必要がないことを意味します。そこになければ、ok欠落してもエラーにはなりません。

rotatable = falseを追加すると、access.logバルブを回転しないように変更できます:-

<Valve className="org.apache.catalina.valves.AccessLogValve
     ...
     ...
     suffix="log" rotatable="false" />

1
私の問題は、catalina.outとは異なり、アクセスログが既にローテーションされていることです。
ギヨーム

3
わかりました。Valve引数でrotatable = falseを設定すると、アクセスログのローテーションを無効にできます。これを含めるように変更されました。
Decado

2

TimPのスクリプトの変更-非常に古いファイルの削除、古い圧縮ファイルのスキャンの追加。

#!/bin/bash
#
# TPP 2013-02-21
# RJK 2014-08-14
#
# Tomcat apps use a variety of loggers, mostly log4j.
# These rotate, conflicting with logrotate, the unix log rotation system.
#
# Some files eg catalina.out
# are rotated to a backup containing a date eg catalina.2013-01-06.log
# which can then be compressed with bz2 to catalina.2013-01-06.log.bz2
# or removed if older than a given number of days(MTIME).
#
cd /var/log/tomcat6
# 2013-02-21
DATE=`date --rfc-3339=date`
YEAR=`date +%Y`
MILLENIUM=20
# 2014-08-14
MTIME=14
# 2014-08-14
#for f in $(find catalina* |grep -v bz2 |grep -v '$DATE' |grep $YEAR)
for f in $(find catalina* |grep -v bz2 |grep -v '$DATE' |grep $MILLENIUM)
do
 # 2014-08-14
 if test `find $f -mtime +$MTIME`
 then
   echo "rm -f $f"
   rm -f $f
 else
   echo "bzip2 $f"
   bzip2 $f
 fi
done
# However others are active whilst containing a date
# so we will find all and not compress the most recent
for l in 'localhost*' 'opt-db*' 'opt*' 'host-manager*' 'manager*'
do
 export previous=
 for f in $(find $l |grep -v bz2 |sort)
 do
  if [ "${previous}" != "" ]
  then
    echo "bzip2 ${previous}"
    bzip2 $previous
  fi
  export previous=$f
 done
done
# 2014-08-14
for f in $(find *bz2)
do
 if test `find $f -mtime +$MTIME`
 then
   echo "rm -f $f"
   rm -f $f
 fi
done
exit 0 

1

Tomcatの設定を変更したくなかったので、回転したファイルを圧縮するスクリプトを作成しました

#!/ bin / bash
#
#TPP 2013-02-21
#
#Tomcatアプリは、主にlog4jなどのさまざまなロガーを使用します。
#これらは循環し、logrotate、UNIXログ循環システムと競合します。 
#
#catalina.outなどのいくつかのファイル
#日付を含むバックアップにローテーションされます。例:catalina.2013-01-06.log
#その後、bz2でcatalina.2013-01-06.log.bz2に圧縮できます
#

cd / var / log / tomcat6

#2013-02-21
DATE = `日付--rfc-3339 =日付`
YEAR = `日付+%Y`

$のfの場合(catalina *を検索| grep -v bz2 | grep -v '$ DATE' | grep $ YEAR)
行う
 エコー "bzip2 $ f" 
 bzip2 $ f
終わった

#しかし、他の人は日付を含んでいる間アクティブです
#すべてを検索し、最新のものは圧縮しない
l for 'localhost *' 'opt-db *' 'opt *' 'host-manager *' 'manager *'
行う
 前をエクスポート=
 $のfの場合($ lを検索| grep -v bz2 | sort)
 行う
  if ["$ {previous}"!= ""]
  その後
    echo "bzip2 $ {previous}" 
    bzip2 $ previous
  fi
  以前のエクスポート= $ f
 終わった
終わった

出口0


1

驚くほど簡単です。特に回転させたいファイルをlogrotateに伝えてください。 nocreate古いファイルを移動した後に空のファイルを再作成しないようにlogrotateに指示します(ファイルをサブフォルダーにローテーションしている場合)。

/var/log/tomcat/catalina.out.* { 
  daily 
  nocreate
  compress 
  missingok 
}

0

local_access_log.YYYY-MM-DD.txt圧縮の場合、この投稿を見て、このスクリプトを書きました:-

#!/bin/bash
#
# If Tomcat uses server.xml config to rotate localhost_access_log,
# the daily rotated logs will need compressing and old ones deleted to stop filling
# the log partiton. Cannot use the system logrotate command as conficts with tomcat rotate
# therefore run this script in a daily cronjob
#
# localhost_access_log.2015-09-03.txt
#
# Add this script in /etc/cron.daily/ owned by root
#

CATALINA_BASE=`ps aux | grep catalina.base | awk -F'catalina.base\=' '{print $2}' | awk '{print $1}'`

if [ ! $CATALINA_BASE ]
then
    if [ -r /var/lib/tomcat8 ]
    then
        CATALINA_BASE=/var/lib/tomcat8
    else
        echo "Error: cannot find CATALINA_BASE"
        exit 1
    fi
fi

cd ${CATALINA_BASE}/logs

if [ $? -ne 0 ]
then
    echo "Error, cannot cd to logs directory, quitting...."
    exit 1
fi

# today's date (not to be gzipped)
DATE=`date --rfc-3339=date`
# number of days to keep
MTIME=28

# Compress all previous days uncompressed logs
for log in `ls localhost_access_log* | grep -v bz2 | grep -v $DATE`
do
    bzip2 $log
done

# delete old logs
find . -name "*.bz2" -mtime +$MTIME -exec rm {} \;

exit 0

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.