连接 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 容器的名称。
我正在尝试从 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 地址输入到 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 容器的名称。