📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

适用版本: 7-7.15

1. 错误异常的基本描述 #

[auto_create_index] contains [-pattern] which forbids automatic creation of the index 表示集群并不是全局关闭了自动建索引,而是 action.auto_create_index 使用了带黑白名单的 pattern 规则,目标索引命中了某个负向规则,因此被拒绝自动创建。

常见现象 #

  • 某些索引前缀可以自动创建,另一些特定前缀始终失败。
  • action.auto_create_index 不是简单的 truefalse,而是一串 pattern,例如 +logs-*,-tmp-*
  • 上游写入链路在更换索引命名规则后突然命中黑名单。

典型报错与异常栈 #

org.elasticsearch.index.IndexNotFoundException: no such index [tmp-orders-2026.03.31] and [action.auto_create_index] contains [-tmp-*] which forbids automatic creation of the index

2. 为什么会发生这个错误 #

这是 action.auto_create_index pattern 模式下的拦截行为。只要索引名命中某个负向 pattern,Elasticsearch 就会拒绝自动创建。常见触发原因包括:

  • 运维通过负向 pattern 禁止临时索引、测试索引或高风险前缀自动创建。
  • 新版业务命名规则变更后,误命中了旧的 deny pattern。
  • 规则维护时间久了,没人清楚某个 -pattern 还在生效。
  • 某些组件原先写入白名单索引,后来改名前缀后落入黑名单。

3. 如何排查和解决这个异常和解决这个异常 #

重点不是看“auto create 开没开”,而是看 pattern 列表和索引名匹配结果。

  1. 查看当前集群设置:
GET /_cluster/settings?include_defaults=true
  1. 找到 action.auto_create_index 的完整 pattern 列表。
  2. 将报错中的目标索引名与每个 +pattern-pattern 逐一比对,确认具体命中了哪个负向规则。
  3. 回看最近索引命名规则或集群设置变更,确认是规则变了还是索引名变了。
  4. 如果业务确实需要该前缀自动创建,评估修改 pattern 或改为显式建索引。

排查时需要注意的问题 #

  • 这是规则匹配问题,不是简单的布尔开关问题。
  • 负向 pattern 经常被忽略,因为很多人只看到了配置存在,却没认真核对匹配顺序和命中结果。
  • 如果集群里有多个写入系统,共享修改 pattern 前要评估对其他索引前缀的影响。

4. 如何解决这个错误 #

常用修复思路 #

  • 如果目标索引本来就不该自动创建,保留当前规则,并改为显式建索引。
  • 如果黑名单规则过宽,收窄 -pattern 的匹配范围。
  • 如果新索引前缀本应允许自动创建,将其加入允许模式,或移出负向规则影响范围。
  • 在索引命名规范变更前增加规则回归检查,避免上线后才触发拒绝创建。

相关 Elasticsearch API #

  • GET /_cluster/settings?include_defaults=true:查看完整 auto create 配置。
  • PUT /_cluster/settings:更新 action.auto_create_index 规则。
  • PUT /{index}:显式创建索引,绕开自动创建依赖。

借助 INFINI 产品提升排障效率 #

  • INFINI Console 可帮助关联集群设置变更、索引创建失败趋势和受影响索引前缀。
  • INFINI Gateway 可帮助识别是哪些客户端在持续写入被 deny pattern 拦截的索引名。

5. 小结 #

[auto_create_index] contains [-pattern] which forbids automatic creation of the index 的关键在 pattern 命中。处理时要先找出具体哪条负向规则拦住了目标索引,再决定修改规则、修改索引命名,还是改用显式建索引。

附:日志上下文 #

[auto_create_index] contains [-xxx] which forbids automatic creation of the index
Caused by: IndexNotFoundException