【问题标题】:When will LogStash exceed the queue capacity and drop messages?LogStash 何时会超出队列容量并丢弃消息?
【发布时间】:2014-10-16 01:36:16
【问题描述】:

我正在使用 LogStash 从我的服务中收集日志。数据量这么大(20GB/天),高峰期恐怕会丢掉一部分数据。

所以我在这里问了question,并决定在ELB和LogStash之间添加一个Redis作为缓冲区,以防止数据丢失。

不过,我很好奇LogStash 什么时候会超出队列容量并丢弃消息?

因为我做了一些实验,结果表明LogStash可以完全处理所有数据而不会丢失,例如本地文件--> LogStash-->本地文件,netcat--> LogStash-->本地文件.

当 LogStash 最终丢弃消息时,谁能给我一个可靠的例子?所以我可以更好地理解为什么我们需要在它前面有一个缓冲区。

【问题讨论】:

    标签: redis message-queue logstash


    【解决方案1】:

    据我所知,Logstash 队列非常小。请参考here

    Logstash sets each queue size to 20. This means only 20 events can be pending into the next phase.
    This helps reduce any data loss and in general avoids logstash trying to act as a data storage   
    system. These internal queues are not for storing messages long-term.
    

    如您所说,您的每日日志大小为 20GB。这是相当大的数额。所以,建议在logstash之前安装一个redis。安装 redis 的另一个好处是当你的 logstash 进程出错并关闭时,redis 可以为你缓冲日志,否则你的所有日志都将被丢弃。

    【讨论】:

    • 我的团队是 LogStash 的新手,所以我真的需要一个可靠的示例或场景来说服我的队友我们需要这样一个节点来防止数据丢失。顺便说一句,处理 LogStash 错误和关闭是一个好点,谢谢:)
    • 不客气。有什么问题欢迎询问,一起讨论。
    【解决方案2】:

    最大队列大小是可配置的,队列可以存储在磁盘或内存中。 (由于容量大,强烈建议使用内存)。

    当队列已满时,logstash 将停止读取日志消息并丢弃传入的日志。

    对于日志文件,logstash会在tit跟不上时停止继续阅读,稍后可以继续阅读。它跟踪活动日志文件和上次读取位置。这些文件基本上就像一个巨大的缓冲区,它真的不太可能丢失数据(除非文件被删除)。

    对于 TCP/UDP 输入,如果队列已满,消息可能会丢失。

    对于其他输入/输出,你必须检查文档,是否支持背压,如果网络连接丢失,是否可以重播丢失的消息。

    一般来说,每天 20 GB 是相当低的(即使在最初发布的 2014 年),我们谈论的是每秒 1000 条消息。 logstash 前面确实不需要redis。

    对于非常大的部署(每天多个 TB),通常会在链中的某处遇到 kafka 来缓冲消息。在这个阶段,通常有许多客户端具有不同类型的消息,流经各种协议。

    【讨论】:

      猜你喜欢
      • 2015-03-17
      • 1970-01-01
      • 2010-09-23
      • 2023-02-06
      • 2014-11-18
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多