Ich habe ungefähr 30 Server und verwende einfach syslog, um alle Protokolle an einen einzigen Protokollierungsserver zu senden. Für die Sicherung sind alle Computer außerdem so konfiguriert, dass sie ihre eigenen Protokolle einige Tage lokal speichern. Mithilfe von logrotate können Sie die Rotation und das Löschen alter Protokolle erledigen.
Jeder meiner Anwendungsserver führt ein kleines Perl-Skript aus, um seine Protokolle an syslog zu senden, das sie dann an den loghost weiterleitet (Perl-Skript unten).
Dann haben wir auf dem loghost einige benutzerdefinierte Skripte, die logcheck ähneln und die eingehenden Protokolle grundsätzlich auf verdächtige Ereignisse überwachen.
Wir haben auch alle E-Mails von jedem Host an einem Ort, sodass wir alle Nachrichten erhalten, wenn sich ein Programm auf diese Weise beschwert. Dies könnte theoretisch zu einer einzelnen Mailbox gehen, auf die ein Programm reagieren und die es analysieren könnte.
Hier ist mein Logging Perl Skript. Es funktioniert, indem es die Ausgabe des Programms in das Programm leitet, die Ausgabe dann sysloggt und wieder ausspuckt, damit Sie sie an einen anderen Ort senden können (ich sende sie an Multilog). Sie können ihm auch die Option -q geben, um einfach zu syslog zu wechseln.
#!/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;