您如何分析来自 UNIX/Linux 机器的日志文件?我们运行数百台服务器,它们都直接或通过 syslog 生成自己的日志文件。我正在寻找一个体面的解决方案来汇总这些并挑选出重要事件。这个问题分为 3 个部分:
1) 消息传输
经典的方法是使用 syslog 将消息记录到远程主机。这适用于登录到 syslog 的应用程序,但对写入本地文件的应用程序不太有用。对此的解决方案可能包括将应用程序记录到连接到程序的 FIFO 中,以使用 syslog 发送消息,或者通过编写一些东西来 grep 本地文件并将输出发送到中央 syslog 主机。但是,如果我们费心编写工具来将消息输入 syslog,我们是否会更好地用 Facebook 的Scribe之类的东西来代替整个工具,它比 syslog 提供更多的灵活性和可靠性?
2) 消息聚合
日志条目似乎属于以下两种类型之一:每个主机和每个服务。每主机消息是发生在一台机器上的消息;想想磁盘故障或可疑登录。每个服务消息出现在大多数或所有运行服务的主机上。例如,我们想知道 Apache 何时发现 SSI 错误,但我们不希望 100 台机器出现相同的错误。在所有情况下,我们只希望看到每种类型的消息中的一种:我们不希望有 10 条消息说同一个磁盘发生故障,并且我们不希望每次遇到损坏的 SSI 时都收到一条消息。
解决此问题的一种方法是在每个主机上将多个相同类型的消息聚合为一个,将消息发送到中央服务器,然后将相同类型的消息聚合为一个整体事件。SER可以做到这一点,但使用起来很尴尬。即使经过几天的摆弄,我也只有基本的聚合工作,并且不得不不断地查找 SER 用于关联事件的逻辑。它很强大但很棘手:我需要我的同事可以在最短的时间内拿起和使用的东西。SER 规则不满足该要求。
3) 生成警报
当有趣的事情发生时,我们如何告诉我们的管理员?邮寄群组收件箱?注入Nagios?
那么,你是如何解决这个问题的呢?我不指望一个盘子上的答案。我可以自己解决细节,但就什么肯定是常见问题进行一些高级讨论会很棒。目前,我们正在使用杂乱无章的 cron 作业、系统日志以及谁知道还有什么可以查找事件。这不是可扩展的、可维护的或灵活的,因此我们错过了很多我们不应该做的事情。
更新:我们已经在使用 Nagios 进行监控,这对于检测到的主机/测试服务/等非常有用,但对于抓取日志文件的用处不大。我知道 Nagios 有日志插件,但我对比每个主机警报更具可扩展性和层次性的东西感兴趣。
我使用了三种不同的系统来集中日志:
对于#3,我通常使用 syslog-ng 将来自每个主机的消息直接转发到 splunk。它也可以直接解析日志文件,但这可能有点麻烦。
Splunk 非常适合搜索和分类您的日志。我没有使用 splunk 进行日志警报,但我认为这是可能的。
你可以看看 OSSEC,一个完整的开源 HIDS,它会进行日志分析并可以触发操作或发送警报邮件。警报由一组简单的基于 XML 的规则触发,包括许多针对各种日志格式的预定义规则,您可以添加自己的规则
http://www.ossec.net/
看看八爪鱼。它是完全可定制的,似乎可以满足您的所有需求......
PS:我是这个解决方案的开发者。
您需要查看监控系统,例如Zenoss Core。除其他外,它在介绍页面上说:
查看what-tool-do-you-use-to-monitor-your-servers。