如何配置Fluentd连接OpenDistro for Elasticsearch并解决连接报错
Fluentd连接OpenDistro for Elasticsearch失败解决方案
问题根源
报错Elasticsearch::UnsupportedProductError的核心原因是:你使用的fluent-plugin-elasticsearch 5.1.2版本依赖官方Elasticsearch Ruby客户端≥7.14,该版本客户端加入了发行版校验逻辑,OpenDistro是AWS基于Elasticsearch的分叉发行版,无法通过官方校验,因此直接抛出异常中断启动。
具体修复步骤
步骤1:修正Fluentd镜像依赖(二选一即可)
方案A:降级elasticsearch插件到无校验的4.x版本
修改Dockerfile内容如下:
FROM fluentd:v1.14.0-debian-1.0 USER root RUN ["gem", "install", "fluent-plugin-elasticsearch", "--no-document", "--version", "4.3.3"] USER fluent
方案B:替换为OpenDistro/OpenSearch专用插件(更稳定,推荐)
OpenSearch是OpenDistro的后续正式版本,专用插件完全兼容OpenDistro,无发行版校验问题:
FROM fluentd:v1.14.0-debian-1.0 USER root RUN ["gem", "install", "fluent-plugin-opensearch", "--no-document"] USER fluent
如果选择此方案,后续需要同步修改fluent.conf中的插件类型,将@type elasticsearch改为@type opensearch,其余配置参数保持不变。
步骤2:修正docker-compose.yml配置错误
你当前配置中elasticsearch和kibana的image字段错误包含了docker pull命令,需要删除:
services: elasticsearch: # 删掉原有image值前面的docker pull image: amazon/opendistro-for-elasticsearch:latest # 其余原有配置保持不变 kibana: # 删掉原有image值前面的docker pull image: amazon/opendistro-for-elasticsearch-kibana:latest # 其余原有配置保持不变
步骤3:适配Fluentd配置(仅方案A需要,方案B跳过)
在fluent.conf的elasticsearch存储配置块中新增两个参数,跳过版本校验:
<store> @type elasticsearch host elasticsearch port 9200 user admin password admin logstash_format true logstash_prefix fluentd logstash_dateformat %Y%m%d include_tag_key true type_name access_log tag_key @log_name scheme https ssl_verify false # 新增以下两行配置 verify_es_version_at_startup false default_elasticsearch_version 7 </store>
验证
重新构建Fluentd镜像,重启所有容器,Fluentd不会再抛出校验错误,采集的日志会正常写入OpenDistro,可在Kibana中查看fluentd-*前缀的索引验证数据。
内容的提问来源于stack exchange,提问作者Alexander Mladzhov
相关产品推荐
相关产品推荐

