来自 tomcat 个集群的日志传送
Log shipping from tomcat cluster
我正在调查日志系统的一个问题,并寻找有关该问题的可能解决方案的一些意见。
我们现在拥有的:
- 集群 6 个 tomcat,日志记录 (log4j2) 配置为使用 SocketAppender
- 这些的侦听器是将记录的事件放在 Redis 上的 logstash 代理
- 另一个 logstash 代理从 Redis 中挑选条目并将它们推送到 elasticsearch
我们有时遇到的问题是客户端套接字(log4j 记录器)有时会无限期地等待,从而导致应用程序变得无响应。建议的解决方案之一是摆脱套接字附加程序并使用本地文件(我们不需要 "instant" kibana 中的日志信息)。因此,logstash 代理将被配置为从 6 个文件(每个实例一个)中读取并将它们直接推送到弹性搜索中。除了在 logstash 的输入配置中定义了 6 个文件之外,您能否提出这种方法的任何缺点?您还能建议哪些其他选择?提前致谢。
如果您可以选择,我绝对不会使用 SocketAppender。一个问题是你提到的那个问题,另一个问题是你使用的是 Logstash 1.5x 或更早版本,我发现这更麻烦,是你的事件的确切时间戳(由 log4j2 创建)没有传达,这意味着时间戳您的日志行的到达时间将是该日志行在 logstash 中的到达时间,而不是您的应用程序创建日志行的时间。如果您在堆栈中聚合来自不同 apps/servers/subsystems 的日志,则很难理解事件的临时性。虽然这是 fixed in Logstash 2.0,但仍然值得一提。
除此之外,将日志存储到文件系统上的文件中而不是直接通过 TCP 传送它们至少有三个很好的理由:
- 您的日志文件实际上是您日志事件的备份,即您可以随时重放这些文件
- 您的应用程序不依赖于另一个同步子系统来发送其日志行,它只是将它们接收到自己的文件系统中
- 您的 logstash 可能已关闭(升级、网络连接等),但您的应用程序仍然能够生成日志,无论链下发生了什么。
我正在调查日志系统的一个问题,并寻找有关该问题的可能解决方案的一些意见。 我们现在拥有的:
- 集群 6 个 tomcat,日志记录 (log4j2) 配置为使用 SocketAppender
- 这些的侦听器是将记录的事件放在 Redis 上的 logstash 代理
- 另一个 logstash 代理从 Redis 中挑选条目并将它们推送到 elasticsearch
我们有时遇到的问题是客户端套接字(log4j 记录器)有时会无限期地等待,从而导致应用程序变得无响应。建议的解决方案之一是摆脱套接字附加程序并使用本地文件(我们不需要 "instant" kibana 中的日志信息)。因此,logstash 代理将被配置为从 6 个文件(每个实例一个)中读取并将它们直接推送到弹性搜索中。除了在 logstash 的输入配置中定义了 6 个文件之外,您能否提出这种方法的任何缺点?您还能建议哪些其他选择?提前致谢。
如果您可以选择,我绝对不会使用 SocketAppender。一个问题是你提到的那个问题,另一个问题是你使用的是 Logstash 1.5x 或更早版本,我发现这更麻烦,是你的事件的确切时间戳(由 log4j2 创建)没有传达,这意味着时间戳您的日志行的到达时间将是该日志行在 logstash 中的到达时间,而不是您的应用程序创建日志行的时间。如果您在堆栈中聚合来自不同 apps/servers/subsystems 的日志,则很难理解事件的临时性。虽然这是 fixed in Logstash 2.0,但仍然值得一提。
除此之外,将日志存储到文件系统上的文件中而不是直接通过 TCP 传送它们至少有三个很好的理由:
- 您的日志文件实际上是您日志事件的备份,即您可以随时重放这些文件
- 您的应用程序不依赖于另一个同步子系统来发送其日志行,它只是将它们接收到自己的文件系统中
- 您的 logstash 可能已关闭(升级、网络连接等),但您的应用程序仍然能够生成日志,无论链下发生了什么。