elasticsearch ELK-弹性搜索不显示新消息,elasticsearch,kibana,elk,elasticsearch,Kibana,Elk" /> elasticsearch ELK-弹性搜索不显示新消息,elasticsearch,kibana,elk,elasticsearch,Kibana,Elk" />

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

elasticsearch ELK-弹性搜索不显示新消息,elasticsearch,kibana,elk,elasticsearch,Kibana,Elk,考虑到这样一种情况,我编写了这段代码,它使用dotnet标准记录器进行日志记录 using(_logger.BeginScope("RequestId", DateTime.Now.Ticks)) { //do some work } 它基本上在进一步的日志调用的上下文中添加了一个范围变量 如果出于某种原因,我决定将该属性的数据类型更改为string,比如如下所示 using(_logger.BeginScope("RequestId", Gu

考虑到这样一种情况,我编写了这段代码,它使用dotnet标准记录器进行日志记录

using(_logger.BeginScope("RequestId", DateTime.Now.Ticks))
{
     //do some work
}
它基本上在进一步的日志调用的上下文中添加了一个范围变量

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

using(_logger.BeginScope("RequestId", Guid.NewGuid()))
{
     //do some work
}
我在kibana仪表板上看不到任何日志。我怀疑这是因为数据类型发生了变化。我不得不从kibana中删除索引,然后才能看到日志


这是预期的行为吗?如果是这样,有什么最佳实践可以避免这种情况,因为如果在我们的代码中,同一个属性名在不同的上下文中共享多个数据类型,这可能会非常痛苦?

这是意料之中的,在elasticsearch中,如果不为索引创建,然后,当您第一次尝试将文档索引到该索引中时,elasticsearch将尝试推断字段的类型,并且它将只允许具有相同数据类型的数据

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

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

如果您做的是相反的操作,首先作为字符串索引,然后作为日期类型索引,则不会出现错误,但日期将被视为字符串,您将无法在此字段中进行范围和日期查询

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


您可以在

中阅读有关映射的更多信息,谢谢您的详细介绍。我想更深入地了解它。e、 g._logger.Information(“已处理{@Position}在{appeased:000}毫秒内”,位置,elapsedMs);假设在现有应用程序中,我们首先将position属性记录为整数。然后出现了一个新特性,我们有一个模型,其中position属性是string类型,开发人员只是尝试使用类似的语法将日志记录放在那里,但日志记录为string。在这个场景中,开发人员不会看到后面用例的任何日志。所以,试着理解解决这个问题的最佳方法。在这种情况下,如果你不想对位置字段进行数字运算,比如,max,min,sum,avg,那么你应该将这个字段存储为关键字,但是在创建索引时需要显式创建映射,否则elastic将看到一个数字,并将字段映射为数字,第二种情况将失败。最好的方法是不要混淆相同字段名的数据类型。例如,您还可以为每个应用程序使用不同的索引。