K8S部署EFK栈时ElasticSearch8报[_type]未知参数400错误求助
错误产生原因
- Elasticsearch 自7.x版本开始正式废弃映射类型(Mapping Types)相关能力,单索引仅支持默认的
_doc类型,7.x版本对携带_type参数的请求做兼容处理但会输出废弃警告,8.x版本完全移除_type参数支持,所有携带该参数的请求都会直接返回400 Bad Request错误。 - 本次报错的触发源是Fluentd的Elasticsearch输出插件在写入请求中默认携带了
_type参数,被ES8的校验逻辑拦截。
配置排查方向
检查Fluentd配置文件中<match>段的Elasticsearch输出配置,重点关注两类配置:
- 旧版本Fluentd Elasticsearch输出插件(低于v5.0.0版本)默认会添加
type_name配置,默认值为fluentd,该参数会直接映射为请求中的_type字段 - 第三方公开教程的老旧配置模板通常会显式配置
type_name参数,无论参数值是什么,在ES8环境下都会触发报错
ES8适配配置参考
基础输出配置
<match k8s.**> @type elasticsearch host elasticsearch-master # K8S集群内ES服务域名 port 9200 logstash_format false index_name k8s-log-%Y%m%d # 删除所有和type_name相关的配置行 # 若使用v4及以下版本的插件,显式添加以下配置禁止携带_type参数 suppress_type_name true # ES8默认开启身份认证需补充以下配置 ssl true verify_ssl false user "elastic" password "你的ES elastic用户密码" </match>
版本适配建议
优先将Fluentd的fluent-plugin-elasticsearch插件升级到v5.0.0及以上版本,该版本默认适配ES8,移除了所有_type相关的默认逻辑,无需额外配置suppress_type_name参数即可正常写入。
内容的提问来源于stack exchange,提问作者Sathish Kumar
相关产品推荐
相关产品推荐

