使用带有 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>
我正在开发一些 .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>