使用 serilog 将日志直接写入 elasticsearch 是个好主意吗

Is it a good idea to use serilog to write logs directly to the elasticsearch

我正在评估有关分布式日志服务器的不同选项。

在Java的世界里,据我所知,最流行的解决方案是filebeat + kafka + logstash + elasticsearch + kibana。

然而,在.NET 世界中,有一个可以将结构日志直接发送到elasticsearch 的serilog。所以唯一需要的组件是elasticsearch + kibana。

我搜索了很多,但是关于这个解决方案在生产中的信息不多。我不知道它是否足以处理大量日志。

谁能给我一些建议?谢谢。

我遇到了同样的问题完全。我们的系统使用 "classic" elk-stack 架构,即 FileBeat -> LogStash -> Elastic ( ->Kibana)。 但正如我们在具有大量日志的大型项目中发现的那样,Serilog 是更好的解决方案,原因如下:

  1. CI\CD - 当您有不同类型的日志且您希望拥有不同的类型时,Serilog 功能就派上用场了。在 LogStash 中,您需要创建不同的过滤器以根据模式分解消息。这意味着在日志结构方面和 LogStash 方面存在很大的耦合 - 非常容易出错。
  2. 维护-因为简单CI\CD和一个点的变化,更容易维护大量的日志。
  3. 可扩展性 - FileBeat 处理大块数据时存在问题,因为注册表文件倾向于 "explode" - 个人经验参考 ; elastic-forum question
  4. 更少的故障点 - 使用 serilog,当使用 Filebeat 时,日志直接发送到 elastic,你必须通过 LogStash。又一个失败的地方。

希望对您的评价有所帮助。

更新(2021 年 12 月):

Elasticsearch 记录器提供程序已移至 Elastic ECS DotNet 项目。

在此处查找最新版本:https://github.com/elastic/ecs-dotnet/blob/master/src/Elasticsearch.Extensions.Logging/ReadMe.md

nuget 包在这里:https://www.nuget.org/packages/Elasticsearch.Extensions.Logging/1.6.0-alpha1

它仍然被标记为 alpha 版本(尽管它比 Essential 版本具有更多功能),因此目前(2021 年 12 月)您需要在添加包时指定版本:

dotnet add package Elasticsearch.Extensions.Logging --version 1.6.0-alpha1

免责声明: 我是作者

原始答案

现在还有一个独立的记录器提供程序,它将按照 Elasticsearch 通用架构 (ECS) 字段规范将 .NET Core 日志记录直接写入 Elasticsearch,https://github.com/sgryphon/essential-logging/tree/master/src/Essential.LoggerProvider.Elasticsearch

要在您的 .NET Core 应用程序中使用它,请添加对 Essential.LoggerProvider.Elasticsearch 包的引用:

dotnet add package Essential.LoggerProvider.Elasticsearch

然后,在主机构建期间,使用提供的扩展方法将提供程序添加到 loggingBuilder。

using Essential.LoggerProvider;
// ...
    .ConfigureLogging((hostContext, loggingBuilder) =>
    {
        loggingBuilder.AddElasticsearch();
    })

默认配置将写入位于 http://localhost:9200/ 的本地 Elasticsearch 运行。

发送一些日志事件后,打开 Kibana(例如 http://localhost:5601/)并使用时间过滤器“@timestamp”为“dotnet-*”定义索引模式。

这进一步减少了依赖性,而不是拉入整个 Serilog 基础设施(App -> Microsoft ILogger -> Serilog provider/adapter -> Elasticsearch sink -> Elasticsearch)你现在只有(App - > Microsoft ILogger -> Elasticsearch 提供程序 -> Elasticsearch)。

ElasticsearchLoggerProvider 还遵循 Elasticsearch 通用架构 (ECS) 约定编写事件,因此与从其他来源记录的事件兼容,例如节拍。