K8s下EFK栈配置ILM后日志仍写入旧索引问题咨询
问题根因
你配置的ILM策略、索引模板、引导别名均无问题,故障核心出在Fluentbit的ES输出配置:当前你启用了Logstash_Format On参数,该参数会自动按照Logstash_Prefix+YYYY.MM.DD的规则生成索引名称,直接写入对应日期索引,完全没有使用你提前配置的new-alias写别名,因此日志还是写入旧格式索引,ILM托管的序列化索引无法接收数据。
排查验证步骤
- 先验证ES侧配置有效性:执行如下命令写入测试数据
POST new-alias/_doc/test-doc-001 { "test_field": "test_value" }
随后查询当前is_write_index为true的索引new-2021.09.30-000013,确认测试数据已写入该索引,即可证明ES侧ILM、别名、模板配置均正常,问题完全出在Fluentbit配置。
- 查看Fluentbit运行日志,确认日志输出的目标索引为
new-YYYY.MM.DD格式,进一步验证配置问题。
解决方法
推荐使用修改Fluentbit写入目标为别名的方案,改造成本最低,逻辑最清晰:
修改Fluentbit的ES输出配置如下:
[OUTPUT] Name es Match * Host ${FLUENT_ELASTICSEARCH_HOST} Port ${FLUENT_ELASTICSEARCH_PORT} HTTP_User ${FLUENT_ELASTICSEARCH_USER} HTTP_Passwd ${FLUENT_ELASTICSEARCH_PASSWORD} # 关闭Logstash自动按日期生成索引的逻辑 Logstash_Format Off # 直接指定写入ILM绑定的写别名 Index new-alias Trace_Error On Replace_Dots On Retry_Limit False tls On tls.verify Off
修改完成后重启Fluentbit Pod,后续新日志就会写入别名,由ILM自动按照你配置的规则滚动生成带序列号的新索引。
额外优化建议
- 原有旧格式的
new-YYYY-MM-DD索引可以手动绑定ILM策略,或者配置单独的清理规则,避免占用存储空间。 - ILM的rollover规则建议补充
max_size(建议单分片设为30-50GB)、max_docs参数,仅按时间滚动在流量波动场景下仍可能出现分片过大的问题,多条件触发更稳妥。
内容的提问来源于stack exchange,提问作者Mitesh Gangaramani
相关产品推荐
相关产品推荐

