我试图弄清楚其他人如何实现他们的日志管理系统。
我有 20-30 台 Linux 服务器和一些 Windows 机器(其中大部分是虚拟化的)。我们使用大量 Perl 和 Bash 脚本来完成大部分自动化作业,我正在尝试标准化它们的日志记录。
我一直在研究 log4perl 和 log4sh 来记录脚本,以及使用 syslog-ng 来获取集中日志服务器上的所有日志。我还阅读了 splunk,尽管听起来企业版相当昂贵,而且我的所有服务器可能会超出免费许可证的限制。
我见过其他工具,例如 swatch 和 logcheck,但我不太确定所有这些部分是如何组合在一起的......如能提供任何建议我将不胜感激!
答案1
我有大约 30 台服务器,我直接使用 syslog 将所有日志发送到单个日志服务器。为了备份,所有机器还配置为在本地存储自己的日志几天,使用 logrotate 来处理旧日志的轮换和删除。
我的每个应用程序服务器都运行一个小型 perl 脚本,将其日志发送到 syslog,然后转发到日志主机(下面的 perl 脚本)。
然后在日志主机上我们有一些类似于日志检查的自定义脚本,基本上监视传入的日志中是否有任何可疑内容。
我们还将来自每个主机的所有电子邮件集中到一个地方,这样如果有任何程序以这种方式投诉,我们就会收到所有邮件。理论上,这些邮件可以集中到一个邮箱,程序可以对其采取行动并进行分析。
这是我的日志记录 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;
答案2
虽然我还没有实现它,但我计划将所有日志生成机器移至 rsyslog,并实现一个堡垒型服务器,用作系统日志的收集器。从那里开始,我认为 Splunk 的免费版本可以满足我提取信息的所有需求。
现在只需实现它...
答案3
我使用中央系统日志主机。每个边缘系统都会将 *.debug 发送到中央日志主机。中央系统日志主机运行 syslog-ng,并有规则来拆分日志,以便每台机器生成以当天命名的自己的文件。它还将所有内容转储到一个文件中,我针对该文件运行 logcheck.sh 的后代。
我每天运行一次日志压缩程序,它会压缩超过 7 天的日志,并删除超过 28 天的日志。两者合计,日志在服务器上的预期寿命为 35 天,这意味着所有日志都应进行每月备份,最多可恢复两年。
虽然它需要大量存储,但似乎是确保覆盖的最佳方式。
答案4
我们使用 LogLogic 的设备进行企业日志记录。它基于 syslog,因此所有 *nix 设备都可以毫无问题地使用它;有一个小应用程序需要安装在 Windows 服务器上。我可以搜索任何我想要的内容,包括 REGEX 查询,它似乎能够处理相当多的负载(仅我们的 Active Directory 设置就产生了令人难以置信的流量)。