4.5 Congurazione
4.5.5 Gestione Log
Vediamo come tale congurazione di Syslog-NG imponga una struttura ben de-nita e prestabilita per l'insieme delle directory e dei le utilizzati, insieme che va a comporre un albero gerarchico (con radice /root/local/NAS/ ) di formato noto all'interno del le system di Linux.
4.5.5 Gestione Log
Il Web Server è stato poi impostato per eseguire un cron job notturno, il quale ha il compito di comprimere i log le chiusi, diciamo tutti i le relativi al giorno solare precedente al giorno corrente. Il cron job viene attualmente eseguito alle 2 di notte (2:00 AM), in una fascia in cui, molto probabilmente, la macchina Linux è impegnata soltanto in minima parte. Il cron job è stato impostato aggiungendo in coda al le /etc/crontab la seguente riga:
Blocco di codice 4.6
0 2 * * * root /opt/log_find.sh
Notiamo come lo script venga eseguito dall'utente root, in maniera tale da attribuire al programma tutti i permessi di cui necessita. Lo script log_nd.sh è stato scritto in Bash Shell, ed è composto da due soli comandi eettivi. Il primo di questi, ricerca e seleziona tutti i le contenuti nella base directory /root/loca-l/NAS/ in maniera ricorsiva (ossia anche nelle sottocartelle di quella cartella), che non siano già stati compressi (non aventi quindi già l'estensione .gz) e che non siano relativi al giorno corrente (in quanto è possibile Syslog ci stia ancora scrivendo all'interno). Il fullpath di questi le viene fornito come parametro in input allo script log_zip.sh.
Blocco di codice 4.7
/usr/bin/find /root/local/NAS/ ! -name "*.gz" -type f
! -path "*`/bin/date +%Y%m%d`" -exec /opt/log_zip.sh '{}' \;
Anche /opt/log_zip.sh è stato scritto in Bash Shell. Le operazioni eseguite da questo script sono principalmente le seguenti:
1. prende in input il fullpath di un le (passatogli da /opt/log_nd.sh), 2. copia il le in una directory temporanea,
3. esegue la compressione del le (NOTA: il nome del le rimane il medesimo, con l'aggiunta dell'estensione '.gz'),
4. ricopia il le compresso nella directory originaria,
5. copia il le compresso in una directory nel disco sso dello Storage Server (NAS01). Qualora non fosse presente la directory opportuna, lo script go-de go-dei permessi per crearla (anche qui per mezzo go-dei parametri $HOST, $YEAR, $MONTH, $FACILITY),
6. rimuove il le compresso dalla directory temporanea (qualora questa ope-razione non fosse già stata eseguita dal software di compressione) e rimuove il le originario dalla directory di provenienza.
Rimozione dei vecchi log le
Avendo a che fare con le di log di grandi dimensioni (no ad alcuni GB/giorno, circa 100 MB/giorno per il le compresso con GZip), si rende necessario denire delle policy di cancellazione dei log le di vecchia data; l'assenza di questo genere di regole comporterebbe infatti, nel lungo periodo, un esaurimento delle capacità di memorizzazione su disco rigido. Considerati i requisiti temporali relativi alla data retention da soddisfare per ottemperare alle norme di legge, è stato predi-sposto uno script Perl, richiamato alla ne del cron job descritto in precedenza, con il compito di controllare il timestamp di creazione di tutti i log salvati, ri-muovendo i le più vecchi di un anno. Quest'ultimo valore potrà essere variato in maniera molto semplice, a seconda degli interessi di analisi dei dati da parte dell'area tecnica di Telerete, ma tenendo sempre ben presenti i requisiti richiesti dalla legge in vigore.
Il secondo comando dello script /opt/log_nd.sh richiama semplicemente il programma Perl responsabile della rimozione dei vecchi logle.
Blocco di codice 4.8 perl /opt/clean.pl;
4.6 CONFIGURAZIONE Lo script analizza i timestamp relativi a tutti i le presenti nella base direc-tory impostata come parametro all'inizio del codice: attualmente il parametro $base_dir punta a /root/local/NAS/. Anche in questo caso la ricerca avviene ri-corsivamente su tutte le sottocartelle della base directory: il comando impiegato è ancora /usr/bin/find. Il timestamp che viene controllato è il decimo parametro ($stat[9]) dell'array restituito dal comando /usr/bin/stat($file); . Il valo-re, che rappresenta l'epoch time trascorso dall'ultima modica, viene attualmente confrontato con 31536000 secondi (corrispondenti a 365 giorni) per determinare se il le è da rimuovere oppure va lasciato dov'è; ovviamente tale valore potrà essere portato a 15811200 (6 mesi, secondo la data retention richiesta per legge) o ad un'altra cifra in qualsiasi momento. Lo script produce un le di log, /op-t/clean_le.log, che registra con modalità appending tutte le invocazioni dello script e tutte le rimozioni da esso operate.
Sistema di alerting
Durante la fase terminale del lavoro si é notata la necessitá di introdurre un si-stema che avverta gli amministratori in caso di problemi. Questo sisi-stema sfrutta un'utility integrata di Linux, ssntp, un sistema in grado di inviare mail sen-za la necessitá di un operatore, caratteristica fondamentale per essere sfruttata all'interno di uno script.
Queste mail vengono inviate dopo la compressione ad opera dello script pre-cedentemente descritto, viene compiuta una rapida verica delle dimensioni del logle compresso, nel caso in sui il log sia di dimensione minore alla media, verrá inviata la mail di alert agli amministratori, che avranno il compito di vericare le motivazioni di questo sotto-dimensionamento.
Verrá ora mostrato un estratto delo script che svolge questo compito: Blocco di codice 4.9
info=`du -lah | grep kern | grep ${ieri} | grep -e "^[[1-9][0-9]\|^[3-9]][0-9]M.*$"` if [ "${info[0]}" ]
then
echo "Ok,dimensioni file sono nella norma" else
cat /opt/mailheader /var/log/temp.log | ssmtp [email protected]