使用 Logstash/Graylog 日志追加器的应用程序弹性影响



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

  1. log4j 是否会将日志缓存在某个地方,并在恢复与灰色日志的连接时发送它们?
  2. 使用此模块的应用程序是否会在 graylog 服务器出现问题期间停止工作?

谢谢。

Gelf-appenders 是没有缓存的在线追加器。它们直接连接执行远程服务,并在应用程序生成日志事件时提交日志事件。

如果远程服务关闭,日志事件将丢失。有几个选项具有不同的影响:

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

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

  4. Redis:如果您的 Graylog 实例已知出现故障/已关闭以进行维护,则可以使用 Redis 作为中间缓冲区。一旦 Graylog 再次可用,它应该会赶上,并且您可以在一定程度上防止日志事件丢失。如果您的 Redis 服务变得不正常,请参阅第 1 点。

  5. HTTP:HTTP是另一个给你一定程度灵活性的选项。您可以将 Graylog 服务器放在负载均衡器后面,以提高可用性并降低故障风险。日志事件丢失仍有可能。

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

相关内容

最新更新