从tomcat集群发送日志

时间:2015-10-15 03:34:07

标签: elasticsearch redis logstash log4j2

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

  • 6个tomcats群集,日志记录(log4j2)配置为使用SocketAppender
  • 这些侦听器是将记录的事件放在Redis上的logstash代理
  • 另一个logstash代理从Redis中选择条目并将其推送到elasticsearch

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

1 个答案:

答案 0 :(得分:1)

如果您可以选择这样做,我肯定不会使用SocketAppender。一个问题是你提到的问题和另一个问题,如果你在Logstash 1.5x或之前,我发现更麻烦的是,你的事件的确切时间戳(由log4j2创建)没有传达,这意味着时间戳日志行的日志行将是logstash中日志行的到达时间,而不是应用程序创建日志行的时间。如果您从堆栈中的不同应用程序/服务器/子系统聚合日志,那么了解事件的时间性将是一件麻烦事。但这是fixed in Logstash 2.0,但仍然值得一提。

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

  1. 您的日志文件充当您日志事件的事实上的备份,即您可以随时重播这些文件
  2. 您的应用程序不依赖于另一个同步子系统来发送其日志行,它只是将它们放在自己的文件系统上
  3. 您的日志服务器可能已关闭(升级,网络连接等),您的应用程序仍然可以生成日志,无论链条发生什么。
相关问题