我正在试图弄清楚其他人如何实施他们的日志管理系统.
我有20-30个Linux服务器和一些Windows机箱(其中大多数是虚拟化的).我们利用大量的Perl和Bash脚本来完成大部分自动化作业,并且我正在尝试标准化他们的日志记录.
我一直在查看log4perl和log4sh以记录脚本和syslog-ng以获取集中式日志记录服务器上的所有日志.我也读过splunk,虽然听起来像企业版相当昂贵,我可能会超过所有服务器的免费许可限制.
我已经看过其他工具,如swatch和logcheck,但我不太确定所有这些部件是如何组合在一起的…任何建议都将非常感谢!
解决方法
我有大约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;