Come comprimere e pulire i log con logrotate ma non ruotarli


10

Ho un server Tomcat che crea registri di accesso tramite una valvola ( org.apache.catalina.valves.FastCommonAccessLogValve ). Questa valvola si occupa di ruotare il file di registro di accesso, ma non di comprimerli o eliminarli dopo qualche tempo.

Per il momento, ho un lavoro cron che usa find [...] -mtime +30 [...]per comprimere ed eliminare i log. Preferirei usare logrotate, in modo che la rotazione dei registri sia in una posizione centralizzata per tutti i registri. Non mi piace avere una soluzione separata solo per Tomcat.

Ho provato a leggere la documentazione di logrotate, ma sono ancora un po 'perso. Posso usare logrotate solo per comprimere e pulire i file di registro? Come potrei farlo ?

O risolvendo il problema, esiste una valvola di registro di accesso Tomcat che comprime e pulisce i file di registro?

Grazie per il tuo aiuto !


A proposito: FastCommonAccessLogValve è obsoleto in 6.0 tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/valves/…
Janning

Risposte:


17

Abbastanza semplice quello che ho visto funziona così.

Creare un file in /etc/logrotate.d chiamato tomcat contenente quanto segue: -

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

Funziona quotidianamente , comprime il file e mantiene 7 giorni ( ruota 7 ). copytruncate significa che verrà copiato quindi troncato il file originale in modo che non sia necessario riavviare tomcat. manca ok non si sbaglia se non c'è.

La valvola access.log può essere modificata per non ruotare aggiungendo rotatable = false: -

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

1
Il mio problema è che a differenza di catalina.out, il mio registro di accesso è già ruotato.
Guillaume,

3
Va bene, la rotazione del registro di accesso può essere disabilitata impostando rotatable = false negli argomenti Valve. Risposta per includere questo.
Decado,

2

Script di TimP modificato - Aggiunta eliminazione di file molto vecchi, aggiunta scansione per vecchi file compressi.

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

Non volevo cambiare la configurazione di Tomcat, quindi ho creato uno script che comprime i file ruotati

#! / Bin / bash
#
# TPP 21/02/2013
#
# Le app Tomcat utilizzano una varietà di logger, principalmente log4j.
# Questi ruotano, in conflitto con logrotate, il sistema di rotazione del registro unix. 
#
# Alcuni file, ad esempio catalina.out
# vengono ruotati in un backup contenente una data, ad esempio catalina.2013-01-06.log
# che può quindi essere compresso con bz2 in catalina.2013-01-06.log.bz2
#

cd / var / log / tomcat6

21/02/2013
DATE = `date --rfc-3339 = date`
ANNO = `data +% Y`

per f in $ (trova catalina * | grep -v bz2 | grep -v '$ DATE' | grep $ YEAR)
fare
 echo "bzip2 $ f" 
 bzip2 $ f
fatto

# Tuttavia, altri sono attivi mentre contengono una data
# quindi troveremo tutto e non comprimeremo il più recente
per l in 'localhost *' 'opt-db *' 'opt *' 'host-manager *' 'manager *'
fare
 esporta precedente =
 per f in $ (trova $ l | grep -v bz2 | ordina)
 fare
  if ["$ {previous}"! = ""]
  poi
    echo "bzip2 $ {precedente}" 
    bzip2 $ precedente
  fi
  esportazione precedente = $ f
 fatto
fatto

uscita 0


1

È sorprendentemente semplice. Basta dire a logrotate quali file si desidera ruotare in modo specifico. nocreatedice a logrotate di non ricreare un file vuoto dopo aver spostato quello vecchio (se si stanno ruotando i file in una sottocartella).

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

0

Per la compressione local_access_log.YYYY-MM-DD.txt ho scritto questo script dopo aver visto questo post: -

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.