You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kibana加载日志报错:index runtime field值数量超出100上限

解决Kibana加载日志时的"index runtime field emits 101 values"错误

问题背景

在Kibana仪表板加载日志时触发错误:

index runtime field is emitting 101 values while the maximum number of values allowed is 100

使用技术栈:Telegraf采集应用日志 → Elasticsearch(通过Ingest Pipeline格式化)→ Kibana展示

现有Ingest Pipeline配置

[
  {
    "remove": {
      "field": [
        "measurement_name",
        "tag.appname",
        "tag.host",
        "tag.dc",
        "tag.env",
        "tag.qcinstance",
        "tag.servergroup"
      ],
      "tag": "remove_tag_fields"
    }
  },
  {
    "json": {
      "field": "loggly_logs.msg",
      "target_field": "log_message"
    }
  },
  {
    "remove": {
      "field": "loggly_logs.msg"
    }
  },
  {
    "date": {
      "field": "log_message.timestamp",
      "formats": [
        "ISO8601"
      ],
      "target_field": "@timestamp"
    }
  }
]

现有索引模板配置

{
  "template": {
    "settings": {
      "index": {
        "mapping": {
          "total_fields": {
            "limit": "1000"
          }
        }
      }
    },
    "mappings": {
      "dynamic": "runtime"
    },
    "aliases": {}
  }
}

问题原因

索引模板中设置了"dynamic": "runtime",这会让所有未预先定义的字段自动生成为运行时(runtime)字段。而Elasticsearch默认限制单个runtime字段的可返回唯一值数量为100,当某个动态生成的runtime字段的唯一值超过100个时,就会触发该错误。

解决方案

方案1:调高runtime字段的唯一值限制

在索引模板的settings中添加index.mapping.runtime_fields.limit参数,调整允许的最大唯一值数量(比如设置为200):

{
  "template": {
    "settings": {
      "index": {
        "mapping": {
          "total_fields": {
            "limit": "1000"
          },
          "runtime_fields": {
            "limit": "200"
          }
        }
      }
    },
    "mappings": {
      "dynamic": "runtime"
    },
    "aliases": {}
  }
}

注意:修改模板后,新创建的索引才会生效,现有索引需要重新索引才能应用新配置。

方案2:限制动态字段的生成

如果不需要所有未定义字段都作为runtime字段,可以调整索引模板的dynamic策略:

  • 设置为"dynamic": "strict":拒绝新增未预先定义的字段,避免不必要的runtime字段生成
  • 设置为"dynamic": "false":忽略新增的未定义字段,不会创建对应的runtime字段
  • 自定义允许的动态字段规则,仅对特定前缀/后缀的字段生成runtime字段

示例(设置为dynamic: false并定义必需字段):

{
  "template": {
    "settings": {
      "index": {
        "mapping": {
          "total_fields": {
            "limit": "1000"
          }
        }
      }
    },
    "mappings": {
      "dynamic": "false",
      "properties": {
        "@timestamp": {"type": "date"},
        "log_message": {"type": "object"}
      }
    },
    "aliases": {}
  }
}

方案3:优化Ingest Pipeline,提前过滤冗余字段

在Ingest Pipeline中新增remove步骤,提前清理log_message中不需要的子字段,减少后续生成的runtime字段数量:

[
  {
    "remove": {
      "field": [
        "measurement_name",
        "tag.appname",
        "tag.host",
        "tag.dc",
        "tag.env",
        "tag.qcinstance",
        "tag.servergroup"
      ],
      "tag": "remove_tag_fields"
    }
  },
  {
    "json": {
      "field": "loggly_logs.msg",
      "target_field": "log_message"
    }
  },
  // 新增:移除log_message中不需要的子字段
  {
    "remove": {
      "field": [
        "log_message.unnecessary_field1",
        "log_message.unnecessary_field2"
      ]
    }
  },
  {
    "remove": {
      "field": "loggly_logs.msg"
    }
  },
  {
    "date": {
      "field": "log_message.timestamp",
      "formats": [
        "ISO8601"
      ],
      "target_field": "@timestamp"
    }
  }
]

内容的提问来源于stack exchange,提问作者Saikat Konar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:09:52