fluent bitのタグってなんだ?


この記事は ZOZO #3 Advent Calendar 2021 7日目の記事になります。

これまでFfluent bitなど使ったこともなかったのですが、このたび、AWS ECSからのログ送信のためにfluent bitを使うことになり最も苦戦したところを紹介します。

ユースケースとては以下の通り。
1. コンテナベースのサービスであるECSを使う限り、ログは外部に送信する必要がある。
2. ログはDatadog及び、社内で管理できる箇所の2箇所に送信する。fluent bitから2箇所にOutputする処理をしている。
3. 問題は個人情報。社内で管理できる場所はともかく、Datadogなどの外部サービスには出したくないのでこちらのみ個人情報をマスクして送信したい。

マスク自体はfluent bitではlua言語を使ってログを加工することができるので、問題ありません。ただ、普通にマスクして流すとDatadogはもちろん、もう一箇所の方にもマスクした情報が流れてしまいます。なんとかしたい。

そこで便利なのが、タグ機能。普通タグといえば、ブログのタグみたいなものを思い浮かべますが、fluent bitでタグを打つと、タグ別にログを複製するらしく、この機能を使ってDatadogに流す用のタグだけにマスク処理をかけるということができます。

これflent bitのドキュメントから全然見つけられずかなり苦労しました。。。
confファイルはこんな感じになります。

[FILTER]
    Match *
    Rule * masked true # ここでmaskedというタグを打つ。タグがないログとmaskedというタグが付いたログの2つログができる。

[FILTER]
    Name         lua
    Match        masked # maskedが付いたタグのログだけにマスク処理をかける
    script       /mask.lua
    call         mask

[OUTPUT]
    Name         datadog
    Match        masked # maskedが付いたタグのログだけdatadogに流す

[OUTPUT]
    Name         xxxxx
    Match_Regex  ^(?!.*masked).+$ #  maskedが付いていないログをもう一方に流す

ご参考まで。
次の日も自分ですね。localstackがあれば大体何でもローカルでAWS開発ができるというタイトルでお届けします。