我有大约30台服务器,我只是使用直接系统日志将所有日志发送到一台日志服务器.对于备份,所有计算机还配置为在本地存储自己的日志几天,使用logrotate来处理旧日志的轮换和删除.
我的每个应用程序服务器都运行一个小的perl脚本,将其日志发送到syslog,然后转发到loghost(下面的perl脚本).
然后在loghost上我们有一些类似于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;