连接Logstash和Rabbitmq docker容器

时间:2015-04-24 14:33:09

标签: docker rabbitmq logstash

我尝试从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' initialize'"," /   ...   uts / rabbitmq / march_hare.rb:18:在'注册'"," org / jruby / RubyArray.java:1613:in   '每个'"," /opt/logstash/lib/logstash/pipeline.rb:220:输出工作'"," /选择/升   ogstash / lib / logstash / pipeline.rb:152:在`start_outputs'"],:level =>:error}

兔子码头是base image,使用此命令运行:

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

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

1 个答案:

答案 0 :(得分: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容器名称的条目

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

rabbitmq {
    host => "name_of_your_rabbit_container"
}

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