これは、なにをしたくて書いたもの?
Fluentdでは、ひとつのレコードを複数の出力先で扱う場合、copy Output Pluginを使用します。
これを、Fluent Bitでやる場合はどうするのかな?ということで、調べてみました。
結論は、とても単純でしたが。
Fluent Bitで複数のOutputを使う
Fluent Bitのドキュメントには、Fluentdでいうcopy Output Pluginに相当するものはありません。
どうするのかな?と思ったら、ストレートに解答したissueがありました。
Output plugin · Issue #721 · fluent/fluent-bit · GitHub
これを見ると、タグが複数のOutput Pluginにマッチするように設定を書けばよいみたいです。とてもシンプル。
というわけで、今回はこれを確認してみます。
環境
今回の環境は、こちらです。
$ uname -srvmpio Linux 4.15.0-101-generic #102-Ubuntu SMP Mon May 11 10:07:26 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.4 LTS Release: 18.04 Codename: bionic
Fluent Bitのバージョンは、こちら。
$ /opt/td-agent-bit/bin/td-agent-bit --version Fluent Bit v1.4.4
複数のOutputを使うように、Fluent Bitを設定する
では、Fluent Bitの設定を行います。結果がこちら。
$ grep -v '#' /etc/td-agent-bit/td-agent-bit.conf [SERVICE] Flush 5 Daemon Off Log_Level info Parsers_File parsers.conf Plugins_File plugins.conf HTTP_Server Off HTTP_Listen 0.0.0.0 HTTP_Port 2020 [INPUT] Name tcp Listen 0.0.0.0 Port 5170 Format json Tag mytag.message [OUTPUT] Name stdout Match mytag.* [OUTPUT] Name file Match mytag.* Path /tmp/file-output.txt
Inputにはtcpを使うことにします。
[INPUT] Name tcp Listen 0.0.0.0 Port 5170 Format json Tag mytag.message
ここでマッチしたタグが、Stdout Output PluginとFile Output Pluginの両方にマッチするように設定します。
[OUTPUT] Name stdout Match mytag.* [OUTPUT] Name file Match mytag.* Path /tmp/file-output.txt
設定後、Fluent Bitを再起動してから確認してみましょう。
メッセージを送ってみます。
$ echo '{"message": "Hello Fluent Bit!!"}' | nc localhost 5170
標準出力側で確認。
$ sudo journalctl -u td-agent-bit -f ... May 24 15:27:41 ubuntu1804.localdomain td-agent-bit[1659]: [0] mytag.message: [1590334056.894144629, {"message"=>"Hello Fluent Bit!!"}]
ファイル側を確認。
$ cat /tmp/file-output.txt mytag.message: [1590334056.894145, {"message":"Hello Fluent Bit!!"}]
両方のOutputに、同じレコードが渡っていますね。
というわけで、複数のOutputを使いたかったら、その分のOutputにマッチするようにタグを設定すればよい、と。