Günlükler logrotate ile nasıl sıkıştırılır ve temizlenir ancak döndürülmez


10

Bir vana ( org.apache.catalina.valves.FastCommonAccessLogValve ) üzerinden erişim günlükleri oluşturan bir Tomcat sunucum var . Bu vana erişim günlüğü dosyasının döndürülmesine özen gösterir, ancak bir süre sonra sıkıştırılmaz veya silinmez.

Şimdilik, find [...] -mtime +30 [...]günlükleri sıkıştırmak ve silmek için kullanılan bir cron işim var . Logrotate kullanmayı tercih ederim, böylece günlük rotasyonu tüm günlükler için merkezi bir yerde olur. Sadece Tomcat için ayrı bir çözüm bulmayı sevmiyorum.

Logrotate belgelerini okumaya çalıştım, ama yine de biraz kayboldum. Logrotate'i günlük dosyalarını sıkıştırmak ve temizlemek için kullanabilir miyim? Bunu nasıl yaparım?

Veya sorunu tersine çevirerek, günlük dosyalarını sıkıştıracak ve temizleyecek bir Tomcat erişim günlüğü valfi var mı?

Yardımın için teşekkürler !


BTW: FastCommonAccessLogValve 6.0 önerilmiyor tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/valves/...
Janning

Yanıtlar:


17

Gördüğüm oldukça basit biri böyle çalışıyor.

/Etc/logrotate.d dosyasında tomcat adlı ve aşağıdakileri içeren bir dosya oluşturun: -

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

Bu çalışır günlük , kompres dosyasını es ve 7 gün değerinde tutar ( 7 döndürmek ). copytruncate , tomcat'i yeniden başlatmaya gerek kalmaması için orijinal dosyayı kopyalayıp keseceği anlamına gelir. eksik tamam yoksa orada hata olmaz.

Access.log Valfi döndürülebilir = yanlış eklenerek döndürülmeyecek şekilde değiştirilebilir: -

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

1
Benim sorunum catalina.out aksine, benim erişim günlüğü zaten döndürülmüş olmasıdır.
Guillaume

3
Tamam, Erişim günlüğü dönüşü, Valve değişkenlerinde rotatable = false ayarlanarak devre dışı bırakılabilir. Buna dahil edileceği bildirildi.
Decado

2

Değiştirilmiş TimP komut dosyası - Çok eski dosyaları silmek eklendi, eski sıkıştırılmış dosyaları taramak eklendi.

#!/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 yapılandırmasını değiştirmek istemedim, bu yüzden döndürülen dosyaları sıkıştıran bir komut dosyası oluşturdum

#! / Bin / bash
#
# TPP 2013-02-21
#
# Tomcat uygulamaları çoğunlukla log4j olmak üzere çeşitli kaydediciler kullanır.
# Bunlar döner, logrotate ile çakışır, unix log döndürme sistemi. 
#
# Bazı dosyalar örneğin catalina.out
#, tarih içeren bir yedeklemeye döndürülür, örneğin catalina.2013-01-06.log
# daha sonra bz2 ile catalina'ya sıkıştırılabilir. 2013-01-06.log.bz2
#

cd / var / log / tomcat6

# 2013-02-21
TARİH = `tarih --rfc-3339 = tarih`
YEAR = `tarih +% Y`

f için $ (catalina'yı bulun * | grep -v bz2 | grep -v '$ DATE' | grep $ YEAR)
yapmak
 echo "bzip2 $ f" 
 bzip2 $ f
tamam

# Ancak diğerleri bir tarih içerirken etkin
# bu yüzden hepsini bulacağız ve en sonları sıkıştırmayacağız
'localhost *' 'opt-db *' 'opt *' 'ana bilgisayar yöneticisi *' 'yönetici *' deki l için
yapmak
 önce dışa aktar =
 f için dolar ($ l | grep -v bz2 | sort şeklinde bulun)
 yapmak
  eğer ["$ {previous}"! = ""]
  sonra
    echo "bzip2 $ {previous}" 
    bzip2 $ önceki
  fi
  önce dışa aktar = $ f
 tamam
tamam

çıkış 0


1

Şaşırtıcı derecede basit. Logrotate'e, özellikle hangi dosyaları döndürmek istediğinizi söyleyin. nocreatelogrotate'e eskisini taşıdıktan sonra boş bir dosya oluşturmamasını söyler (dosyaları bir alt klasöre döndürüyorsanız).

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

0

Local_access_log.YYYY-AA-DD.txt sıkıştırma için bu yazıyı gördükten sonra bu komut dosyasını yazdım: -

#!/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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.