J'ai environ 30 serveurs, et j'utilise simplement syslog pour envoyer tous les journaux à un seul serveur de journalisation. Pour la sauvegarde, toutes les machines sont également configurées pour stocker leurs propres journaux localement pendant quelques jours, en utilisant logrotate pour prendre en charge la rotation et la suppression des anciens journaux.
Chacun de mes serveurs d'applications exécute un petit script perl pour envoyer leurs journaux à syslog, qui les transmet ensuite à l'hôte de connexion (script perl ci-dessous).
Ensuite, sur l'hôte de connexion, nous avons des scripts personnalisés similaires à logcheck qui surveillent essentiellement les journaux entrants pour tout élément suspect.
Nous avons également tous les e-mails de chaque hôte allant à un seul endroit, de sorte que si un programme se plaint de cette façon, nous recevons tous les messages. Cela pourrait théoriquement aller dans une seule boîte aux lettres sur laquelle un programme pourrait agir et analyser.
Voici mon script perl de journalisation. Il fonctionne en canalisant la sortie du programme dedans, puis il syslog la sortie et la recrache pour que vous puissiez l'envoyer ailleurs (j'envoie au multilog). Vous pouvez également lui donner l'option -q pour simplement aller dans 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;