来自 tomcat 个集群的日志传送

Log shipping from tomcat cluster

我正在调查日志系统的一个问题,并寻找有关该问题的可能解决方案的一些意见。 我们现在拥有的:

我们有时遇到的问题是客户端套接字(log4j 记录器)有时会无限期地等待,从而导致应用程序变得无响应。建议的解决方案之一是摆脱套接字附加程序并使用本地文件(我们不需要 "instant" kibana 中的日志信息)。因此,logstash 代理将被配置为从 6 个文件(每个实例一个)中读取并将它们直接推送到弹性搜索中。除了在 logstash 的输入配置中定义了 6 个文件之外,您能否提出这种方法的任何缺点?您还能建议哪些其他选择?提前致谢。

如果您可以选择,我绝对不会使用 SocketAppender。一个问题是你提到的那个问题,另一个问题是你使用的是 Logstash 1.5x 或更早版本,我发现这更麻烦,是你的事件的确切时间戳(由 log4j2 创建)没有传达,这意味着时间戳您的日志行的到达时间将是该日志行在 logstash 中的到达时间,而不是您的应用程序创建日志行的时间。如果您在堆栈中聚合来自不同 apps/servers/subsystems 的日志,则很难理解事件的临时性。虽然这是 fixed in Logstash 2.0,但仍然值得一提。

除此之外,将日志存储到文件系统上的文件中而不是直接通过 TCP 传送它们至少有三个很好的理由:

  1. 您的日志文件实际上是您日志事件的备份,即您可以随时重放这些文件
  2. 您的应用程序不依赖于另一个同步子系统来发送其日志行,它只是将它们接收到自己的文件系统中
  3. 您的 logstash 可能已关闭(升级、网络连接等),但您的应用程序仍然能够生成日志,无论链下发生了什么。