serilog-sinks-elasticsearch icon indicating copy to clipboard operation
serilog-sinks-elasticsearch copied to clipboard

Serilog Elastic Search cloud logging issue - illegal_argument_exception Reason

Open rafaldev opened this issue 3 years ago • 1 comments
trafficstars

I tested two registration and both do not work

*User is ok. when I used this configuration to not ElasticSearch Cloud in Azure this configuration worked correctly

Packages:

Serilog 2.10.0
Serilog.AspNetCore 3.4.0
Serilog.Sinks.Elasticsearch 8.4.1
Serilog.Sinks.File 4.1.0
var logger2 = new LoggerConfiguration()
                .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("https://test.es.westus2.azure.elastic-cloud.com:9243"))
                {
                    IndexFormat = "logs-test-{0:yyyy.MM.dd}",
                    AutoRegisterTemplate = true,
                    ModifyConnectionSettings = x => x.BasicAuthentication("elastic", "password")
                }).CreateLogger();

            logger2.Error("test");

------------------

createLoggerPolicy.Execute(
                () => Log.Logger = new LoggerConfiguration()
                    .Enrich.WithProperty("Environment", configuration.Environment)
                    .Enrich.WithProperty("Application", configuration.ApplicationName)
                    .MinimumLevel.Debug()
                    .MinimumLevel.Override("Quartz", LogEventLevel.Information)
                    .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
                    .MinimumLevel.Override("Hangfire", LogEventLevel.Warning)
                    .MinimumLevel.Override("MassTransit", LogEventLevel.Debug)
                    .WriteTo.File(configuration.LogsPath, rollingInterval: RollingInterval.Day)
                    .ConditionalConfiguration(configuration.ElasticSearch.SinkEnabled, x =>
                        x.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(configuration.ElasticSearch.Url)
                        {
                            ConnectionTimeout = TimeSpan.FromSeconds(configuration.ElasticSearch.ConnectionTimeout),
                            IndexFormat = "logs-test-{0:yyyy.MM.dd}",
                            AutoRegisterTemplate = true,
                            AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv7,
                            DetectElasticsearchVersion = true,
                            CustomFormatter = new ExceptionAsObjectJsonFormatter(renderMessage: true),
                            ModifyConnectionSettings = connectionConfiguration =>
                                connectionConfiguration.BasicAuthentication(
                                    configuration.ElasticSearch.Username,
                                    configuration.ElasticSearch.Password),
                            EmitEventFailure =
                                EmitEventFailureHandling.WriteToSelfLog |
                                EmitEventFailureHandling.RaiseCallback |
                                EmitEventFailureHandling.ThrowException,
                            FailureCallback = e => { Console.WriteLine("Unable to submit event " + e.MessageTemplate); },
                            BatchAction = ElasticOpType.Create
                        }))
                    .CreateLogger());

            Serilog.Debugging.SelfLog.Enable(message => Console.WriteLine(message));

rafaldev avatar Aug 30 '22 17:08 rafaldev

fixed -> added this ->

x.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(configuration.ElasticSearch.Url)
                        {
                            TypeName = null,

2022-08-31T07:09:36.4317086Z Caught exception while preforming bulk operation to Elasticsearch: Elasticsearch.Net.ElasticsearchClientException: Request failed to execute. Call: Status code 400 from: POST /_bulk. ServerError: Type: illegal_argument_exception Reason: "Action/metadata line [1] contains an unknown parameter [_type]" at Elasticsearch.Net.Transport1.HandleElasticsearchClientException(RequestData data, Exception clientException, IElasticsearchResponse response) at Elasticsearch.Net.Transport1.FinalizeResponse[TResponse](RequestData requestData, IRequestPipeline pipeline, List1 seenExceptions, TResponse response) at Elasticsearch.Net.Transport1.RequestAsync[TResponse](HttpMethod method, String path, CancellationToken cancellationToken, PostData data, IRequestParameters requestParameters) at Serilog.Sinks.Elasticsearch.ElasticsearchSink.EmitBatchAsync(IEnumerable`1 events)

rafaldev avatar Aug 31 '22 07:08 rafaldev