日志传输和聚合的规模

你如何从UNIX / Linux机器上分析日志文件? 我们运行几百台服务器,它们都可以直接或通过系统日志生成自己的日志文件。 我正在寻找一个体面的解决scheme来汇总这些并挑选重要的事件。 这个问题分解成三个部分:

1)消息传输

经典的方法是使用syslog将消息logging到远程主机。 这适用于login到syslog的应用程序,但对写入本地文件的应用程序不太有用。 解决scheme可能包括让应用程序login到连接到程序的FIFO中,使用syslog发送消息,或者写一些grep本地文件并将输出发送到中央系统日志主机。 但是,如果我们去编写工具来把消息写入系统日志的麻烦,我们会更好地用像Scribe这样的东西来代替整个系统,它比syslog提供更多的灵活性和可靠性。

2)消息聚合

日志条目似乎分为两种types:每个主机和每个服务。 每主机消息是在一台机器上发生的消息; 认为磁盘失败或可疑的login。 运行服务的大多数或全部主机上都会出现每个服务的消息。 例如,我们想知道Apache何时发现一个SSI错误,但是我们不希望100台机器发生同样的错误。 在所有情况下,我们只希望看到每种消息types之一:我们不希望10条消息说同一个磁盘失败了,而且每次遇到一个破坏的SSI都不需要消息。

解决这个问题的一个方法是将多个相同types的消息聚合到每个主机上,将这些消息发送到中央服务器,然后将相同types的消息聚合成一个整体事件。 SER可以做到这一点,但使用起来很尴尬。 即使在几天的摆弄之后,我也只有基本的聚合工作,并且不得不经常查找SER用于关联事件的逻辑。 它function强大但棘手:我需要一些我的同事可以在最短的时间内拿起和使用的东西。 SER规则不符合要求。

3)生成警报

当有趣的事情发生时,我们如何告诉我们的pipe理员? 邮件收件箱? 注入Nagios?

那么,你是怎么解决这个问题的? 我不期望在盘子上有答案。 我可以自己搞清楚细节,但是一些高层次的讨论肯定是个普遍的问题。 目前我们正在使用cron作业,系统日志和谁知道还有什么可以find事件。 这不是可扩展的,可维护的或灵活的,因此我们错过了许多我们不应该做的事情。

更新:我们已经在使用Nagios进行监控,这对于检测到主机/testing服务/ etc是非常好的,但是对于抓取日志文件不太有用。 我知道有Nagios的日志插件,但是我对比每个主机警报更具可扩展性和层次感的东西感兴趣。

我使用了三种不同的系统来集中日志:

  1. Syslog / syslog-ng转发到一台主机
  2. Zenoss用于聚合和提醒事件
  3. Splunk进行日志聚合和search

对于#3,我通常使用syslog-ng将来自每个主机的消息直接转发到splunk。 它也可以直接parsing日志文件,但这可能有点痛苦。

Splunk非常适合search和分类日志。 我没有使用splunk进行日志提醒,但我认为这是可能的。

你可以看看OSSEC,一个完整的开源HIDS,它做日志分析,可以触发行动或发送警报的邮件。 警报是由一组简单的基于XML的规则触发的,为各种日志格式提供了许多预定义的规则,您可以添加自己的规则

http://www.ossec.net/

看看Octopussy 。 它是完全可定制的,似乎可以满足您的所有需求…

PS:我是这个解决scheme的开发者。

您需要查看一个监控系统,例如Zenoss Core 。 除此之外,它在介绍页面上说:

Zenoss事件监视和pipe理提供了从各种来源聚合日志和事件信息的能力,包括可用性监视,性能监视, 系统日志源 ,SNMP陷阱源,Windows事件日志。

看看你用什么工具来监控你的服务器 。