使用serilog直接将日志写入elasticsearch

时间:2018-06-04 13:51:57

标签: elasticsearch elastic-stack serilog

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

在Java世界中,正如我所看到的,最流行的解决方案是filebeat + kafka + logstash + elasticsearch + kibana。

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

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

有人能给我一些建议吗?感谢。

2 个答案:

答案 0 :(得分:2)

我确实有同样的问题完全。我们的系统使用“经典” elk-stack体系结构,即FileBeat-> LogStash-> Elastic(-> Kibana)。 但是,由于我们在大型项目中发现大量日志 Serilog ,因此它是更好的解决方案,其原因如下:

  1. CI \ CD-当您想要具有不同结构的不同类型的日志而要具有不同的类型时,Serilog功能将派上用场。在LogStash中,您需要创建其他过滤器,以根据模式对消息进行分类。这意味着在日志结构方面和LogStash方面存在很大的耦合-容易出错。
  2. 维护-由于CI \ CD易于使用并且只需更改一点,因此维护大量日志更为容易。
  3. 可伸缩性-FileBeat在处理大块数据时遇到问题,因为注册表文件倾向于“爆炸”-从个人经验中引用stack overflow flow question ; elastic-forum question
  4. 更少的故障点-使用serilog,当您必须使用Filebeat进行路径访问时,日志会直接发送到elastic。还有一个失败的地方。

希望它可以帮助您进行评估。

答案 1 :(得分:0)

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

直接向Elasticsearch编写.NET Core日志记录。

免责声明:我是作者

要在您的.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基础结构(应用程序-> Microsoft ILogger-> Serilog提供程序/适配器-> Elasticsearch接收器-> Elasticsearch),而您现在只有(App-> Microsoft ILogger- > Elasticsearch提供程序-> Elasticsearch)。

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