linux – 您是如何在服务器上实现日志管理的?

我正在试图弄清楚其他人如何实施他们的日志管理系统.

我有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;

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...