地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Fluentd】ログの配信先を複数に振り分ける

docs.fluentd.org

output_copyは1つのログソースを複数のサービスへ送りたいみたいなケースで使えるプラグイン。matchで@type copyを指定したら処理をそれぞれ書くことで複数の送信先を指定することが可能となる。

<source>
  @type tail
  tag qiita.a
  path /var/log/hogehoge.log
</source>

<match **>
  @type copy
  <store>
    # 処理1
    @type file
    path /var/log/fluent/myapp1
    ...
  </store>
  <store>
    # 処理2
    @type s3
    ...
  </store>
  <store>
    # 処理3
    @type forward
    ...
  </store>
</match>

問題点

いろいろググってたら見つけたのだがどうやらcopyはどれか一つでも送信に失敗したら全てのstoreの処理が失敗になるらしい。plugin1がエラーを吐いた時、plugin2は実行されないと言うのは些か不思議な気もする。

じゃあどうするのって話だが記事を読んでるとcopy_exなるものがあるらしいがどうやら公式のプラグインにも同じような機能が取り込まれてるのかドキュメントがあったのでstoreにignore_errorを指定すると良いらしい。

<match app.**>
  @type copy
  <store ignore_error>
    @type plugin1
  </store>
  <store>
    @type plugin2
  </store>
</match>