Mam około 30 serwerów i używam zwykłego syslog, aby wysłać wszystkie dzienniki do jednego serwera logowania. W celu wykonania kopii zapasowej wszystkie komputery są również skonfigurowane do przechowywania własnych dzienników przez kilka dni, przy użyciu programu logrotate, aby zadbać o rotację i usuwanie starych dzienników.
Każdy z moich serwerów aplikacji uruchamia mały skrypt perla, aby wysłać swoje dzienniki do syslog, który następnie przesyła dalej do loghost (skrypt perla poniżej).
Następnie na loghost mamy niestandardowe skrypty, które są podobne do logcheck, które w zasadzie obserwują przychodzące logi pod kątem czegoś podejrzanego.
Mamy również wszystkie wiadomości e-mail od każdego hosta, które udają się w jedno miejsce, więc jeśli jakiś program w ten sposób złoży skargę, otrzymamy wszystkie wiadomości. Teoretycznie może to prowadzić do pojedynczej skrzynki pocztowej, na której program mógłby działać i analizować.
Oto mój skrypt do logowania w Perlu. Działa, przesyłając do niego dane wyjściowe programu, a następnie sysloguje dane wyjściowe i wypluwa je z powrotem, aby można było wysłać je gdzie indziej (wysyłam do multiloga). Możesz także podać opcję -q, aby przejść do 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;