У меня около 30 серверов, и я просто использую системный журнал для отправки всех журналов на один сервер регистрации. Для резервного копирования все машины также настроены на локальное хранение собственных журналов в течение нескольких дней, используя logrotate для ротации и удаления старых журналов.
Каждый из моих серверов приложений запускает небольшой скрипт на perl для отправки своих журналов в системный журнал, который затем пересылается на хост-хост (скрипт perl ниже).
Затем на loghost у нас есть несколько пользовательских скриптов, похожих на logcheck, которые в основном отслеживают входящие журналы на предмет чего-либо подозрительного.
У нас также есть вся электронная почта от каждого хоста, идущая в одно место, поэтому, если какая-либо программа жалуется таким образом, мы получаем все сообщения. Теоретически это может относиться к одному почтовому ящику, который программа может обрабатывать и анализировать.
Вот мой скрипт Perl для входа. Он работает, передавая в него выходные данные программы, а затем обрабатывает выходные данные и выплевывает их обратно, чтобы вы могли отправить их в другое место (я отправляю в multilog). Вы также можете указать опцию -q, чтобы просто зайти в системный журнал.
#!/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;