Yaklaşık 30 sunucum var ve tüm günlükleri tek bir günlük sunucusuna göndermek için düz syslog kullanıyorum. Yedekleme için, tüm makineler eski günlüklerin döndürülmesine ve silinmesine dikkat etmek için logrotate kullanarak kendi günlüklerini birkaç gün boyunca yerel olarak depolayacak şekilde yapılandırılmıştır.
Uygulama sunucularımın her biri, günlüklerini syslog'a göndermek için küçük bir perl betiği çalıştırır ve daha sonra loghost'a iletir (aşağıdaki perl betiği).
Sonra loghost üzerinde şüpheli bir şey için temelde gelen günlükleri izlemek logcheck benzer bazı özel komut dosyaları var.
Ayrıca, her ana bilgisayardan gelen tüm e-postaların tek bir yere gitmesi gerekir, böylece herhangi bir program bu şekilde şikayet ederse, tüm iletileri alırız. Bu teorik olarak bir programın hareket edebileceği ve analiz edebileceği tek bir posta kutusuna gidebilir.
İşte benim günlük perl betiğim. Programın çıktısını buna bağlayarak çalışır ve daha sonra çıktıyı syslogs ve başka bir yere gönderebilmeniz için geri tükürür (Multilog'a gönderirim). Ayrıca syslog dosyasına gitmek için -q seçeneğini de kullanabilirsiniz.
#!/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;