【问题标题】:Connecting Logstash and Rabbitmq docker containers连接 Logstash 和 Rabbitmq docker 容器
【发布时间】:2015-04-24 14:33:09
【问题描述】:

我正在尝试从 docker 映像启动 Logstash,以将日志发送到在另一个 docker 容器上运行的 RabbitMQ 实例。

我链接了两个容器并使用以下命令和配置文件启动了 Logstash:

docker run --link rabbitmq:rabbit -it log-sender logstash -f config.conf

config.conf:

input { 
    stdin {
    } 
}
output {
    rabbitmq {
        host => "RABBIT_PORT_5672_TCP_ADDR"
        exchange => "test_exchange"
        exchange_type => "fanout"
    }
}

我得到以下错误:

RabbitMQ 连接错误:与 RABBIT_PORT_5672_TCP_ADDR:5672 的连接被拒绝:主机未知。将在 10 秒内尝试重新连接... {:exception=>#, :backtrace=>["/opt/logstash/vendor/bundle/jruby/1.9/gems/march_hare- 2.1.2-java/lib/march_hare/session.rb:361:in 'converting_rjc_exceptions_to_ruby'" , "/opt/logstash/vendor/bundle/jruby/1.9/gems/march_hare-2.1.2-java/lib/march_ha re/session.rb:382:in 'new_connection_impl'", "/opt/logstash/vendor/bundle/jruby/ 1.9/gems/march_hare-2.1.2-java/lib/march_hare/session.rb:82:in '初始化'", "/ ... uts/rabbitmq/march_hare.rb:18:in '注册'", "org/jruby/RubyArray.java:1613:in '每个'", "/opt/logstash/lib/logstash/pipeline.rb:220:in 'outputworker'", "/opt/l ogstash/lib/logstash/pipeline.rb:152:in `start_outputs'"], :level=>:error}

rabbit docker 是base image,使用以下命令运行:

docker run -d -p 5672:5672 -p 15672:15672 rabbitmq

似乎由于某种原因,我的 Logstash 映像无法访问 RabbitMQ 映像的端口。使用 curl 从端口 5672 上的主机使用时,我可以获得响应“AMPQ”,但不能从 Logstash 图像中获得响应。

【问题讨论】:

  • 主机RABBIT_PORT_5672_TCP_ADDR 是否可达?可能您必须指定容器主机名(-h--hostname)并在配置中使用它,或者如果您的 logstash 也驻留在容器中,那么简单的 localhost 就可以了。

标签: docker rabbitmq logstash


【解决方案1】:

我遇到了同样的问题。在How to reference environment variables in logstash configuration file? 的帮助下,我找到了正确的道路。

请记住,您上面的文件是静态 Logstash 配置文件。因此,出现在文件中的字符串 RABBIT_PORT_5672_TCP_ADDR 永远不会被 Logstash 扩展为环境变量 $RABBIT_PORT_5672_TCP_ADDR 中包含的实际 IP 地址。

如何在 Logstash 配置文件中获取正确的 IP 地址? 你没有

Docker 在容器上使用 /etc/hosts 执行 some magic。如果您的多容器环境设置正确,您应该会在 Logstash 容器的 hosts 文件中看到 Rabbit 容器的 name 条目。

这允许您使用 Rabbit 容器的名称作为 Logstash 容器上 Logstash 配置中的地址:

rabbitmq {
    host => "name_of_your_rabbit_container"
}

如果你想仔细检查,copy the Logstash container's hosts file 到你的系统。打开它,您应该会看到一个条目,其中包含 Docker 生成的 IP 地址和您的 Rabbit 容器的名称。

【讨论】:

  • 顺便说一句,如果您还没有这样做,请考虑使用Docker Compose。您仍然必须按照上述正确设置 Logstash 配置,但 Docker Compose(通过 yaml file)将确保容器配置为相互通信。
猜你喜欢
  • 2020-02-09
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多