我们在VIP后面的'n'个主机上运行一些服务。当特定请求调用发生某些故障时,我们可能有兴趣通过查看发生故障的受尊重主机上的日志来了解原因。由于请求可以发送到任何主机,因此在跟踪日志时,我们需要知道故障来自哪个主机。
一种解决方案是将主机名存储在我们服务的数据库中以及其他信息中。 另一种方法是,将日志推送到公共商店并在那里进行跟踪。
我个人认为,如果我们采用第一种方法,我们最终可能会在应用程序数据库中添加许多此类与调试相关的属性,从而污染它。然而,第二种选择也不容易实现并产生一些开销。此外,故障发生在哪个主机上没有多大帮助,除非由于某些硬件特定问题而发生故障。
你们有什么建议?
答案 0 :(得分:1)
如果不了解您的基础架构,很难准确,但这里有一些一般观点。
我不喜欢使用数据库存储应用程序日志 - 如果数据库崩溃,您将无法记录它!它也不是真正的关系数据,您无法获得可用于其他解决方案的监控工具。
我的建议是使用操作系统的内置事件记录解决方案;大多数日志框架都支持这种开箱即用的功能。在Windows上,这是事件日志;在* nix上有syslog系统。记录应该快速,廉价和防弹 - 这是您从操作系统工具中获得的。
第二个问题是如何使用这些日志进行故障排除和监控。有很多工具可以做到这一点,但主要针对系统管理员而不是开发人员。微软拥有MoM,还有Tivoli和Big Brother--以及一大堆开源工具。我会使用它们,而不是构建自己的解决方案。
关键点是 - 日志记录应该快速,廉价且稳健;分析和监视的东西应该与您的应用程序逻辑完全分开,这样您就可以重复使用工具和进程来处理多个项目。
答案 1 :(得分:0)
我猜想存储主机名应该相当便宜。我知道你将日志附加到数据库? 您还可以存储每个进程的pid,如果您有多个进程在同一主机名上运行,这可以帮助您。组合hostname / pid / timestamp将确保您唯一地标识进程。