什么是最好的方式来处理各地创build的大量不同的日志?

我运行了几个创build自己的日志的应用程序。 然后,我在相同的服务器上运行cron脚本来为我的应用程序导入数据。 当这些cron出错时,默认是发送邮件给运行cron作业的用户。

有太多的地方,我需要检查日志和邮件的东西,可能会出错。 我的问题是,什么是最好的方式来做到这一点,甚至更好,就像一个日志parsing器应用程序,它会经历所有的系统日志,当出现真正的错误,而不是我必须每天经历它?

Logwatch是一个很好的解决scheme,但是你仍然在处理大量的电子邮件。 我喜欢把所有东西都放到系统日志中,然后在中央日志logging机器上收集这些系统日志。 然后,您可以在一个地方对日志执行各种处理和事件关联。

首先,如何让你的应用程序日志进入系统日志? 有几种方法。 对于最简单的情况,您可以在shell脚本中调用logger来创build系统日志消息。 如果您正在运行perl脚本,则可以将其改造为使用Log4Perl将日志redirect到syslog中。 其他语言也有类似的方法。

您应该考虑用syslog-ng之类的东西来replacestock system sylog,以获得更好的性能,并且能够在日志在pipe道中移动时进行过滤。 syslog-ng还支持阻塞pipe道,因此您可以将现有程序的输出直接redirect到syslog-ng中,而无需修改程序并且不会丢失数据。

一旦你得到你在一个地方login,你可以设置像简单事件相关工具来查找模式。 您还可以运行像logstash这样的工具将日志保存到数据库中,并启用更强大的查询和绘图function。

当然,也有商业工具来做这种事情。 其中一个最受欢迎的就是Splunk ,它可以自由地尝试和限制数据量。 Splunk提供了一个可以在多台服务器上运行的客户端,可以帮助您将所有日志导入中央系统日志服务器。 如果你有更多的钱,开发人员,像Spl​​unk可能值得考虑。

最后,这里有一个很好的中央日志logging小程序 ,它涵盖了我刚才所做的许多相同的工作。

在我看来, logwatch是最好的。 它默认情况下有很多发行版本,虽然它是一个猪的configuration语法的悬挂,一旦工作放在它变成一个静坐和放松的工作。 它以批处理模式运行,经常运行以消化最近的日志文件,并对条目进行sorting和汇总。

如果你不想这么努力的话,那么swatch就不那么笨重了。 它也以交互方式运行,在出现日志文件的每一行时进行扫描,并在符合特定条件时按要求提醒您。

无论采取什么方法,我个人都build议不要在事情出错的时候通过日志文件进行sorting,而是倾向于“随时查看日志文件,这样我就可以得到我的系统”。

首先,观察到的故障的日志可能不是故障根源的日志。 您的Web服务器可能会尖叫,来自Cookiecaching文件的数据格式错误(断言失败!),直到它变成蓝色,但是如果您没有查看系统日志,说明/cache已经100%满了,通过这个推断,没有cookie数据可以写入caching,举例来说,你不会真正知道什么是错误的。

其次,在我看来,期待一个应用程序知道你的系统产生什么types的日志是不合理的,无论是正常的还是病理的操作。 了解你的系统的复杂性是你作为一个系统pipe理员的工作; 大多数系统pipe理员会更进一步,自动排除所有正常行为,并通过使用为其系统定制的常规工具(如上所述)或通过编写自己的系统来自动排除所有正常行为和通知所有病态行为。

如果你有资源的另一个解决scheme是SPLUNK。 您在networking上创build一个SPLUNK服务器,将所有服务器上的所有日志以及您的所有应用程序发送给它。 它对日志进行索引并在时间轴上进行同步。

这是一个很棒的概念,可以真正帮助debugging问题。 每天最多500MB的日志是免费的:

http://www.splunk.com/view/free-vs-enterprise/SP-CAAAE8W

安德鲁

你也可以看看Octopussy (免责声明:我的项目),开始时相当困难,但最后真的很强大。