Serilog 未记录到 ElasticSearch 服务器并引发异常

Roe*_*smi 3 elasticsearch kibana serilog asp.net-core

我正在尝试开始登录 ElasticSearch,但在服务器中找不到日志,如果我启用诊断模式,则会引发异常:

这就是我的 Startup.cs 的样子:

            //ElasticSearch Logs
        Log.Logger = new LoggerConfiguration()
         .Enrich.FromLogContext()
         .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("https://myserver.com:9243/"))
         {
             ModifyConnectionSettings = x => x.BasicAuthentication("elastic", "mypassword"),
             AutoRegisterTemplate = true,                 
         })
         .Enrich.FromLogContext()
         .WriteTo.Console()
        .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

以下是我的Program.cs

        public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>()
                .UseSerilog();
            });
Run Code Online (Sandbox Code Playgroud)

这就是我在控制器中的内容:

        _logger.LogError(new Exception("test"), "An error has occurred.");
        _logger.LogInformation("The {User} has just executed {Action}.", "username", "actionName");

        Log.Error("this is my first log");
Run Code Online (Sandbox Code Playgroud)

我得到的异常:

2021-08-19T21:09:15.2793348Z 无法创建模板。Elasticsearch.Net.ElasticsearchClientException:请求执行失败。调用:状态代码 400 来自:PUT /_template/serilog-events-template。ServerError:类型:mapper_parsing_Exception原因:“无法解析映射[_doc]:根映射定义具有不受支持的参数:[默认值:{dynamic_templates = [{numerics_in_fields = {match_pattern = regex,path_match = fields。[\ d +] $,mapping = {norms=false,index=true,type=text}}},{string_fields={mapping={norms=false,index=true,type=text,fields={raw={ignore_above=256,index=true,类型=关键字}}},match_mapping_type =字符串,匹配= }}],属性= {消息= {索引= true,类型=文本},例外= {类型=嵌套,属性= {ExceptionMessage = {类型=对象,属性= {MemberType={type=integer}}}、StackTraceString={index=true、type=text}、HResult={type=integer}、RemoteStackTraceString={index=true、type=text}、RemoteStackIndex={type=integer} ,深度={type=integer}}}}}]" CausedBy: "类型:mapper_parsing_exception 原因:"根映射定义具有不支持的参数:[默认值:{dynamic_templates=[{numerics_in_fields={match_pattern=regex, path_match=fields.[ \d+]$,映射={norms=false,index=true,type=text}}},{string_fields={mapping={norms=false,index=true,type=text,fields={raw={ignore_above= 256、index=true、type=keyword}}}、match_mapping_type=string、match= }}]、properties={message={index=true、type=text}、例外={type=nested、properties={ExceptionMessage= {type=object,properties={MemberType={type=integer}}},StackTraceString={index=true,type=text},HResult={type=integer},RemoteStackTraceString={index=true,type=text}, RemoteStackIndex={type=integer},深度={type=integer}}}}}]"" 在 Elasticsearch.Net.Transport 1.HandleElasticsearchClientException(RequestData data, Exception clientException, IElasticsearchResponse response) at Elasticsearch.Net.Transport1.FinalizeResponse[TResponse](RequestData requestData,IRequestPipeline 管道,列表1 seenExceptions, TResponse response) at Elasticsearch.Net.Transport1.Request[TResponse](HttpMethod方法、字符串路径、PostData 数据、IRequestParameters requestParameters) 在 Elasticsearch.Net.ElasticLowLevelClient.DoRequest[TResponse](HttpMethod 方法、字符串路径、PostData 数据、IRequestParameters requestParameters) 在 Elasticsearch.Net.NamespacedClientProxy.DoRequest[TResponse](HttpMethod post,字符串 url、PostData 正文、IRequestParameters 参数)位于 Elasticsearch.Net.Specification.IndicesApi.LowLevelIndicesNamespace.PutTemplateForAll[TResponse](字符串名称、PostData 正文、PutIndexTemplateRequestParameters requestParameters)位于 Serilog.Sinks.Elasticsearch.ElasticsearchSinkState.RegisterTemplateIfNeeded()

任何我可能遗漏的线索或有关如何找出错误所在的任何提示?

Cai*_*ete 5

接收器似乎无法向 Elasticsearch 注册模板。这可能是因为您使用的是更新版本的 Elasticsearch 并且没有指定您正在使用哪个版本,因此接收器假设您使用的是 5.0 之前的旧版本

使用该AutoRegisterTemplate功能时,可以设置 Elasticsearch 版本。根据版本,将选择一个模板。默认为 5.0 之前

您应该AutoRegisterTemplateVersion.ESv7AutoRegisterTemplateVersion.ESv6取决于您使用的版本

例如

Log.Logger = new LoggerConfiguration()
    .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200") )
    {
        AutoRegisterTemplate = true,
        AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv7, // <<<<<#####
    })
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)