Fluent Bit v1.4.1对接Elasticsearch参数配置错误求助
问题分析与解决方案
问题根源
- 初始报错是因为Elasticsearch 7.x及以上版本已废弃文档类型(
_type)参数,而Fluent Bit 1.4.1的ES输出插件默认会在批量请求中携带_type字段,触发ES的illegal_argument_exception错误。 - 你添加的
Suppress_Type_Name参数是Fluent Bit 1.5.0及以上版本才新增的配置项,1.4.1版本不支持该参数,因此Pod启动时会提示未知配置。
解决方案
方案1:升级Fluent Bit到1.5.0+版本(推荐)
这是最简洁的解决方式,升级后直接保留你原有的配置,开启Suppress_Type_Name On即可。新版本的ES输出插件会自动停止在批量请求中携带_type参数,完美适配ES 7+的要求。
方案2:在Fluent Bit 1.4.1中通过HTTP输出绕过_type限制
如果无法升级版本,可以改用HTTP输出插件,手动构造符合ES要求的批量请求(不包含_type参数):
添加Lua过滤器格式化请求
创建Lua脚本es_bulk_format.lua,将日志转换为ES批量请求格式:function format_bulk(tag, timestamp, record) -- 构造批量请求的索引元数据(不含_type) local index_name = "someprefix-" .. os.date("%Y.%m.%d") local index_meta = string.format('{"index": {"_index": "%s"}}', index_name) -- 将日志转为JSON字符串 local record_json = cjson.encode(record) -- 返回元数据+日志内容的组合行 return 0, timestamp, index_meta .. "\n" .. record_json end修改Fluent Bit配置
替换原ES输出为HTTP输出,并添加Lua过滤器:[FILTER] Name lua Match * script es_bulk_format.lua call format_bulk [OUTPUT] Name http Match * Host logging.host Port 9000 URI /_bulk Format json_lines HTTP_User someuser HTTP_Passwd somepassword tls On tls.verify False Header Content-Type application/x-ndjson Retry_Limit False该配置会手动生成ES批量请求,完全规避
_type参数的问题。
内容的提问来源于stack exchange,提问作者Carry
相关产品推荐
相关产品推荐

