LoginSignup
44
38

More than 5 years have passed since last update.

dockerでfluentdを動かすときはudpも意識しましょう

Last updated at Posted at 2014-09-04

fluentdにログを転送できない!

docker内で動作するfluentdに対して別のfluentdからログを転送したいのだがどうもうまくいかない。
転送元のログには下記のメッセージ。
「no nodes are available」

fluentdのハートビート

どうもfluentdは転送先のサーバーの死活監視にハートビートと呼ぶUDPパケットを送っているらしい。
エラーメッセージからも転送先サーバーを確認できていないようなので、どうもこのあたりが怪しそうだとあたりがついた。

Dockerのポートを確認

「sudo docker ps」でポートを確認してみると・・・

0.0.0.0:24224->24224/tcp

と表示が。

あ、tcpに限定されているっぽい。

どうもdockerは

docker run -p 24224:24224

のようにしてrunするとtcpしかマッピングされないようだ。

udpを開くには?

こんな感じにtcp/udpを指定できるらしい。
docker run -p 24224:24224/tcp -p 24224:24224/udp

これで動かしたところしっかりdocker内のfluentdにログを転送できました。

2014/9/18追記 dockerコンテナ間でのfluentd転送

転送元がdockerコンテナの場合、out_forwardにdockerのホストのIPを指定すると、転送先のudpポートを開いても転送されませんでした。
dockerコンテナのIPを指定した場合は転送されます。dockerの仮想ブリッジを経由することでハートビートパケットの応答パケットが転送元に届かなくなるためと思われます。
fluentdのout_forwardにheartbeat_type tcpを指定することで、ハートビートをtcpに変更することができます。
これを使うことで、転送先をホストのIPに指定しても転送できました。
パフォーマンスにいくらか影響を与えそうではありますが、udpを自由に開けない環境ではheartbeat_typeでtcpを使うのが簡単そうです。

44
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
38