使用带有 ECS 布局的 Nlog 记录器,在 kibana 中 json 对象显示为字符串而不是多个属性

Using Nlog logger with ECS layout, in kibana the json object appear as a string instead of multiple properties

我正在开发一些 .Net 框架应用程序,我被要求使用 kibana 作为 UI 将日志发送到 elasticsearch。 为了拥有标准化的东西,我必须实施 ECS(弹性通用架构)。

查看我们在 ECS github 上的示例,我们只需按以下方式实现它:

我没有像示例中那样发送到控制台,而是将其发送到弹性搜索

它的输出将是一个不错的 Json 对象...

也许我们希望在 kibana 上看到类似下面的内容 (Kibana - Discover):

看看那个,可能 Json 对象应该被视为一个字符串,所有内容都在 message 属性 中,但这不是我想要的因为,我希望 json 分为许多属性。

由于我是 Elastic stack 世界的新手,我尝试在 Index Management 页面内创建一个模板,并在那里执行手动映射,如 message._metadata.url 不将某些属性视为一部分字符串但没有成功。

我找不到有用的信息来解决这个问题,谁能给点提示?

更新:

我发现 属性 enableJsonLayout="true" 我们可以放在 Nlog 的目标上,它确实将 Json 布局上的内容转换为 ElasticSearch 上的属性,这很好.

这是ECS的正确使用方式吗? 我如何添加其他属性?

当您启用此 enableJsonLayout="true" 时,这意味着配置的布局必须处理所有内容。对于 EcsLayout,您可以在此处找到文档:

https://github.com/elastic/ecs-dotnet/tree/master/src/Elastic.CommonSchema.NLog

EcsLayout 将默认包含所有 LogEvent 属性作为元数据。另见 https://github.com/NLog/NLog/wiki/How-to-use-structured-logging

但您可以显式添加额外的元数据项:

<layout xsi:type="EcsLayout">
   <metadata name="MyProperty" layout="MyPropertyValue" />
</layout>