使用Logstash / Graylog日志追加器对应用程序恢复能力产生影响

时间:2017-07-06 09:55:16

标签: java logging log4j graylog2

我对gelf模块(http://logging.paluch.biz/)有一些疑问,特别是当graylog服务器由于某种原因不可用时。

  1. log4j会在某处缓存日志,并在恢复与graylog的连接时发送它们吗?
  2. 使用此模块的应用程序在使用graylog服务器时会停止工作吗?
  3. 感谢。

1 个答案:

答案 0 :(得分:0)

Gelf-Appenders是没有缓存的在线appender。他们直接连接远程服务并在应用程序生成日志事件时提交日志事件。

如果远程服务已关闭,则日志事件会丢失。有几种选择会产生不同的影响:

  1. TCP :TCP具有传输可靠性并需要连接。如果远程服务变得缓慢/无响应,则只要I / O缓冲区饱和,您的应用程序就会受到影响。如果发送了所有数据,logstash-gelf将以非阻塞方式使用NIO。如果TCP连接断开,那么如果远程端口关闭,如果远程端无法访问或连接被拒绝,则会遇到连接超时。在任何情况下,您都会获得可靠性,但它会影响您的应用程序性能。

  2. UDP :UDP没有连接概念,它用于“即发即忘”通信。如果远程端变得不健康,您的应用程序通常不会受到影响,但会遇到日志事件丢失。

  3. Redis :如果您的Graylog实例已知失败/已被删除进行维护,则可以将Redis用作中间缓冲区。一旦Graylog再次可用,它应该赶上,并且您可以在一定程度上防止日志事件丢失。如果您的Redis服务变得不健康,请参阅第1点。

  4. HTTP :HTTP是另一种选择,可为您提供一定程度的灵活性。您可以将Graylog服务器置于负载均衡器后面,以提高可用性并降低故障风险。记录事件丢失仍然存在。

  5. 如果要确保日志连续性并降低日志事件丢失的可能性,请将日志写入磁盘。它仍然没有100%保证不会丢失(磁盘故障,磁盘已满),但可以提高应用程序性能。然后可以通过维护读取偏移量来从远程中断中恢复日志文件(理想情况下是一些基于JSON的格式),并将其提交给Graylog。