.net core .NET核心API Serilog ELK VS logstash/fluentd

.net core .NET核心API Serilog ELK VS logstash/fluentd,.net-core,logstash,serilog,fluentd,elk,.net Core,Logstash,Serilog,Fluentd,Elk,以下是我的理解 带有serilog singk to ELK的.net核心api可以直接向ELK发送日志 只有当我们想向麋鹿发送日志文件(通过对数据进行处理)时,才需要Logstash和Fluentd 我的问题是 如果我可以使用api中的serilog接收器直接将日志发送给ELK,为什么我需要logstash | fluentd 如果我使用serilog sing直接发送给麋鹿,如果与麋鹿的连接中断,会发生什么情况?它会暂时保存并重新发送吗 我在文章中读到它说FluentD使用持久队列,而Log

以下是我的理解

  • 带有serilog singk to ELK的.net核心api可以直接向ELK发送日志
  • 只有当我们想向麋鹿发送日志文件(通过对数据进行处理)时,才需要Logstash和Fluentd
  • 我的问题是

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

  • 如果我可以使用API中的serilog接收器直接将日志发送给ELK,为什么我需要logstash | fluentd
  • 如果我使用serilog sing直接发送给麋鹿,如果与麋鹿的连接中断,会发生什么情况?它会暂时保存并重新发送吗
  • 问题2回答了这里的问题1。FluentD有一个经过战斗测试的缓冲机制来处理麋鹿停机。此外,您不希望使用应用程序线程来处理与应用程序日志传送完全无关的任务。这会使你的应用程序复杂化,降低可移植性

  • 我在文章中读到它说FluentD使用持久队列,而Logstash不使用,但为什么需要这个队列呢?假设我的应用程序有1个日志文件,并且每秒更新一次。那么logstash每秒都会把整个文件发送给ELK?即使失败,它也可以将我的日志文件重新发送给麋鹿,对吗?那么为什么这里需要一个持久队列来进行Fluentd/logstash比较呢
  • 对。FluentD有一个缓冲区。它将发送您在
    match
    中设置的时间段内收到的任何内容(缓冲区用于累积该时间段的日志)。如果日志后端(ELK)关闭,它将继续在缓冲区中存储失败的日志记录。根据缓冲区大小,这可以处理相当严重的日志后端中断。一旦日志后端(ELK)再次启动,所有缓冲区都会发送到它,并且不会丢失任何东西

    Logstash是一种类似的机制,但他们更进一步,在内存缓冲区之后,他们添加了外部队列,如Kafka。FluentD也是当您使用
    kafka
    input/output时使用的,并且在上面还有一个缓冲区,以防kafka崩溃

  • 如果我可以使用API中的serilog接收器直接将日志发送给ELK,为什么我需要logstash | fluentd
  • 如果我使用serilog sing直接发送给麋鹿,如果与麋鹿的连接中断,会发生什么情况?它会暂时保存并重新发送吗
  • 问题2回答了这里的问题1。FluentD有一个经过战斗测试的缓冲机制来处理麋鹿停机。此外,您不希望使用应用程序线程来处理与应用程序日志传送完全无关的任务。这会使你的应用程序复杂化,降低可移植性

  • 我在文章中读到它说FluentD使用持久队列,而Logstash不使用,但为什么需要这个队列呢?假设我的应用程序有1个日志文件,并且每秒更新一次。那么logstash每秒都会把整个文件发送给ELK?即使失败,它也可以将我的日志文件重新发送给麋鹿,对吗?那么为什么这里需要一个持久队列来进行Fluentd/logstash比较呢
  • 对。FluentD有一个缓冲区。它将发送您在
    match
    中设置的时间段内收到的任何内容(缓冲区用于累积该时间段的日志)。如果日志后端(ELK)关闭,它将继续在缓冲区中存储失败的日志记录。根据缓冲区大小,这可以处理相当严重的日志后端中断。一旦日志后端(ELK)再次启动,所有缓冲区都会发送到它,并且不会丢失任何东西


    Logstash是一种类似的机制,但他们更进一步,在内存缓冲区之后,他们添加了外部队列,如Kafka。FluentD也是当您使用
    kafka
    input/output时使用的,并且在上面还有一个缓冲区,以防卡夫卡倒下。

    谢谢您的解释。我可能仍然需要阅读缓冲技术,因为我的serilog文件接收器每天都会创建日志文件,所以不确定缓冲区如何将其发送给ELK。它会将完整的日志文件发送给ELK,还是只发送日志文件中新添加的行。如果一个旧的日志文件被更新了,它是否足够聪明,可以发送在旧日志文件中添加的行。谢谢您的解释。我可能仍然需要阅读缓冲技术,因为我的serilog文件接收器每天都会创建日志文件,所以不确定缓冲区如何将其发送给ELK。它会将完整的日志文件发送给ELK,还是只发送日志文件中新添加的行。如果一个旧的日志文件被更新了,它是否足够聪明来发送添加到旧日志文件中的行呢。