【问题标题】:.NET Core API Serilog-ELK VS logstash/fluentd.NET Core API Serilog-ELK VS logstash/fluentd
【发布时间】:2020-10-26 08:00:56
【问题描述】:

以下是我的理解

  1. .net core api with serilog singk to ELK 可以直接发送日志到ELK
  2. 只有当我们想向 ELK 发送日志文件(通过按摩数据)时,才需要 Logstash 和 Fluentd

我的问题是

  1. 为什么需要logstash |如果我可以使用我的 api 中的 serilog 接收器直接将我的日志发送到 ELK,我会流利吗?
  2. 如果我使用 serilog sing 直接发送到 ELK,如果与 ELK 的连接断开,会发生什么情况?它会暂时保存并重新发送吗?
  3. 我在文章中读到,它说 FluentD 使用持久队列而 Logstash 没有,但为什么需要这个队列?假设我的应用程序有 1 个日志文件并且每秒更新一次。那么logstash每秒将整个文件发送给ELK吗?即使失败,它也可以将我的日志文件重新发送到 ELK 对吗?那么为什么这里需要一个持久队列来进行 Fluentd/logstash 比较。

对此有一些明确的解释。

【问题讨论】:

    标签: .net-core logstash serilog fluentd elk


    【解决方案1】:
    1. 为什么需要logstash |如果我可以在我的 API 中使用 serilog sink 直接将我的日志发送到 ELK?
    2. 如果我使用 serilog sing 直接发送到 ELK,如果与 ELK 的连接断开,会发生什么情况?它会暂时保存并重新发送吗?

    问题 2 在此处回答问题 1。 FluentD 有一个久经考验的缓冲机制来处理 ELK 中断。此外,您不想使用应用程序线程来处理与应用程序完全无关的任务 - 日志传送。这会使您的应用复杂化并降低可移植性。

    1. 我在文章中读到,它说 FluentD 使用持久队列而 Logstash 没有,但为什么需要这个队列?假设我的应用程序有 1 个日志文件并且每秒更新一次。那么logstash每秒将整个文件发送给ELK吗?即使失败,它也可以将我的日志文件重新发送到 ELK 对吗?那么为什么这里需要一个持久队列来进行 Fluentd/logstash 比较。

    正确。 FluentD 有一个缓冲区https://docs.fluentd.org/configuration/buffer-section。它将发送您在match 中设置的时间段内的任何内容(缓冲区用于在此处累积时间段的日志)。如果日志后端(ELK)关闭,它将继续将不成功的日志记录存储在缓冲区中。根据缓冲区大小,这可以处理非常严重的日志后端中断。一旦日志后端 (ELK) 再次启动,所有缓冲区都会发送给它,您不会丢失任何内容。

    Logstash 的persistent queue 是一个类似的机制,但他们走得更远,在内存缓冲区之后,他们添加了像 Kafka 这样的外部队列。当您使用 kafka 输入/输出时,FluentD 也是 capable to use the queue,并且您仍然有一个缓冲区,以防 Kafka 出现故障。

    【讨论】:

    • 感谢您的解释。我可能仍然需要阅读缓冲技术,因为我的 serilog 文件接收器每天都会创建日志文件,所以不确定缓冲区如何将其发送给 ELK。它会将完整的日志文件发送到 ELK 还是仅发送日志文件中新添加的行。如果旧的日志文件被更新了,它是否足够聪明地发送在旧日志文件中添加的行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多