EC2でセカンダリIPを使っているとFluentdのUDP死活監視がエラーになる
EC2でセカンダリIPを設定すると、Fluentdのout_forwardからin_forwardへのUDP死活監視が
エラーになる現象が発生したので、対応方法などメモしておきます。
-
ディストリビューション
- Amazon Linux 2014.03.2 64bit (HVM)
※注意~~ Fluentd~~ td-agent はAmazon Linuxを正式サポートしていません
- Amazon Linux 2014.03.2 64bit (HVM)
-
バージョン
- Fluentd: v0.10.50 (td-agent v1.1.20)
※2014/08/28時点での最新バージョン
- Fluentd: v0.10.50 (td-agent v1.1.20)
再現させる最小構成
- server01(受信側)はセカンダリIPを設定します
- server00(送信側)からserver01(受信側)へはポート24224(TCPとUDP両方)が通るようにセキュリティグループの設定を行います
設定ファイル
server00のtd-agent.conf
<source>
type forward
</source>
<match debug.**>
type forward
flush_interval 1s
<server>
name server01
host server01のセカンダリIPアドレス
</server>
</match>
server01のtd-agent.conf
<source>
type forward
</source>
<match debug.**>
type stdout
</match>
この状態で sudo service td-agent
を実行してしばらくすると、
td-agent.log
に以下のようなエラーログが出力され、server00とserver01の接続が切れてしまします。
2014-08-28 02:42:17 +0000 [warn]: detached forwarding server 'server01' host="server01のセカンダリIPアドレス" port=24224 hard_timeout=true
なお、fluent-catを使ったserver00からserver01への疎通確認は、td-agentを起動した直後は正常に動作します。
$ echo '{"json":"message"}' | /usr/lib64/fluent/ruby/bin/fluent-cat debug.test
対応方法
以下のどちらかで対応可能です
- セカンダリIPではなくプライマリIPを使って受信側へ接続する
- tcpでheartbeatを行う ドキュメントのforward Output Plugin を参照
最後に
上の方でも書きましたが、Amazon LinuxはFluentd td-agent で正式サポートしていません。
Amazon LinuxでFluentdを使いつつ、セカンダリIPで CDP:Floating IPパターン を実現したいという構成を作る場合でのみ、今回の症状が発生すると思います。
2014-08-28訂正
Amazon Linuxを正式にサポートしてないのはFluentdではなくてtd-agentの間違いです
Fluentd自体はその環境でビルドすれば問題ないけど,td-agentはCentOS上でビルドしているので,CentOSと互換性が壊れることもあるAmazon Linuxを,正式にサポートするのは難しいという話
— SKS rep (@repeatedly) August 28, 2014