Tenho cerca de 30 servidores e uso apenas o syslog para enviar todos os registros para um único servidor de registro. Para backup, todas as máquinas também são configuradas para armazenar seus próprios logs localmente por alguns dias, usando o logrotate para cuidar da rotação e exclusão de logs antigos.
Cada um dos meus servidores de aplicativos executa um pequeno script perl para enviar seus logs para o syslog, que então encaminha para o loghost (script perl abaixo).
Em seguida, no loghost, temos alguns scripts personalizados que são semelhantes ao logcheck que basicamente observam os logs de entrada em busca de algo suspeito.
Também temos todos os e-mails de todos os hosts indo para um único local, de modo que, se algum programa reclamar dessa maneira, recebemos todas as mensagens. Isso poderia, teoricamente, ir para uma única caixa de correio na qual um programa poderia atuar e analisar.
Aqui está o meu script perl de logging. Ele funciona pipetando a saída do programa para ele, e então ele syslogs a saída e cospe de volta para fora para que você possa enviá-lo em outro lugar (eu envio para o multilog). Você também pode dar a opção -q para ir ao 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;