この記事は ZOZO #3 Advent Calendar 2021 7日目の記事になります。
これまでFfluent bitなど使ったこともなかったのですが、このたび、AWS ECSからのログ送信のためにfluent bitを使うことになり最も苦戦したところを紹介します。
ユースケースとては以下の通り。
- コンテナベースのサービスであるECSを使う限り、ログは外部に送信する必要がある。
- ログはDatadog及び、社内で管理できる箇所の2箇所に送信する。fluent bitから2箇所にOutputする処理をしている。
- 問題は個人情報。社内で管理できる場所はともかく、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開発ができるというタイトルでお届けします。