Tengo unos 30 servidores, y solo uso syslog directo para enviar todos los registros a un único servidor de registro. Para la copia de seguridad, todas las máquinas también están configuradas para almacenar sus propios registros localmente durante unos días, utilizando logrotate para encargarse de la rotación y eliminación de registros antiguos.
Cada uno de mis servidores de aplicaciones ejecuta una pequeña secuencia de comandos perl para enviar sus registros a syslog, que luego reenvía a loghost (secuencia de comandos perl a continuación).
Luego, en el registro, tenemos algunos scripts personalizados que son similares al logcheck que básicamente observan los registros entrantes en busca de algo sospechoso.
También tenemos todos los correos electrónicos de cada host que van a un lugar, de modo que si algún programa se queja de esa manera, recibimos todos los mensajes. En teoría, esto podría ir a un único buzón en el que un programa podría actuar y analizar.
Aquí está mi script perl de registro. Funciona canalizando la salida del programa en él, y luego syslogs la salida y la escupe de nuevo para que pueda enviarla a otro lugar (envío a multilog). También puede darle la opción -q para ir a 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;