2013年6月25日火曜日

Fluentd + out_s3 でタグごとに出力先フォルダを変更する

勿論タグごとに match エレメントを記載してベタ書きしても良いのですが、こういう際は、複数の設定を動的に行えるforest pluginが便利です。

https://github.com/tagomoris/fluent-plugin-forest

◯設定例
<match hoge.**>
    type forest
    subtype s3
    <template>
        aws_key_id [aws_key]
        aws_sec_key [secret_key]
        s3_bucket [bucket_name]
        s3_endpoint [region_name].amazonaws.com
        path fluentd_logs/${tag}/
        buffer_path /var/log/fluentd/${tag}
    </template>
</match>
データの保存先(path ならびに buffer_path)にplace holderとして${tag}を指定しています。
このように設定しておくと、"hoge.**"  のログデータについてタグごとに fluentd_logs/ 配下に保存されるようになります。

一点注意として、out_s3はfile typeのbufferを標準では使用するようになっており、いったんバッファ情報を特定フォルダ(buffer_path)に保存します。その際、buffer_path の保存先をタグごとに振り分けて置かないと、同じbufferファイルに複数タグのデータが保存され、S3保存時にも一緒くたに保存されてしまいます。


◯json内に含まれた値に応じて保存先を変更する
あらかじめ設定されたタグではなく、jsonに含まれた値に応じて保存先を変更したい場合は、rewrite_tag_filter を使用してタグを書き換える、という方法があります。
https://github.com/y-ken/fluent-plugin-rewrite-tag-filter

たとえばFluentdに流れているデータが以下のようなフォーマットになっていて、
1970-01-01T00:00:00+09:00   log.pc    {"event":"register"}
"event" に各種イベント名が含まれており、タグ名とイベント名の組み合わせごとに保存先を変更したい、という場合は以下のように設定します。
<match log.**>
    type forest
    subtype rewrite_tag_filter
    <template>
        remove_tag_prefix log
        capitalize_regex_backreference yes
        rewriterule1 event (.*) hoge.${tag}_$1
    </template>
</match>
log.pc というタグを hoge.pc_register というタグに書き換えています。
こちらと先述のout_s3の定義を組み合わせると、最終的に [bucket_name]/fluentd_logs/hoge.pc_register/ というS3のディレクトリにファイルが保存されます。


0 件のコメント:

コメントを投稿