EKS1.22部署Fluent Bit发日志到ES报400 _type参数非法错误
问题场景
在EKS 1.22集群中部署Fluent Bit采集Pod日志传输至ELK栈,参照官方文档部署后出现运行报错,已尝试在配置中添加Suppress_Type_Name On参数,问题未解决。
报错日志
[2022/06/20 16:23:07] [error] [output:es:es.0] HTTP status=400 URI=/_bulk, response: {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Action/metadata line [1] contains an unknown parameter [_type]"}],"type":"illegal_argument_exception","reason":"Action/metadata line [1] contains an unknown parameter [_type]"},"status":400}
当前使用的ConfigMap配置
fluent-bit.conf: | [SERVICE] Flush 1 Log_Level info Daemon off Parsers_File parsers.conf HTTP_Server On HTTP_Listen 0.0.0.0 HTTP_Port 2020 @INCLUDE input-kubernetes.conf @INCLUDE filter-kubernetes.conf @INCLUDE output-elasticsearch.conf input-kubernetes.conf: | [INPUT] Name tail Tag kube.* Path /var/log/containers/*.log Parser docker DB /var/log/flb_kube.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 filter-kubernetes.conf: | [FILTER] Name kubernetes Match kube.* Kube_URL https://kubernetes.default.svc:443 Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token Kube_Tag_Prefix kube.var.log.containers. Merge_Log On Merge_Log_Key log_processed K8S-Logging.Parser On K8S-Logging.Exclude Off output-elasticsearch.conf: | [OUTPUT] Name es Match * Host ${FLUENT_ELASTICSEARCH_HOST} Port ${FLUENT_ELASTICSEARCH_PORT} Logstash_Format On Replace_Dots On Retry_Limit False
问题根因
该报错由Elasticsearch版本与Fluent Bit配置/版本不兼容导致:
- Elasticsearch 7.0及以上版本已废弃索引的
_type元数据字段,8.0版本完全移除了对_type参数的支持,bulk写入请求携带该参数时会直接返回400非法参数错误。 - 你添加的
Suppress_Type_Name On参数未生效,核心原因有两点:- 参数放置位置错误:该参数是Elasticsearch输出插件的专属配置,必须写在
[OUTPUT]配置块内,当前配置并未在输出段添加该参数。 - Fluent Bit版本过低:若使用的Fluent Bit版本低于1.9.0,即使在输出段正确配置了
Suppress_Type_Name,开启Logstash_Format时插件仍存在逻辑缺陷,会自动在bulk请求中注入_type字段。
- 参数放置位置错误:该参数是Elasticsearch输出插件的专属配置,必须写在
解决方案
- 版本适配检查
先对齐Fluent Bit与Elasticsearch的版本兼容要求:- Elasticsearch 7.x系列:Fluent Bit版本不低于1.8.0
- Elasticsearch 8.x系列:Fluent Bit版本不低于1.9.5
若版本不满足要求,先升级Fluent Bit到对应稳定版本。
- 修正输出段配置
将Suppress_Type_Name On参数正确添加到Elasticsearch输出配置块中,修正后的output-elasticsearch.conf配置参考如下:[OUTPUT] Name es Match * Host ${FLUENT_ELASTICSEARCH_HOST} Port ${FLUENT_ELASTICSEARCH_PORT} Logstash_Format On Replace_Dots On Retry_Limit False Suppress_Type_Name On # 若使用Elasticsearch 7.x过渡版本,可额外添加下方参数做兼容 # Type _doc - 生效验证
滚动重启Fluent Bit对应的DaemonSet负载,观察运行日志确认无400报错,同时在Elasticsearch侧查询对应日志索引,确认日志正常写入。
内容的提问来源于stack exchange,提问作者Kocin
相关产品推荐
相关产品推荐

