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

Logstash向Elastic发送数据时ILM策略执行失败求助

问题原因与修复方案

核心错误原因

你把ILM滚动别名(index.lifecycle.rollover_alias)设成了通配符okd-*-*-*,但ILM滚动别名必须是具体的、唯一的名称,通配符无法被Elasticsearch识别为有效的滚动目标,导致索引和别名无法绑定,触发报错。

修复步骤

1. 调整Logstash输出配置

修改Logstash的Elasticsearch输出,让索引名采用「别名+递增序号」的格式,同时指定对应的滚动别名:

output {
  elasticsearch {
    hosts => ["你的ES地址:9200"]
    # 初始索引名,末尾带5位递增序号
    index => "okd-%{[@metadata][beat]}-%{[@metadata][version]}-000001"
    # 绑定的滚动别名,和索引名前缀一致
    ilm_rollover_alias => "okd-%{[@metadata][beat]}-%{[@metadata][version]}"
    # 指定ILM策略
    ilm_policy => "okd"
  }
}

2. 重新配置索引模板

删除原有模板,创建新模板,确保滚动别名能动态匹配索引前缀:

DELETE _template/okd

PUT _template/okd
{
  "index_patterns": ["okd-*-*-*"],
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1,
    "index.lifecycle.name": "okd",
    # 通过模板变量自动从索引名提取别名(去掉末尾的序号)
    "index.lifecycle.rollover_alias": "{{_index | regex_replace('-(\\d+)$', '')}}"
  },
  "mappings": {
    # 你的字段映射内容
  }
}

3. 验证ILM策略

确保okd策略的配置正确:

GET _ilm/policy/okd

确认热阶段时长为1天,删除阶段时长为2天,且策略已生效。

关键说明

  • 每个beat+version组合会对应一个独立的滚动别名(比如okd-filebeat-8.10.2),ILM会针对每个别名下的索引独立执行滚动和生命周期管理。
  • 不要用通配符作为滚动别名,必须是具体的名称,Elasticsearch才能准确关联索引和生命周期策略。

内容的提问来源于stack exchange,提问作者Viktor Nosatskyi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:55:21