UIELinux oltre il Rubicone
(oltre i soliti luoghi comuni).  Linux User Group
------------
Diffondere il software libero è l'obiettivo. Lo strumento un sistema operativo libero.
Non più scuse, oggi possiamo e dobbiamo scegliere. Noi abbiamo scelto di metterci in gioco.

Chatta con noi su IRC. Rete Azzurra, canale #uielinux
>> UIELinux.org Blog Usare Linux Ubuntu professionale: Usiamo il Logrotate - 1^ parte

Ven

13

Giu

2008

Ubuntu professionale: Usiamo il Logrotate - 1^ parte PDF Stampa E-mail
Votazione Utente: / 2
ScarsoOttimo 
Scritto da Teo   

Oggi parliamo di un comando linux veramente molto utile (anche se aimè troppo poco conosciuto) che consente di controllare la dimensione dei files di log presenti nel nostro sistema.
Nella mia attività professionale di sistemista linux, ho dovuto spesso avere a che fare con applicazioni che scrivono in maniera estremamente invasiva, tonnellate di files di log senza alcuna politica di retention.
Gli sviluppatori più accurati prevedono la scrittura dei propri file di log, ma non sembrano preoccuparsi troppo di come controllarne le dimensioni.
La triste verità è che poi alla fine se ne accorge il sistemista quando ormai è troppo tardi e il file system dei server inesorabilente si è riempito.

L'utility di cui parlo è presente in quasi tutte le distribuzioni linux e si chiama logrotate.
A nostra insaputa, logrotate si preoccupa di tenere sotto controllo lo spazio su disco occupato dai tantissimi file di log che il sistema operativo produce.
Il logrotate, consente di salvaguardare l’occupazione dello spazio su disco eseguendo una rotazione dei file di log in maniera da evitare la loro crescita incontrollata.

E’ costituito da un eseguibile situato nella cartella /usr/sbin e da alcuni file di configurazione situati sotto /etc/logrotate.d che contengono le direttive per la rotazione dei log.


La schedulazione

Di default con la distribuzione di Ubuntu, il logrotate è già attivo e funzionante.
L’esecuzione del logrotate, viene attivata ogni giorno con il cron di sistema.

Nella cartella /etc sono presenti le seguenti directory:

  • cron.hourly
  • cron.daily
  • cron.weekly
  • cron.monthly
Qualunque script messo in queste directory viene eseguito rispettivamente:
  • Una volta ogni ora
  • Una volta ogni giorno
  • Una volta ogni settimana
  • Una volta ogni mese
Quando ? Se volete scoprirlo potete gurdarvi il file /etc/crontab, al cui interno troverete le definizioni degli orari impostati in ubuntu.

La cartella cron.daily contiene già di default l’esecuzione di uno script chiamato logrotate con questo contenuto:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
In pratica quindi, di default, il logrotate viene eseguito ogni giorno (alle ore 6.25 AM) con la configurazione definita nel file di configurazione /etc/logrotate.conf.

Ma cosa contiene questo file ? Eccolo:
# see "man logrotate" for details
# rotate log files weekly
weekly
    
# 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 0664 root utmp
      rotate 1
 }

Come potete vedere, il file è composto da una serie di direttive predefinite ma, cosa molto importante, contiene una istruzione per includere, nella sua configurazione una serie di impostazioni situate all'interno della directory /etc/logrotate.d.

In pratica in questo file sono scritte le impostazioni di carattere generale che pero’ possono essere sovrascritte da una eventuale configurazione presente in un qualunque file situato sotto /etc/logrotate.d.
Se si vuole aggiungere la rotazione di un proprio log giornaliero è quindi sufficiente creare un file nella directory /etc/logrotate.d con le apposite opzioni di configurazione


I comandi del logrotate

Il file di configurazione del logrotate ha una struttura abbastanza intuitiva.  L'elenco complessivo di istruzioni che potete utilizzare lo potete consultare digitando il comando
man logrotate
Ecco un esempio di file di configurazione:
compress

/oracle/app/plitvice/logs/oc4j_err.log {
      copytruncate
      rotate 5
      size=+50M
      notifempty
      missingok
      create 644 oracle oinstall
 }

 /oracle/app/plitvice/logs/oc4j_out.log {
      copytruncate
      rotate 5
      size=+50M
      notifempty
      missingok
      create 644 oracle oinstall
 }
Come si può osservare le direttive possono essere generali, oppure inserite all’interno di sezioni, corrispondenti al nome di un file da ruotare periodicamente.
Le direttive generali valgono fino a dove non vengono modificate; pertanto diventano direttive predefinite.
Nell’esempio appare inizialmente la direttiva compress che significa che i file di archiviazione devono essere compressi.
Piu’ avanti in una delle sezioni specifiche del file, troviamo la direttiva rotate 5 che determina la quantità di cicli, che in questo caso sono cinque.
Molto importante è la direttiva copytruncate che nel caso di file di log sempre attivi, fa in modo che non venga perso l’handle del file con un sua chiusura. In pratica, anziche spostare il file in uno comresso, copia il file, lo comprime e azzera quello esistente.
Se dovere ruotare un file di log di apache, è necessario utilizzare questa direttiva.

Ora che abbiamo tutte le informazioni su come è strutturato un file di configurazione del logrotate, possiamo andare a curiosare su cosa c'è nella nostra cartella /etc/logrotate.d.

Per esempio, nel file apache2 troviamo questo contenuto:
/var/log/apache2/*.log {
      weekly
      missingok
      rotate 52
      compress
      delaycompress
      notifempty
      create 640 root adm
      sharedscripts
      postrotate
          if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
              /etc/init.d/apache2 reload > /dev/null
          fi
      endscript
 }
Vediamo che vengono mantenuti 52 file e che vengono ruotati, indifferentemente dalla loro dimensione, con periodicità settimanale.
Notiamo inoltre che subito dopo la rotazione, viene eseguito uno script che effettua un reload della configurazione di apache.
Questo probabilmente è necessario perchè l'azzeramento del file di log crea problemi alla scrittura di ulteriori messaggi di errore di apache che ri risolvono con questa istruzione.


Le Direttive principali

Le direttive del logrotate sono davvero tante. E' possibile personalizzare la rotazione come si desidera.
Fra tutte alcune fra le più utilizzate sono le seguenti.

Criteri di rotazione

daily
Rotazione su base giornaliera;

weekly
Rotazione su base settimanale;

monthly
Rotazione su base mensile;

size <dimensione>
Rotazione basata sulla dimensione massima del file

notifempty
La rotazione nonviene eseguita se il file è vuoto

Compressione

compress
Una volta archiviato, il file di log viene compresso tramite gzip

compresscmd
E' possibile specificare un diverso programma per la compressione al posto del gzip

Gestione File

create  <mode> <owner> <group>:
Dopo la rotazione viene creato un nuovo file con il nome identico al precedente.
Con questo comando è possibile specificare, modalità di accesso, proprietario e gruppo

copy
Crea una copia del file di log e non modifica l'originale che non viene mai rimosso

copytruncate
Viene utilizzato nel caso in cui non sia possibile chiudere il file di log.
Viene archiviata parte del file di log mentre ne viene eseguita una copia

olddir <directory>
I file di log vengono spostati nella directory indicata prima di eseguire la rotazione

Configurazione

include <file o directory>
Legge il file oppure tutti i file della directory indicata ed applica le direttive incontrate all'interno di essi.

Operazioni Pre-log e Post-log

postrotate endscript
I comandi situati all'interno di queste due direttive vengono eseguiti dopo la rotazione

prerotate endscript
I comandi situati all'interno di queste due direttive vengono eseguiti prima della rotazione


Conclusioni

Come detto, con una sbirciatina al man, troverete il dettaglio delle varie opzioni che sono veramente tante e che consentono di proteggere il vostro file system nel migliore dei modi.
Il logrotate, se configurato correttamente, vi permette di tenere sotto controllo i vostri server creando un ambiente consistente la cui occupazione di spazio su disco non cresce a dismisura e, soprattutto,  in maniera incontrollata... come purtroppo accade su altri sistemi operativi.

Buona rotazione a tutti
Trackback(0)
Commenti (0)add comment

Scrivi commento

security image
Scrivi i caratteri mostrati


busy
 

Articoli Recenti in UIE Blog

Articoli più letti in UIE Blog

UIE Cloud


Liberalizzazione nel campo del Software per Personal Computer
 
 
© 2008  U.I.E. - UIELinux,oltre il Rubicone (anche oltre i soliti luoghi comuni)
Joomla! è un software libero rilasciato sotto licenza GNU/GPL
RocketTheme Joomla Templates