Ho circa 30 server e utilizzo semplicemente syslog per inviare tutti i registri a un singolo server di registrazione. Per il backup, tutte le macchine sono inoltre configurate per archiviare i propri registri localmente per alcuni giorni, utilizzando logrotate per occuparsi della rotazione e della cancellazione dei vecchi registri.
Ognuno dei miei server applicazioni esegue un piccolo script perl per inviare i propri log a syslog, che quindi inoltra al loghost (script perl di seguito).
Quindi sul loghost abbiamo alcuni script personalizzati che sono simili al controllo dei log che fondamentalmente guardano i registri in arrivo per qualcosa di sospetto.
Abbiamo anche tutte le email di ogni host che vanno in un unico posto, in modo che se un programma si lamenta in questo modo, riceviamo tutti i messaggi. Questo potrebbe teoricamente andare in una singola cassetta postale su cui un programma potrebbe agire e analizzare.
Ecco il mio script perl di registrazione. Funziona reindirizzando l'output del programma in esso, quindi esegue il syslog dell'output e lo sputa di nuovo in modo da poterlo inviare altrove (invio a multilog). Puoi anche dargli l'opzione -q per andare su syslog.
#!/usr/bin/perl
use Sys::Syslog;
use Getopt::Long;
$SERVER_NAME = `hostname`;
chomp $SERVER_NAME;
$FACILITY = 'local0';
$PRIORITY = 'info';
GetOptions ('s=s' => \$SERVER_NAME, 'f=s' => \$FACILITY, 'p=s' => \$PRIORITY, 'q+' => \$quiet);
#print "$SERVER_NAME\n$FACILITY\n$PRIORITY\n";
#Sys::Syslog::setlogsock('unix');
openlog ($SERVER_NAME,'ndelay',$FACILITY);
if (!($quiet)) {syslog($PRIORITY,"Logging Started -- Logger version 1.1");}
$| = 1;
while (<>) {
if (!($quiet)) {print $_ unless $_ =~ /^\s+$/};
chomp;
syslog($PRIORITY,$_) if $_;
}
closelog;
$| = 0;