【发布时间】:2021-10-11 02:04:48
【问题描述】:
我们正在使用 AWS Elasticsearch Service 和 fleuntd 来推送微服务的日志。我们已经使用基于 docker 的配置在 EC2 实例上安装了 fluentd。我们已经按照https://docs.fluentd.org/container-deployment/docker-compose 中提到的步骤进行了操作,并且直到上周它都运行良好。我们正在配置的 elasticsearch 服务和 ec2 实例的配置都没有变化。以下是我们得到的错误日志。
2021-08-05 20:35:57 +0000 [错误]:#0 意外错误 error_class=NoMethodError 错误="未定义方法
host_unreachable_exceptions' for #<Elasticsearch::Transport::Client:0x00007fe5231b5e08>" 2021-08-05 20:35:57 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluent-plugin-elasticsearch-5.0.5/lib/fluent/plugin/elasticsearch_index_template.rb:41:inrescue in retry_operate' 2021-08-05 20:35:57 +0000 [错误]:#0 /usr/lib/ruby/gems/2.7.0/gems/fluent-plugin-elasticsearch-5.0.5/lib/fluent/plugin/elasticsearch_index_template.rb:39:inretry_operate' 2021-08-05 20:35:57 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluent-plugin-elasticsearch-5.0.5/lib/fluent/plugin/out_elasticsearch.rb:487:inhandle_last_seen_es_major_version' 2021-08-05 20:35:57 +0000 [错误]:#0 /usr/lib/ruby/gems/2.7.0/gems/fluent-plugin-elasticsearch-5.0.5/lib/fluent/plugin/out_elasticsearch.rb:339:inconfigure' 2021-08-05 20:35:57 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.13.3/lib/fluent/plugin.rb:178:inconfigure' 2021-08-05 20:35:57 +0000 [错误]:#0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.13.3/lib/fluent/agent.rb:132:inadd_match' 2021-08-05 20:35:57 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.13.3/lib/fluent/agent.rb:74:inblock in configure' 2021-08-05 20:35:57 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.13.3/lib/fluent/agent.rb:64:ineach' 2021-08-05 20:35:57 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.13.3/lib/fluent/agent.rb:64:inconfigure' 2021-08-05 20:35:57 +0000 [错误]:#0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.13.3/lib/fluent/root_agent.rb:146:inconfigure' 2021-08-05 20:35:57 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.13.3/lib/fluent/engine.rb:105:inconfigure' 2021-08-05 20:35:57 +0000 [错误]:#0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.13.3/lib/fluent/engine.rb:80:inrun_configure' 2021-08-05 20:35:57 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.13.3/lib/fluent/supervisor.rb:714:inblock in run_worker' 2021-08-05 20:35:57 +0000 [错误]:#0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.13.3/lib/fluent/supervisor.rb:966:inmain_process' 2021-08-05 20:35:57 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.13.3/lib/fluent/supervisor.rb:706:inrun_worker' 2021-08-05 20:35:57 +0000 [错误]:#0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.13.3/lib/fluent/command/fluentd.rb:364:in<top (required)>' 2021-08-05 20:35:57 +0000 [error]: #0 /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:83:inrequire' 2021-08-05 20:35:57 +0000 [错误]:#0 /usr/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:83:inrequire' 2021-08-05 20:35:57 +0000 [error]: #0 /usr/lib/ruby/gems/2.7.0/gems/fluentd-1.13.3/bin/fluentd:15:in' 2021-08-05 20:35:57 +0000 [错误]:#0 /usr/bin/fluentd:23:inload' 2021-08-05 20:35:57 +0000 [error]: #0 /usr/bin/fluentd:23:in'
下面是使用的配置。
docker-compose.yml
version: '3'
services:
fluentd:
build: ./fluentd
volumes:
- ./fluentd/conf:/fluentd/etc
ports:
- "8880:8880"
- "8880:8880/udp"
Dockerfile
FROM fluent/fluentd:v1.13.3
USER root
RUN ["gem", "install", "fluent-plugin-elasticsearch", "--no-document", "--version", "5.0.5"]
USER fluent
fluentd.conf
<source>
@type forward
port 8880
bind 0.0.0.0
</source>
<match **>
host ES_HOT
port 443
scheme https
logstash_format true
logstash_prefix "fluentd-logs"
logstash_dateformat "%Y%m%d"
user "elastic"
password xxxxxx
flush_interval 10s
fail_on_detecting_es_version_retry_exceed false
verify_es_version_at_startup false
max_retry_get_es_version 2
default_elasticsearch_version 7.10
request_timeout 60s
reload_on_failure true
</match>
我们使用 AWS Elasticsearch Service 7.10、Fluentd v1.12.0-debian-1.0 和 fluent-plugin-elasticsearch 4.3.3 的配置,直到上周都工作得很好。 10 天前配置的 ec2 实例之一也能够连接和推送日志。但是当我们重新启动该实例时,它也停止工作并出现相同的错误。我们有提供所有基础设施的 Terraform 脚本。后来,我们也尝试了不同的版本组合。但没有任何结果。
提前致谢
【问题讨论】:
-
我正在尝试针对 Open Distro for Elasticsearch 设置 fluentd,但我遇到了类似的错误。据我了解,Amazon Elasticsearch Service 使用 Open Distro,因此这可能具有相同的根本原因。我针对等效的 Elasticsearch 正确版本(7.10.2)进行了测试,它能够连接。
标签: docker amazon-ec2 fluentd amazon-ami aws-elasticsearch