ELK - 弹性搜索不显示新消息

ELK - Elastic search not displaying new messages

考虑我编写的这段代码使用 dotnet 标准记录器进行记录的情况

using(_logger.BeginScope("RequestId", DateTime.Now.Ticks))
{
     //do some work
}

这基本上在进一步的日志调用的上下文中添加了一个范围变量。

如果出于某种原因,我决定将 属性 的数据类型更改为字符串,如下所示

using(_logger.BeginScope("RequestId", Guid.NewGuid()))
{
     //do some work
}

我在 kibana 仪表板中看不到任何日志。我怀疑它是由于数据类型更改而发生的。我不得不从 kibana 中删除索引,只有在那之后我才能看到日志。

这是预期的行为吗?如果是这样,避免这种情况的最佳做法是什么,因为如果在我们的代码中我们有相同的 属性 名称 - 在不同的上下文中共享多种数据类型,这可能真的很痛苦?

这是预期的,在 elasticsearch 中,文档字段只能有一种数据类型,如果您没有为索引创建 mapping,那么您第一次尝试将文档索引到该索引 elasticsearch将尝试推断字段的类型,并且它只允许具有相同数据类型的数据。

在您的示例中,您的字段 RequestId 可能被索引为日期类型字段,因此 elasticsearch 只会索引 RequestId 是日期类型的文档。

当您尝试将 RequestId 索引为字符串时,elasticsearch 拒绝了该文档,您可以查看日志,您会看到拒绝。

如果你做相反的事情,首先索引为字符串,然后索引为日期类型,你不会得到错误,但日期将被视为字符串,你将无法在此字段中进行范围和日期查询。

根据您的用例,您可以在索引之前将字段映射为关键字或文本,elasticsearch 中的字符串类型,但您将只能使用这些字段作为字符串进行操作和搜索,例如,如果它们具有数字,您将无法使用 elasticsearch 对它们求和。

您可以在 documentation

中阅读有关映射的更多信息