Serilog无法将日志发送到Elasticsearch 8。

3

我使用ELK堆栈记录应用程序错误,但Serilog无法记录到elasticsearch

使用的elasticsearch版本是8.3.2

program.cs中的日志配置:

builder.UseSerilog((hostBuilder, serviceProvider, loggerConfiguration) =>
{
    var appSettings = hostBuilder.Configuration.GetSection(nameof(AppSettings)).Get<AppSettings>();

    CreateBasicLoggerConfiguration(loggerConfiguration)
        .WriteTo.File(logPath, rollingInterval: RollingInterval.Hour)
        .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(appSettings.ElasticsearchSettings.Uri))
        {
            IndexFormat = $"َapp-logs-{environment.EnvironmentName.Replace(".","-")}-{DateTimeOffset.Now.LocalDateTime:yyyy-MM}",
            AutoRegisterTemplate = true
        });
});

并且,在appsettings.json中设置elasticsearch

"ElasticsearchSettings": {
  "Uri" : "http://localhost:9200"
}

以下包已添加并使用:
<PackageReference Include="Serilog.AspNetCore" Version="5.0.0" />
<PackageReference Include="Serilog.Enrichers.ClientInfo" Version="1.1.4" />
<PackageReference Include="Serilog.Enrichers.Environment" Version="2.2.0" />
<PackageReference Include="Serilog.Sinks.Elasticsearch" Version="8.4.1" />

一切看起来都没问题,但是在elasticsearch中没有日志。

2个回答

9

这个问题是因为当前版本的Serilog.Sinks.Elasticsearch Serilog sink不支持Elasticsearch 8.*

默认情况下,您需要进行更多的配置。我最近遇到了这个问题,并写了一篇文章。我建议阅读那篇文章并解决您的问题。

尝试以下配置:

.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(appSettings.ElasticsearchSettings.Uri))
{
      IndexFormat = $"َapp-logs-{environment.EnvironmentName.Replace(".","-")}-{DateTimeOffset.Now.LocalDateTime:yyyy-MM}",
      AutoRegisterTemplate = true,
      OverwriteTemplate = true,
      TemplateName = yourTemplateName,
      AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv7,
      TypeName = null,
      BatchAction = ElasticOpType.Create
});

文章链接如何将Serilog与Elasticsearch 8 + Kibana集成


除此之外,在弹性服务器上设置“-ELASTIC_CLIENT_APIVERSIONING = true”非常重要。 - Code Name Jack
这已经不再是真的了。 Serilog.Sinks.Elasticsearch 9.x 支持 elastic stack 8.*。 更多信息请访问网站: https://github.com/serilog-contrib/serilog-sinks-elasticsearch - undefined

1

Serilog.Sinks.Elasticsearch在9.0版本中支持elasticsearch版本8.*

官方网站建议使用Elastic.Serilog.Sinks包来支持ecs >= 8.x

更多信息请参考serilog-data-shipper

与Serilog.Sinks.Elasticsearch的比较

Serilog.Sinks.Elasticsearch 是一个令人惊叹的社区驱动的接收器,具有大量选项,并且适用于旧版本 Elasticsearch < 8.0。
Serilog.Sinks.Elasticsearch 虽然没有官方支持,但 Elastic 的一些 .NET 团队成员帮助维护它。
Elastic.Serilog.Sinks 官方支持,并且专门构建以符合日志记录、数据流和 ILM 的最新最佳实践。
Elastic.Serilog.Sinks 有较少的配置选项,并且比 Serilog.Sinks.Elasticsearch 更具指导性。
这并不意味着 Elastic.Serilog.Sinks 中没有足够的配置钩子。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接