elasticsearch 为什么我的索引模板中没有定义这些字段,而elasticsearch却使用了这些字段?
我禁用了索引模板中的动态字段:elasticsearch 为什么我的索引模板中没有定义这些字段,而elasticsearch却使用了这些字段?,elasticsearch,logstash,elastic-stack,elasticsearch,Logstash,Elastic Stack,我禁用了索引模板中的动态字段: { "template": "logstash-mysexylogs*", "order": 10, "mappings": { "_default_": { "dynamic": false, "_all": { "enabled": false }, 现在,当我在Kibana查看我的日志时,我偶尔会看到: 这些字段没有在模板中定义,因此它们根本不应该存在,但对于一些日志,我将看到它们,
{
"template": "logstash-mysexylogs*",
"order": 10,
"mappings": {
"_default_": {
"dynamic": false,
"_all": {
"enabled": false
},
现在,当我在Kibana查看我的日志时,我偶尔会看到:
这些字段没有在模板中定义,因此它们根本不应该存在,但对于一些日志,我将看到它们,如屏幕截图所示
为什么会发生这种情况,并且只发生在少数日志中(不是所有日志),我如何防止这种情况发生
如果我没有在模板中过滤掉这些字段,那么所有日志中都会出现这些特定字段,因此我不明白为什么只有很少几个字段会出现这种情况,而不是所有字段都会出现这种情况。您需要将dynamic设置为strict
"mappings": {
"_default_": {
"dynamic": "strict"
}
}
根据,
如果elasticsearch检测到新字段,默认情况下会将其添加到映射中。设置“dynamic”:false将关闭此设置,并且不会动态添加新字段
post也可能有帮助。您需要将dynamic设置为strict
"mappings": {
"_default_": {
"dynamic": "strict"
}
}
根据,
如果elasticsearch检测到新字段,默认情况下会将其添加到映射中。设置“dynamic”:false将关闭此设置,并且不会动态添加新字段
post也可能会有帮助。由于弹性搜索是无模式的,它将尝试按照提供的方式对整个文档进行索引。黄色标记表示该字段(在您的情况下为userAgent_patch、userAgent_minor等)没有正确的映射(保留为noot_)。所以你可以做两件事:1。要删除此符号,请更新索引模式的映射。2.看看为什么这些字段被提供给elasticsearch(在发送给elasticsearch之前删除它们)。您可以使用mutate logstash插件来添加或删除字段。使用rest命令查看索引到Elasticsearch的映射,而不是从Kibana。如果你能在这里提供完整的映射,你需要将dynamic设置为strict<代码>“映射”:{“默认值”:{“动态”:“严格”}
可能会有帮助。您可以发布这样的消息,因为answerAs elasticsearch是无模式的,它将尝试按照提供给它的方式索引整个文档。黄色标记表示该字段(在您的情况下为userAgent_patch、userAgent_minor等)没有正确的映射(保留为noot_)。所以你可以做两件事:1。要删除此符号,请更新索引模式的映射。2.看看为什么这些字段被提供给elasticsearch(在发送给elasticsearch之前删除它们)。您可以使用mutate logstash插件来添加或删除字段。使用rest命令查看索引到Elasticsearch的映射,而不是从Kibana。如果你能在这里提供完整的映射,你需要将dynamic设置为strict<代码>“映射”:{“\u默认值”:{“动态”:“严格”}}
可能会有所帮助。您可以将其作为答案发布日志堆栈的行为是否有所不同?我使用logstash将模板应用于索引。当我设置这个日志时,我刚刚开始删除模板中没有定义字段的所有文档。我不希望我只是希望它不添加这些字段。如果模板设置为strict,并且传递的字段未在模板中定义,elasticsearch将抛出400错误,并且无法创建文档。您可以在日志存储日志中看到错误。您可以选择不同的输入数据,即显式选择,也可以使用mutate过滤器删除字段<代码>过滤器{mutate{remove_field=>['redired_field','redired_tag']}啊,好吧,这就是我不确定的地方。如果可以避免的话,我想避免显式地做突变或其他事情,但我想这是不可能的。为什么它必须拒绝整个文档而不是不添加这些字段?Elasticsearch可能会假设,如果映射是严格的,那么您知道数据是什么样子的,并且您不希望传入任何坏数据。从:“strict
如果检测到新字段,将引发异常并拒绝文档”日志存储的行为是否有所不同?我使用logstash将模板应用于索引。当我设置这个日志时,我刚刚开始删除模板中没有定义字段的所有文档。我不希望我只是希望它不添加这些字段。如果模板设置为strict,并且传递的字段未在模板中定义,elasticsearch将抛出400错误,并且无法创建文档。您可以在日志存储日志中看到错误。您可以选择不同的输入数据,即显式选择,也可以使用mutate过滤器删除字段filter{mutate{remove\u field=>['needed\u field','unned\u标记']}}}
Ah ok,这是我不确定的。如果可以避免的话,我想避免显式地做突变或其他事情,但我想这是不可能的。为什么它必须拒绝整个文档而不是不添加这些字段?Elasticsearch可能会假设,如果映射是严格的,那么您知道数据是什么样子的,并且您不希望传入任何坏数据。从:“strict
如果检测到新字段,将引发异常并拒绝文档”