20
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

fluentd copyプラグイン条件分岐

今更だけど、fluentdで一つのタグ(一部条件マッチする)に対して、条件分岐的に複数のアウトプットを行いたい時に少しはまったのでメモ。
要は、copyプラグインのstore句にタグ条件が書ける事を知ったという話です。

やりたい事

複数サーバから出てくる一つ一つのイベントに対して、一部マッチする複数のタグ条件で異なる処理を行いたい。
例えば、アクセスログを集めてきて、

①web.a.bというタグのものは、file出力とs3保管
②xweb.a.bというタグのものは、file出力のみ

こんな時、下記のようなフィルタを何も考えずに書くと、#1のファイル出力だけ処理され、#2のs3への処理は行われない。

個人的にはちょっと忘れがちだけど、fluentdは一つのイベントに対して、先にマッチするものがあると後のmatch句は効かない。。

#1
<match *.a.b>
  type file
  path /tmp/aaa
</match>

#2
<match web.a.b>
  type s3
  ・・・
</match>

で、そんな時どうするか。

下記のように、copyを使ってstoreにマッチングするタグパターンを記述すれば実現出来る。 という嘘情報を書いたところ @tatsu-yam に勘違いを指摘いただいたので修正

<match web.a.b>
  type copy
  <store> 
    type file
  </store>
  <store>
    type s3
  </store>
</match>
<match *.a.b>
   type file
</match>

store句の条件を指定出来ると知らずに、どうフィルタリングしようかとか結構迷ってしまった。
もっといい方法あるのかな。。

タグルーティングが冗長になりすぎてかなり長くなるのが悩ましい。。

久々に触ると色々忘れてるなと実感。。
改めて、fluentdはタグの設計が大事だなと思いました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
20
Help us understand the problem. What are the problem?