Logstash开启Elasticsearch data_stream时指定index参数报错无法分配索引
故障根因
报错的核心是Logstash Elasticsearch输出插件开启数据流模式后,禁止使用index参数:你配置的data_stream => "true"会触发插件的配置校验逻辑,该逻辑会在Pipeline初始化阶段(早于数据摄入处理环节)检测是否存在index、document_type这类传统索引模式的专属参数,只要存在就会直接抛出配置不兼容错误,导致Pipeline创建失败。
解决方案
根据你的使用场景二选一即可:
场景1:需要保留数据流功能
数据流的名称由固定规则拼接生成:{data_stream_type}-{data_stream_dataset}-{data_stream_namespace},三个参数均支持字段动态引用,你可以把原来写在index参数里的逻辑迁移到对应数据流参数上,示例配置如下:
output { elasticsearch { cloud_id => "..." data_stream => "true" ssl => "true" api_key => "..." document_id => "%{_log_id}" # 将原index的取值赋值给data_stream_dataset,也可根据需求分配给type或namespace参数 data_stream_dataset => "%{target_index}" # 可自定义修改以下两个参数的默认值:默认type为logs,默认namespace为default # data_stream_type => "metrics" # data_stream_namespace => "prod" } }
场景2:不需要数据流功能,仅要写入自定义普通索引
直接删除data_stream => "true"配置项即可,你原来写的index => "%{target_index}"参数即可正常生效。
补充说明
Logstash 7.13版本属于较早支持Elasticsearch数据流的版本,该配置校验逻辑是官方预设的规则,不属于版本Bug,后续所有版本均保留了该约束。
内容的提问来源于stack exchange,提问作者DSchana
相关产品推荐
相关产品推荐

