GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come impostare la rotazione del registro con Logrotate su Ubuntu 18.04/20.04

I file di registro hanno lo scopo di conservare le informazioni sulle attività del sistema per un periodo di tempo ragionevole, ma i daemon di registrazione del sistema non forniscono alcun mezzo per controllare la dimensione dei file di registro. Lasciati deselezionati, i file di registro possono, quindi, crescere fino a consumare tutto lo spazio di partizione disponibile su cui risiedono. Per evitare che i file di registro riempiano completamente il sistema, i messaggi di registro possono essere ruotati, il che significa che quando viene raggiunta una determinata soglia, il vecchio file di registro viene chiuso e viene aperto un nuovo file di registro.

Qui ti mostrerò come ruotare i file di registro con logrotate su Ubuntu 18.04/20.04.

Cos'è la rotazione dei log?

La rotazione del registro è un processo che risolve questi problemi archiviando periodicamente il file di registro corrente e avviandone uno nuovo. Rinomina e facoltativamente comprime i file di registro correnti, elimina i vecchi file di registro e forza il sistema di registrazione a iniziare a utilizzare i nuovi file di registro. Di solito viene eseguito automaticamente tramite cron utilità. Con la rotazione del registro, puoi

  • avvia un nuovo file di registro in base a una pianificazione, ad esempio giornaliera, settimanale o mensile
  • comprime i vecchi file di registro per risparmiare spazio su disco
  • Elimina i vecchi archivi in ​​modo da conservare solo un certo numero di vecchi registri.
  • rinomina i vecchi file di registro con un timbro della data in modo da sapere dove cercare i registri più vecchi.
  • esegui comandi prima o dopo la rotazione di un set di log.

Puoi vedere la rotazione del registro come il processo che rinomina un file di registro corrente e imposta un nuovo file di registro per le nuove voci di registro. Quando un file di registro viene ruotato, il vecchio file di registro viene in genere copiato in un file che contiene la data di rotazione.

1) I file di configurazione di logrotate

Su Ubuntu 18.04, i file di configurazione di logrotate sono /etc/logrotate.conf , insieme a tutti i file in /etc/logrotate.d Il principale logrotate.conf file specifica le impostazioni predefinite e i file di sistema da ruotare. Il file contiene alcune opzioni che sono ben spiegate dai commenti.

cat /etc/logrotate.conf 
# see "man logrotate" for details
# rotate log files weekly
weekly

# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

# system-specific logs may be configured here

Le principali opzioni di logrotate sono:

  • settimanale: ruota i file di registro una volta alla settimana
  • su root syslog: archivierà i log utilizzando l'utente specifico (root) e il gruppo (syslog) per prevenire problemi con le autorizzazioni
  • ruota 4: assicura che vengano salvate quattro versioni precedenti del file. Ruota un determinato registro quattro volte prima di eliminarlo, in modo da mantenere online quattro settimane di registri.
  • crea: Il vecchio file viene salvato con un nuovo nome e viene creato un nuovo file
  • comprimi: compress fa sì che logrotate comprima i file di registro per risparmiare spazio. Questo viene fatto usando gzip per impostazione predefinita, ma puoi specificare un altro programma
  • include: Questa importante opzione assicura che il contenuto della directory /etc/logrotate.d è incluso. In questa directory esistono file che specificano come gestire alcuni singoli file di registro.

Ogni file in /etc/logrotate.d viene utilizzato per aggiungere impostazioni aggiuntive o sovrascrivere le impostazioni predefinite per file specifici. La cartella contiene anche la configurazione logrotate di tutti i pacchetti installati che richiedono la rotazione dei log

# ls -l /etc/logrotate.d
total 40
-rw-r--r-- 1 root root 120 Nov 2 2017 alternatives
-rw-r--r-- 1 root root 442 Oct 23 2017 apache2
-rw-r--r-- 1 root root 126 Nov 20 16:39 apport
-rw-r--r-- 1 root root 173 Apr 20 10:08 apt
-rw-r--r-- 1 root root 112 Nov 2 2017 dpkg
-rw-r--r-- 1 root root 146 Apr 17 17:35 lxd
-rw-r--r-- 1 root root 845 Jan 12 10:57 mysql-server
-rw-r--r-- 1 root root 501 Jan 14 16:19 rsyslog
-rw-r--r-- 1 root root 178 Aug 15 2017 ufw
-rw-r--r-- 1 root root 235 Apr 17 14:53 unattended-upgrades

Puoi vedere ad esempio la configurazione di logrotate per il server web apache

# cat /etc/logrotate.d/apache2 
/var/log/apache2/*.log {
	daily
	missingok
	rotate 14
	compress
	delaycompress
	notifempty
	create 640 root adm
	sharedscripts
	postrotate
                if invoke-rc.d apache2 status > /dev/null 2>&1; then \
                    invoke-rc.d apache2 reload > /dev/null 2>&1; \
                fi;
	endscript
	prerotate
		if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
			run-parts /etc/logrotate.d/httpd-prerotate; \
		fi; \
	endscript
}

Logrotate contiene alcune opzioni aggiuntive che puoi vedere sopra:

  • ogni giorno: ruota il giorno di accesso
  • manca bene: Non generare un errore se manca il registro
  • compressione del ritardo: Non comprimere il file finché non è già stato ruotato. Questo serve a prevenire la corruzione se il demone non chiude immediatamente il file di registro.
  • notifica vuoto: Non ruotare il file di registro quando è vuoto
  • crea 640 root adm: questo creerà nuovi file di registro con i permessi impostati, il proprietario e il gruppo
  • script condivisi: Se il carattere jolly corrisponde a più file, esegui gli script una volta per tutti i file
  • postrotato/finale: Specifica alcuni comandi o script che devono essere eseguiti fino a endscript parola chiave, dopo che i log sono stati ruotati.
  • preruotare/terminare lo script: come postrotate/endscript , specifica i comandi o gli script che devono essere eseguiti prima che inizi la rotazione del registro.

Puoi avere alcune informazioni sulle opzioni aggiuntive usando il manuale

man logrotate

2) Configura la rotazione dei log con logrotate

Il comando logrotate in genere rinomina (o ruota) i file di registro su base ciclica; il file di registro verrà rinominato per contenere un'estensione numerica o di data e verrà creato un nuovo file di registro per accettare le informazioni di sistema. Se logrotate è configurato per conservare solo due copie dei vecchi file di registro, dopo due rotazioni di registro, il file di registro più vecchio verrà automaticamente rimosso.

Normalmente il comando logrotate è installato di default su Ubuntu 18.04 e puoi controllare la versione come di seguito

# logrotate --version
logrotate 3.11.0

Per impostazione predefinita, logrotate viene eseguito quotidianamente eseguendo lo script della shell /etc/cron.daily/logrotate Vedrai che gli altri file cron non contengono alcun file logrotate

cat /etc/cron.daily/logrotate 
#!/bin/sh

# Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head -1 status > status.clean
sed 's/"//g' status | while read logfile date
do
    [ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean status

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

Puoi vedere cosa farebbe la configurazione logrotate dell'applicazione se fosse eseguita con -d parametro del comando

# logrotate -d /etc/logrotate.d/mysql-server 
reading config file /etc/logrotate.d/mysql-server
Reading state from file: /var/lib/logrotate/status
Allocating hash table for state file, size 64 entries

Handling 1 logs

rotating pattern: /var/log/mysql.log /var/log/mysql/*log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/mysql.log
error: skipping "/var/log/mysql.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
Creating new state
considering log /var/log/mysql/error.log
Creating new state
  Now: 2018-05-22 06:02
  Last rotated at 2018-05-22 06:00
  log does not need rotating (log has been already rotated)

Puoi configurare la rotazione dei log come utente root e come utente non root.

a) Configurare la registrazione per i pacchetti del server installati

I file di configurazione di Logrotate come utente root vengono creati in /etc/logrotate.d cartella su base giornaliera. Ad esempio, configureremo la rotazione del registro per il supervisore dello strumento di monitoraggio. Per prima cosa creeremo il file di rotazione dei log su cui indicheremo il file di configurazione che memorizzerà i log

# vim /etc/logrotate.d/supervisor
/var/log/supervisor/superviz.log {
        daily
        create 0640 root root
        missingok
        dateext
        rotate 3
        size=1M
        notifempty
        sharedscripts
        mail [email protected]
}

Spieghiamo alcune opzioni:

  • dataext: utilizza la data come estensione per le vecchie versioni dei file di registro
  • dimensione: registra i file che crescono più grandi della dimensione specificata qui
  • posta: per istruire logrotate a inviare via e-mail il suo contenuto all'indirizzo specificato prima di sovrascriverlo. Devi avere un server di posta funzionante

Ora possiamo testare la configurazione chiamando logrotate in modalità debug che punta alla configurazione principale contenente la nostra cartella. Il comando mostrerà alcune informazioni ma ordineremo solo quelle relative alla nostra configurazione

# logrotate /etc/logrotate.conf --debug
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file alternatives
reading config file apache2
reading config file apport
reading config file apt
reading config file dpkg
reading config file lxd
reading config file mysql-server
reading config file rsyslog
reading config file supervisor
reading config file ufw
reading config file unattended-upgrades
Reading state from file: /var/lib/logrotate/status
...
...
rotating pattern: /var/log/supervisor/supervisord.log  1048576 bytes (3 rotations)
empty log files are not rotated, old logs mailed to [email protected]
switching euid to 0 and egid to 106
considering log /var/log/supervisor/supervisord.log
Creating new state
  Now: 2018-05-22 08:16
  Last rotated at 2018-05-22 08:00
  log does not need rotating (log size is below the 'size' threshold)
switching euid to 0 and egid to 0
....
....

Puoi vedere che la nostra configurazione non ha ancora bisogno di essere ruotata. Questo perché la dimensione della condizione non è stata ancora verificata. Una volta che questo comando viene eseguito senza errori, significa che la configurazione sembra buona.

b) Imposta la rotazione dei log per l'applicazione personalizzata

È possibile configurare la rotazione dei registri per le applicazioni personalizzate che generano registri ed eseguono come utente non root. Per impostazione predefinita, logrotate viene eseguito su base giornaliera, quindi, se dobbiamo eseguire la nostra applicazione su base oraria, creeremo la configurazione logrotate al di fuori della cartella predefinita.

Facciamo un esempio configurando la rotazione del registro per discord. Creeremo una cartella personale che conterrà il file di configurazione principale di logrotate e una cartella per i file di registro. Questa applicazione non comprende la rotazione dei log, quindi logrotate lo gestirà utilizzando una copia e tronca l'implementazione

$ vim apps/logrotate.conf
/home/alain/apps/logs/discord.log {
        hourly
        copytruncate
        missingok
        dateext
        rotate 10
        compress
}

Abbiamo utilizzato nuove opzioni copytruncate che tronca il vecchio file di registro in posizione dopo aver creato una copia, invece di spostare il vecchio file e crearne uno nuovo. Ciò è utile per i servizi a cui non è possibile dire di chiudere i propri file di registro.

Possiamo testare la nostra configurazione, ma dobbiamo specificare un file di stato. Questo file registra ciò che logrotate ha visto e fatto l'ultima volta che è stato eseguito in modo che sappia cosa fare la prossima volta che viene eseguito. Nota che eseguiamo il comando come utente non root

$ logrotate /home/alain/apps/logrotate.conf --state /home/alain/apps/logrotate-state --verbose
reading config file /home/alain/apps/logrotate.conf
Reading state from file: /home/alain/apps/logrotate-state
Allocating hash table for state file, size 64 entries

Handling 1 logs

rotating pattern: /home/alain/apps/logs/discord.log  hourly (10 rotations)
empty log files are rotated, old logs are removed
considering log /home/alain/apps/logs/discord.log
Creating new state
  Now: 2018-05-22 10:09
  Last rotated at 2018-05-22 10:00
  log does not need rotating (log has been already rotated)

Se provi lo stesso comando dopo poche ore, puoi vedere alcune informazioni aggiuntive nell'output come le informazioni di troncamento e compressione

logrotate /home/alain/apps/logrotate.conf --state /home/alain/apps/logrotate-state --verbose
reading config file /home/alain/apps/logrotate.conf
Reading state from file: /home/alain/apps/logrotate-state
Allocating hash table for state file, size 64 entries
Creating new state

Handling 1 logs

rotating pattern: /home/alain/apps/logs/discord.log  hourly (10 rotations)
empty log files are rotated, old logs mailed to [email protected]
considering log /home/alain/apps/logs/discord.log
  Now: 2018-05-22 22:52
  Last rotated at 2018-05-22 10:23
  log needs rotating
rotating log /home/alain/apps/logs/discord.log, log->rotateCount is 10
dateext suffix '-2018052222'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
copying /home/alain/apps/logs/discord.log to /home/alain/apps/logs/discord.log-2018052222
truncating /home/alain/apps/logs/discord.log
compressing log with: /bin/gzip

È necessario mantenere che una configurazione logrotate è definita da un glob di file che corrisponde ai file di registro, seguito da una serie di istruzioni racchiuse tra parentesi graffe. Se un'opzione non è specificata nella stanza allegata al nome del file di log, l'opzione di livello superiore da /etc/logrotate.conf ha la priorità. I file di registro che sono stati ruotati non vengono archiviati da nessuna parte; sono appena andati, quindi dovresti pensare di prendere delle misure.

Leggi anche:

  • Come controllare i registri Cron su Ubuntu 18.04
  • lnav - Strumento per visualizzare e analizzare i file di registro dal terminale Linux
  • Come utilizzare il comando Systemd journalctl per gestire i registri

Ubuntu
  1. Come configurare il server FTP con VSFTPD su Ubuntu 20.04

  2. Come configurare il server FTP con VSFTPD su Ubuntu 18.04

  3. Come configurare il cluster Apache Tomcat con 3 nodi su Ubuntu

  4. Come configurare GlassFish 4.1 con JAVA 8 in Ubuntu 15.04

  5. Come configurare il failover IP con KeepAlived su Ubuntu e Debian

Come installare MongoDB in Ubuntu 22.04/20.04

Come installare PHP 8 su Ubuntu 22.04/20.04

Come installare AngularJS su Ubuntu 22.04/20.04

Come installare KDE Plasma 5.16 su Ubuntu 16.04/Ubuntu 18.04, 19.04

Come installare Logrotate su Ubuntu 16.04 LTS

Come impostare e gestire la rotazione dei registri utilizzando Logrotate in Linux