我正在评估有关分布式日志服务器的不同选项。
在Java世界中,正如我所看到的,最流行的解决方案是filebeat + kafka + logstash + elasticsearch + kibana。
然而,在.NET世界中,有一个可以将结构日志直接发送到elasticsearch的serilog。所以唯一需要的组件是elasticsearch + kibana。
我搜索了很多,但在生产中没有太多关于此解决方案的信息。我不知道它是否足以处理大量的日志。
有人能给我一些建议吗?感谢。
答案 0 :(得分:2)
我确实有同样的问题完全。我们的系统使用“经典” elk-stack
体系结构,即FileBeat-> LogStash-> Elastic(-> Kibana)。
但是,由于我们在大型项目中发现大量日志 Serilog ,因此它是更好的解决方案,其原因如下:
Serilog
功能将派上用场。在LogStash
中,您需要创建其他过滤器,以根据模式对消息进行分类。这意味着在日志结构方面和LogStash
方面存在很大的耦合-容易出错。 FileBeat
在处理大块数据时遇到问题,因为注册表文件倾向于“爆炸”-从个人经验中引用stack overflow flow question ; elastic-forum question 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)约定编写事件,因此与从其他来源记录的事件兼容,例如节拍。