连接 Logstash 和 Rabbitmq docker 个容器

Connecting Logstash and Rabbitmq docker containers

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

我链接了两个容器并使用以下命令和配置文件启动了 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 connection error: Connection to RABBIT_PORT_5672_TCP_ADDR:5672 refused: host unknown. Will attempt to reconnect in 10 seconds... {: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:in '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是base image,运行用这个命令:

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

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

我运行陷入同样的​​问题。在 How to reference environment variables in logstash configuration file?.

的帮助下,我找到了正确的路径

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

中包含的实际 IP 地址

如何将正确的 IP 地址输入到 Logstash 配置文件中? 你没有

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

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

rabbitmq {
    host => "name_of_your_rabbit_container"
}

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