EC2でセカンダリIPを設定すると、Fluentdのout_forwardからin_forwardへのUDP死活監視が
エラーになる現象が発生したので、対応方法などメモしておきます。

  • ディストリビューション

    • Amazon Linux 2014.03.2 64bit (HVM)
      注意 Fluentd td-agent はAmazon Linuxを正式サポートしていません
  • バージョン

    • Fluentd: v0.10.50 (td-agent v1.1.20)
      ※2014/08/28時点での最新バージョン

 


再現させる最小構成

構成図

  • server01(受信側)はセカンダリIPを設定します
  • server00(送信側)からserver01(受信側)へはポート24224(TCPとUDP両方)が通るようにセキュリティグループの設定を行います

 

設定ファイル

server00のtd-agent.conf

1
2
3
4
5
6
7
8
9
10
11
12
<source>
  type forward
</source>

<match debug.**>
  type forward
  flush_interval 1s
  <server>
    name server01
    host server01のセカンダリIPアドレス
  </server>
</match>

 

server01のtd-agent.conf

1
2
3
4
5
6
7
<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

 


対応方法

以下のどちらかで対応可能です

  1. セカンダリIPではなくプライマリIPを使って受信側へ接続する
  2. 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の間違いです