我运行了一些会创建自己的日志的应用程序。然后我在同一台服务器上运行 cron 脚本来导入应用程序的数据。当这些 cron 错误出现时,默认会向运行 cron 作业的用户发送电子邮件。
我需要检查日志和邮件中可能出错的地方实在太多了。我的问题是,最好的方法是什么,或者更好的方法是使用日志解析器应用程序,当出现真正错误时,它会检查所有系统日志,而不是我每天都要检查?
答案1
Logwatch 是一个很好的解决方案,但您仍然需要处理大量电子邮件。我倾向于将所有内容输入到 syslog 中,然后在中央日志记录机上收集这些 syslog。然后,您可以在一个地方对日志进行各种处理和事件关联。
首先,如何将应用程序日志放入 syslog?有几种方法。最简单的情况是,您可以调用logger
shell 脚本来创建 syslog 消息。如果您正在运行 perl 脚本,您可以对其进行改造以使用Log4Perl将日志重定向到 syslog。其他语言也有类似的方法。
你应该考虑用类似的东西替换库存系统 sylog系统日志工具以获得更好的性能和在日志通过管道时过滤日志的能力。syslog-ng 还支持阻塞管道,因此您可以将现有程序的输出直接重定向到 syslog-ng,而无需修改程序,也不会丢失数据。
将日志集中到一起后,你可以设置以下工具简单事件相关器来寻找模式。您还可以运行以下工具日志存储将日志保存在数据库中并实现更强大的查询和图形功能。
当然也有商业工具可以做这种事情。其中最流行的一个是Splunk试用免费,但数据量有限。Splunk 附带一个客户端,您可以在多个服务器上运行,从而省去了将所有日志发送到中央系统日志服务器的步骤。如果您比开发人员有更多的钱,那么像 Splunk 这样的产品可能值得考虑。
最后,这是一个不错的中央日志记录小指南其内容与我刚才讲的很多内容相同。
答案2
在我心里,日志监视是最好的。它默认随许多发行版提供,尽管掌握配置语法很费劲,但一旦投入工作,它就变成了一项轻松的工作。它以批处理模式工作,每隔一段时间运行一次以消化最近的日志文件,并对条目进行排序和总结。
如果你不想那么努力工作,样本花费更少,效果更差。它还可以交互运行,读取日志文件中出现的每一行新内容,如果符合某些条件,则会根据要求向您发出警报。
无论您采用何种方法,我个人建议不要采用“在出现问题时对日志文件进行排序”的方法,而是采用“始终对日志文件进行排序,这样我就可以掌握我的系统”。
首先,观察到的故障日志可能不是故障根源的日志。您的 Web 服务器可能会大声喊叫说 Cookie 缓存文件中的数据格式错误(断言失败!),直到脸色发青,但如果您没有查看系统日志(该日志显示/cache
已 100% 满)并由此推断无法将 Cookie 数据写入缓存,那么您实际上就无法知道出了什么问题,举个例子。
其次,我认为,要求应用程序知道系统在正常或异常操作中会产生什么样的日志是不合理的。了解系统的复杂性是你作为系统管理员的工作;大多数系统管理员会更进一步,使用为其系统定制的常规工具(如上述工具)或通过编写自己的工具,自动排除所有正常行为并通知所有异常行为。
答案3
如果您有资源,另一个解决方案是 SPLUNK。您可以在网络上创建一个 SPLUNK 服务器,将所有服务器和所有应用程序的所有日志发送到它。它会对日志进行索引并根据时间线进行同步。
这是一个很棒的概念,可以真正帮助调试问题。每天最多 500MB 的日志是免费的:
http://www.splunk.com/view/free-vs-enterprise/SP-CAAAE8W
安德鲁
答案4
您还可以查看八爪女(免责声明:我的项目),开始时相当困难,但最后真的很强大。