连接Logstash和Rabbitmq docker容器

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

我链接了两个容器,并使用以下命令和configuration文件启动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:在'conversions_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'initialize'”,“/ … uts / rabbitmq / march_hare.rb:18:在'register'“,”org / jruby / RubyArray.java:1613:in'each'“,”/opt/logstash/lib/logstash/pipeline.rb:220:in'outputworker '“,”/ opt / l ogstash / lib / logstash / pipeline.rb:152:in`start_outputs'“],:level =>:error}

兔子docker是基本的图像 ,运行这个命令:

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

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

我遇到了同样的问题。 我在如何在logstashconfiguration文件中引用环境variables的帮助下,指出了正确的path? 。

请记住,上面的文件是一个静态的Logstashconfiguration文件。 因此,文件中出现的stringRABBIT_PORT_5672_TCP_ADDR不会被Logstash扩展为包含在环境variables$RABBIT_PORT_5672_TCP_ADDR的实际IP地址。

你如何获得正确的IP地址到Logstashconfiguration文件? 你没有

Docker在容器上使用/ etc / hosts来做一些魔术 。 如果正确设置了多容器环境,则应在Logstash容器的hosts文件中看到Rabbit容器名称的条目。

这使您可以使用Rabbit容器的名称作为Logstash容器上Logstashconfiguration中的地址:

 rabbitmq { host => "name_of_your_rabbit_container" } 

如果您想仔细检查, 请将Logstash容器的主机文件复制到您的系统。 打开它,你会看到一个Docker生成的IP地址和你的Rabbit容器的名字。