我大约有30台服务器,我只使用syslog向上将所有日志发送到单个日志记录服务器。对于备份,所有计算机还配置为将自己的日志在本地存储几天,使用logrotate来处理旧日志的轮换和删除。
我的每个应用程序服务器都运行一个小的perl脚本,以将其日志发送到syslog,然后将其转发到日志主机(下面的perl脚本)。
然后在日志主机上,我们有一些类似于logcheck的自定义脚本,它们基本上监视传入的日志中是否有可疑的内容。
我们还将所有来自每台主机的电子邮件都发送到一个地方,因此,如果任何程序抱怨这种方式,我们都会收到所有消息。从理论上讲,这可以转到程序可以对其执行和分析的单个邮箱。
这是我的日志Perl脚本。它通过将程序的输出管道传输到其中来工作,然后对输出进行系统日志记录并将其吐回去,以便您可以将其发送到其他地方(我发送到multilog)。您还可以给它-q选项,使其仅进入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;