たごもりすメモ

コードとかその他の話とか。

fluent-plugin-config-expander v0.1.0 released!

世間の Fluentd ユーザのみなさんはFluentdが1プロセスでいったいどれだけ大量のメッセージをさばけるかを実際にご覧になってそのすばらしさに驚いていることと思いますが、もちろん1ノードで処理できるメッセージ数にはいずれ限界があり、メッセージを次段階の処理を行うFluentdに送るときには対象の分散を考えることと思います。

で、カジュアルにスケールさせていったところ out_forward の配送先が10サーバx各8プロセスの合計80ノードになって設定ファイルが爆発したので、設定ファイル内で繰り返しを記述できるプラグインを書いた。

tagomoris/fluent-plugin-config-expander · GitHub
fluent-plugin-config-expander | RubyGems.org | your community gem host

これにより

これが、

<match hoge.**>
  type forward
  num_threads 28
  send_timeout 5s
  flush_interval 1s
  buffer_chunk_limit 8M
  buffer_queue_limit 128
  <server>
    host node01.fluentd.local
    port 24211
  </server>
  <server>
    host node01.fluentd.local
    port 24212
  </server>
  <!-- 77回省略 -->
  <server>
    host node10.fluentd.local
    port 24218
  </server>
</match>

こうなる。

<match hoge.**>
  type config_expander
  <config>
    type forward
    num_threads 28
    send_timeout 5s
    flush_interval 1s
    buffer_chunk_limit 8M
    buffer_queue_limit 128
    <for node in 01 02 03 04 05 06 07 08 09 10>
      <for port in 24211 24212 24213 24214 24215 24216 24217 24218>
        <server>
          host node__node__.fluentd.local
          port __port__
        </server>
      </for>
    </for>
  </config>
</match>

どうよこの圧倒的な威力。DSLなんて大層なものいらんかったんやー。ループさえあればよかったんやー。

タグによりプラグインを動的生成する fluent-plugin-forest と組合せて使えばcaoticに増え続けるプラグインインスタンスの世界をお楽しみいただけます。*1
ノード数が爆発して困っているfluentdユーザのみなさん、ぜひどうぞ。

*1:作者は絶対にそのようなことはすまいと思っています。