为什么这些字段落入 elasticsearch 而我的索引模板中没有定义?

Why are these fields falling through to elasticsearch that are not defined in my index template?

我在索引模板中禁用了动态字段:

{
  "template": "logstash-mysexylogs*",
  "order": 10,
  "mappings": {
    "_default_": {
      "dynamic": false,
      "_all": {
        "enabled": false
      },

现在当我在 Kibana 中查看我的日志时,我偶尔会看到:

这些字段未在模板中定义,因此它们根本不应该存在,但对于一些日志,我会看到它们,如屏幕截图所示。

为什么会发生这种情况并且只发生在少数(不是所有日志)中,我该如何防止这种情况发生?

如果我没有在模板中过滤掉这些特定字段,这些特定字段将出现在所有日志中,所以我很困惑为什么只有少数而不是全部发生这种情况。

您需要将动态设置为严格。

"mappings": { 
  "_default_": { 
    "dynamic": "strict" 
  } 
}

根据 documentation, 如果 elasticsearch 检测到一个新字段,它会默认将其添加到映射中。设置 "dynamic": false 关闭此设置,并且不会动态添加新字段。

post 也可能有帮助。