Я использую Приемник Serilog HTTP для входа в Logstash в моем .Net Core Project.В файле startup.cs у меня есть следующий код для включения serilog.
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.Http("http://mylogstashhost.com:5000").Enrich.WithProperty("user", "xxx").Enrich.WithProperty("serviceName", "yyy")
.MinimumLevel.Warning()
.CreateLogger();
И этот код отправляет журналы на указанный http-адрес.На фиддлере я вижу, что следующий json публикуется в logstash, и logstash возвращает сообщение "ok".
{"events":[{"Timestamp":"2018-10-19T18:16:27.6561159+01:00","Level":"Warning","MessageTemplate":"abc","RenderedMessage":"abc","user":"xxx","serviceName":"yyy","Properties":{"ActionId":"b313b8ed-0baf-4d75-a6e2-f0dbcb941f67","ActionName":"MyProject.Controllers.HomeController.Index","RequestId":"0HLHLQMV1EBCJ:00000003","RequestPath":"/"}}]}
Но когда я проверял Кибану, я не вижу этот журнал.Я попытался выяснить, чем это вызвано, и я понял, что если я отправлю json в следующем формате, я смогу увидеть журнал.
{"Timestamp":"2018-10-19T18:16:27.6561159+01:00","Level":"Warning","MessageTemplate":"abc","RenderedMessage":"abc","user":"xxx","serviceName":"yyy","Properties":{"ActionId":"b313b8ed-0baf-4d75-a6e2-f0dbcb941f67","ActionName":"MyProject.Controllers.HomeController.Index" ,"RequestId":"0HLHLQMV1EBCJ:00000003","RequestPath":"/"}}
Так что Logstash не нравится, чтобы событие было в Events {}, а также онохочет, чтобы теги "user" и "ServiceName" были удалены из "Properties".Есть ли способ отформатировать мой Json, как это?