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