Come configurare Logrotate su Linux (per evitare che il server esaurisca lo spazio)

0
278

La maggior parte dei servizi su Linux genererà file di registro, solitamente archiviati in /var/log/. Questi sono solo semplici file di testo, ma possono diventare molto, molto grandi —al punto in cui potresti eseguire il tuo server senza spazio.

Cosa fa Logrotate?

Logrotate aiuta a gestire i file di registro e impedisce loro di accumularsi. Archivierà automaticamente il file di registro corrente, ne creerà uno nuovo vuoto ed eliminerà gli archivi veramente vecchi dopo averlo ruotato alcune volte. Il tempo predefinito potrebbe essere impostato su un valore molto alto (nginx è predefinito su un anno di log), quindi potresti riscontrare problemi se non modifichi i file di configurazione.

La dimensione dei file varierà per servizio e dovrai configurare logrotate di conseguenza. Se vuoi scoprire quanto spazio occupa ogni servizio con i log, puoi utilizzare il comando du :

du -h /var/log/| sort -hr

Quasi tutti i file di registro saranno in /var/log/, quindi du ammonterà a tutti i file di registro e li visualizzerà in un bell'elenco (per gentile concessione di sort -hr per ‘leggibile dall'uomo’):< /p>

Questo mostra solo le directory, quindi avrai bisogno per utilizzare ls -sh per trovare le dimensioni dei singoli file.

Annuncio

Di solito, cose come i server web (apache2, nginx, ecc.) e altre app che ricevono molte interazioni genereranno molti file di registro, anche se la dimensione esatta dipenderà dalla quantità di dati che stanno effettivamente registrando sul disco .

Installazione di Logrotate (se non lo hai già)

Per impostazione predefinita, probabilmente lo farai’ Non è necessario eseguire alcuna operazione per configurare logrotate, poiché è installato di default su molte distribuzioni e i servizi che generano molti file di registro (nginx, apache, ecc.) di solito hanno una configurazione di logrotate preconfigurata.

< p>Puoi controllare se logrotate è installato con:

which logrotate

Oppure installalo dal gestore di pacchetti della tua distribuzione se non lo è. Per i sistemi basati su Debian come Ubuntu, sarebbe:

sudo apt-get install logrotate

Logrotate installerà automaticamente la sua configurazione globale predefinita, ma se l'hai installata dopo aver installato il tuo server web, potrebbe essere necessario reinstallare il server web se la configurazione predefinita per quel servizio non viene generata.

Come funziona Logrotate

Mentre logrotate sarà preconfigurato per servizi popolari come nginx e apache2, potresti voler impostare la configurazione manualmente o modificare la configurazione predefinita.

La configurazione globale per logrotate è memorizzata in /etc/logrotate.conf, ma ne sovrascriverai gran parte con i file di configurazione per app, archiviati nella directory /etc/logrotate.d/. Diamo un'occhiata alla configurazione predefinita di nginx in /etc/logrotate.d/nginx, che puoi utilizzare come modello per aggiungere nuove app a logrotate:

/var/log/nginx/*.log { settimanale missingok rotate 52 compress delaycompress notifempty create 0640 www-data adm sharedscripts prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; quindi run-parts /etc/logrotate.d/httpd-prerotate; fi endscript postrotate invoke-rc.d nginx rotate >/dev/null 2>&1 endscript } Annuncio

La prima riga avvia il blocco e indica a logrotate quali file cercare. Il carattere jolly *.log corrisponderà a tutti i file che terminano con l'estensione .log nella cartella di log di nginx. Puoi anche specificare più directory qui per includerle con la stessa configurazione.

settimanale ruoterà i log una volta alla settimana. Se desideri ruotarli in base alle dimensioni, puoi invece utilizzare la dimensione 25M per ruotarli una volta raggiunto un certo limite, 25 megabyte in questo esempio.

missingok  impedirà a logrotate di generare errori se un file di registro viene eliminato da qualcosa di diverso da logrotate.

ruota 52 manterrà 52 diversi file di registro. In questo caso, poiché ruoterà una volta alla settimana, logrotate manterrà un intero anno di file di registro prima di eliminare quelli vecchi. Puoi cambiarlo per ruotare di 4 per conservare solo un mese di file di log.

compress comprimerà i vecchi file di log per risparmiare spazio. Ciò causa problemi con alcune app che continuano a scrivere nel file di log mentre logrotate sta ancora facendo il suo lavoro, quindi puoi aggiungere il flag delaycompress per lasciare un buffer di un vecchio file di log prima della compressione.

notifempty è un altro flag di controllo per assicurarsi che logrotate sia in esecuzione solo se vengono scritti nuovi file di registro. Il flag crea crea questi nuovi file di registro, con autorizzazioni specifiche. La sintassi è create [mode] [owner] [group].

Advertisement

Devi assicurarti che corrispondano a qualunque cosa siano configurati i tuoi file di log correnti, cosa che puoi fare con ls -la:

Tieni presente che dovrai convertire la modalità in ottale, quindi -rw-r—– diventa 0640. Il proprietario di nginx qui è www-data e il gruppo è adm.

sharedscripts specifica che gli hook prerotatepostrotate verranno eseguiti solo una volta per rotazione e non una volta per ogni file di log ruotato. Questi hook sono script che puoi chiamare prima e dopo la rotazione. Per impostazione predefinita, questi eseguiranno alcuni script per configurare nginx per la commutazione dei file di registro. Se il servizio che stai configurando non può caricare nuovi file di registro, ti consigliamo di interromperlo e riavviarlo in questi hook. Tuttavia, l'hook non deve interagire con il servizio; ad esempio, puoi utilizzare l'hook prerotate per eseguire il backup dei file di log su AWS S3 con s3cmd prima che vengano eliminati.

Logrotate gestirà l'esecuzione da solo, quindi non dovrai preoccuparti di avviare il servizio all'avvio o la configurazione di un cron job. Basta inserire i file di configurazione per ogni app in /etc/logrotate.d/e non preoccuparti mai più dei log.