Edw*_*ard 13 scripting linux log-files syslog
我试图弄清楚其他人如何实现他们的日志管理系统。
我有 20-30 个 Linux 服务器和一些 Windows 机器(其中大部分是虚拟的)。我们使用大量 Perl 和 Bash 脚本来完成大部分自动化工作,我正在尝试标准化它们的日志记录。
我一直在寻找 log4perl 和 log4sh 来记录脚本,并使用 syslog-ng 来获取集中式日志服务器上的所有日志。我还阅读了 splunk,尽管听起来企业版非常昂贵,而且我可能会超过所有服务器的免费许可限制。
我见过其他工具,如 swatch 和 logcheck,但我不太确定所有这些部分如何组合在一起......任何建议将不胜感激!
我有大约 30 台服务器,我只是直接使用 syslog 将所有日志发送到单个日志服务器。为了备份,所有的机器也都配置为将自己的日志在本地存储几天,使用 logrotate 来处理旧日志的轮换和删除。
我的每个应用程序服务器都运行一个小的 perl 脚本,将它们的日志发送到 syslog,然后转发到 loghost(下面的 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;
Run Code Online (Sandbox Code Playgroud)
虽然我还没有实现它,但我计划将所有日志生成机器转移到 rsyslog,并实现一个堡垒型服务器,该服务器将充当系统日志收集器。从那时起,我认为 Splunk 的免费版本可以完成我提取信息所需的一切。
现在只是为了实现它......