«

»

Apr 20

FailoverSyslogServer – come scrivere log in un server dedicato

Chi scrive software, di solito, usa tracciare i messaggi accessori generati dal software in varie situazioni (in fase di debug, in caso di errore, o di avvertimento o di semplice informazione) su uno o più file di log che generalmente risiedono nella macchina stessa su cui gira il software.

Ad esempio, con PHP è possibile scrivere una riga di log nei log di sistema con il codice:

<?php
openlog("MioScritpDiLog", LOG_PID | LOG_PERROR, LOG_LOCAL0);
$access = date("Y/m/d H:i:s");
syslog(LOG_WARNING, "$access - messaggio personalizzato");
closelog();
?>

Quando viene eseguito questo frammento di codice, viene scritta una riga nel file

/var/log/messages

Questo avviene poiché si è utilizzata una chiamata di sistema alla funzione syslog; a seconda del valore del parametro int facility andremo a scrivere in un file diverso all’interno di /var/log/ nella stessa macchina in cui risiede la facility (applicazione) che può essere un’applicazione di sistema (ad esempio mail) oppure personalizzata.

È possibile indirizzare la chiamata ad un server che si occupa esclusivamente di logging; tale server poi può essere equipaggiato in modo tale da accedere ai contenuti dei log ad esempio attraverso un browser.

rsyslogd è un demone che permette la scrittura di log remoti. Questa che segue è un frammento tratto da http://wiki.rsyslog.com

FailoverSyslogServer

Si presentano spesso situazioni in cui i dati di log devono essere spediti da un sistema locale verso un demone syslogd centrale (per consolidamento del dato, archiviazione o per altre ragioni). Un problema comune è che i messaggi vengono persi quando il syslogd centrale va fuori servizio.

Rsyslog ha la capacità di lavorare con server fuori servizio per prevenire la perdita di messaggi. Un prerequisito è che l’inoltro di messaggi di log verso server centrale sia basato su TCP. La ragione di ciò è che con UDP (che è un protocollo senza connessione) non c’è possibilità di sapere se il sistema remoto è andato giù.

Supponiamo di avere un server primario centrale e due secondari. In questo caso potete usare il seguente estratto di file di configurazione per mandare loro i dati:

rsyslog.conf:

*.* @@primary-syslog.example.com
$ActionExecOnlyWhenPreviousIsSuspended on
& @@secondary-1-syslog.example.com
& @@secondary-2-syslog.example.com
& /var/log/localbuffer
$ActionExecOnlyWhenPreviousIsSuspended off

Questo selettore processa tutti i messaggi che riceve (*.*). Poi tenta di inoltrare ogni messaggio al server primary-syslog.example.com (via tcp). Se questo non è raggiungibile, prova con secondary-1-syslog.example.com, se anche questo fallisce tenta con secondary-2-syslog.example.com. Se nessuno di questi server è raggiungibile, i dati sono salvati localmente in /var/log/localbuffer.

Notate che i secondari ed il log locale vengono usati se quello prima di loro non funziona. Così, idealmente, /var/log/localbuffer non riceverà mai un messaggio. Se il serve che è andato in failover torna su, prenderà il sopravvento sugli altri sistemi sotto di lui.

(Fonte: http://wiki.rsyslog.com)

Un altro sito in cui si trovano notizie precise anche per i cosiddetti newbies è questo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>