FireLens で New Relic 謹製 Fluent Bit イメージを起動したときの設定ファイル、プラグインを ECS Exec で調べてみた
FireLens で New Relic Logs へログを保存するにあたり New Relic 謹製 Fluent Bit イメージを利用しています。過去に FireLens で起動する Fluent Bit コンテナには設定が追加されることを確認しています。
New Relic 謹製 Fluent Bit イメージの場合はどうなのか?ECSのタスク定義の関連性を把握しておくとトラブルシュートに役立ちそうなの確認してみます。
確認結果
- New Relic 謹製 Fluent Bit イメージのベースイメージは AWS for Fluent Bit である
- ベースの AWS for Fluent Bit のバージョンは比較的古いバージョンが採用されている
- New Relic用プラグインはおそらく最新のバージョンが同梱されている
検証環境
以下の検証環境を利用し Fluent Bit コンテナに ECS Exec でログインし設定ファイルを確認します。
ログルータで使用中の New Relic 謹製 Fluent Bit のイメージファイル名は以下です。
533243300146.dkr.ecr.ap-northeast-1.amazonaws.com/newrelic/logging-firelens-fluentbit
ECR Public Gallery で公開されているわけではなくプライベートレジストリにイメージが保存されています。イメージのタグ情報は見当たりませんでした。
ログインして調査してみた
Fluent Bit コンテナ(log_router)に ECS Exec でログインして必要な箇所を見て回ってきます。
イメージファイル
ベースイメージは AWS for Fluent Bit でした。しかも、何か意図がありそうな少し古いバージョン。
# ls -l total 76 -rw-r--r-- 1 root root 6 Aug 3 18:28 AWS_FOR_FLUENT_BIT_VERSION lrwxrwxrwx 1 root root 7 Jul 26 23:51 bin -> usr/bin dr-xr-xr-x 2 root root 4096 Apr 9 2019 boot drwxr-xr-x 5 root root 340 Dec 31 01:59 dev drwxr-xr-x 2 root root 4096 Aug 3 18:39 ecs -rwxr-xr-x 1 root root 235 Aug 3 18:28 entrypoint.sh drwxr-xr-x 1 root root 4096 Dec 31 01:59 etc drwxr-xr-x 1 root root 4096 Aug 3 18:39 fluent-bit drwxr-xr-x 2 root root 4096 Apr 9 2019 home lrwxrwxrwx 1 root root 7 Jul 26 23:51 lib -> usr/lib lrwxrwxrwx 1 root root 9 Jul 26 23:51 lib64 -> usr/lib64 drwxr-xr-x 2 root root 4096 Jul 26 23:51 local drwxr-xr-x 3 root root 4096 Dec 31 01:59 managed-agents drwxr-xr-x 2 root root 4096 Apr 9 2019 media drwxr-xr-x 2 root root 4096 Apr 9 2019 mnt drwxr-xr-x 2 root root 4096 Apr 9 2019 opt dr-xr-xr-x 116 root root 0 Dec 31 01:59 proc dr-xr-x--- 2 root root 4096 Apr 9 2019 root drwxr-xr-x 2 root root 4096 Dec 31 01:59 run lrwxrwxrwx 1 root root 8 Jul 26 23:51 sbin -> usr/sbin drwxr-xr-x 2 root root 4096 Apr 9 2019 srv dr-xr-xr-x 13 root root 0 Dec 31 01:59 sys drwxrwxrwt 1 root root 4096 Aug 3 18:39 tmp drwxr-xr-x 1 root root 4096 Jul 26 23:51 usr drwxr-xr-x 1 root root 4096 Jul 26 23:51 var
- AWS for Fluent Bit のバージョンは2.17.0
- 2021年7月28日にリリースされたバージョンであり、今から約5か月前(2021/12/31時点)
- Release AWS for Fluent Bit 2.17.0 · aws/aws-for-fluent-bit
- 最新のAWS for Fluent Bit のバージョンは2.21.5(2021/12/31時点)
# cat AWS_FOR_FLUENT_BIT_VERSION 2.17.0
現時点では New Relic 謹製 Fluent Bit のバージョンは古めの Fluent Bit のバージョンが採用されていることが確認できました。
AWS for Fluent Bit のバージョン = Fluent Bit のバージョンではないので注意してください。
Fluent Bit 設定ファイル
タスク定義設定した箇所が/fluent-bit/etc/fluent-bit.conf
に反映されています。追加の設定ファイルなしにタスク定義で出力先を設定したときと同じ動作です。
参考: AWS FargateでFireLens(Fluent Bit)を最小構成で起動し、ECS ExecでFireLensコンテナに入ってみる | DevelopersIO
"logConfiguration": { "logDriver": "awsfirelens", "secretOptions": [ { "name": "apiKey", "valueFrom": "arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:newrelic-license-key-Io2JZb" } ], "options": { "Name": "newrelic" } },
[INPUT] Name tcp Listen 127.0.0.1 Port 8877 Tag firelens-healthcheck [INPUT] Name forward unix_path /var/run/fluent.sock [INPUT] Name forward Listen 127.0.0.1 Port 24224 [FILTER] Name record_modifier Match * Record ecs_cluster sample5-dev-cluster Record ecs_task_arn arn:aws:ecs:ap-northeast-1:123456789012:task/sample5-dev-cluster/3ef36737831e46e39830e33765201278 Record ecs_task_definition sample5-dev-web-taskdefinition:11 [OUTPUT] Name null Match firelens-healthcheck [OUTPUT] Name newrelic Match web-firelens* apiKey ${apiKey_hogehoge}
ログ保存先が1つのサービス(New Relic Logs)だけのためタスク定義のoptions
の Key/Value により、[OUTPUT]
の設定値を追加するシンプルな方法が取られていることが確認できました。
AWSサービス用プラグイン
AWS for Fluent Bit がベースのため基本的なAWSサービスを利用するプラグインは同梱されています。
- CloudWatch Logs
- Kinesis Data Steams
- Kinesis Data Firehose
# pwd /fluent-bit # ls -l total 79108 drwxr-xr-x 1 root root 4096 Nov 15 11:50 bin -rw-r--r-- 1 root root 26243272 Aug 3 18:35 cloudwatch.so drwxr-xr-x 2 root root 4096 Aug 3 18:38 configs drwxr-xr-x 1 root root 4096 Nov 15 11:50 etc -rw-r--r-- 1 root root 26032656 Aug 3 18:35 firehose.so -rw-r--r-- 1 root root 28700336 Aug 3 18:34 kinesis.so drwxr-xr-x 1 root root 4096 Aug 3 18:39 licenses drwxr-xr-x 2 root root 4096 Aug 3 18:35 log drwxr-xr-x 2 root root 4096 Aug 3 18:38 parsers
New Relic用プラグイン
New Relic Logs へログを送信するためにnewrelic-fluent-bit-outputプラグインを利用します。AWS for Fluent Bit イメージにデフォルトで同梱されていませんので別途追加が必要です。
New Relic 謹製の Fluent Bit イメージなので当然 New Relic用のプラグインが同梱されています。
# pwd /fluent-bit/bin # ls -l total 34776 -rwxr-xr-x 1 root root 22335000 Aug 3 18:38 fluent-bit -rw-r--r-- 1 root root 13273568 Nov 15 11:43 out_newrelic.so
out_newrelic.so
のタイムスタンプが11月15日となっているのが注目する点でした。AWS for Fluent Bit は古いイメージを利用しているにもかかわらず、2021年12月31日時点で最新のNew Relic のプラグインが同梱されているようです。
プラグインのリリース日を確認すると最新が2021年11月15日でした。プラグインのリリースに合わせてイメージを更新していそうな感じがします。
New Relicプラグインの正確なバージョンはFluent Bit起動ログからは確認できませんでした。残念ながら最新バージョンと断定はできてはいません。
----------------------------------------------------------------------------------------------------------------------------- | timestamp | message | |---------------|-----------------------------------------------------------------------------------------------------------| | 1640915246344 | [1mFluent Bit v1.8.1[0m | | 1640915246344 | * [1m[93mCopyright (C) 2019-2021 The Fluent Bit Authors[0m | | 1640915246344 | * [1m[93mCopyright (C) 2015-2018 Treasure Data[0m | | 1640915246344 | * Fluent Bit is a CNCF sub-project under the umbrella of Fluentd | | 1640915246344 | * https://fluentbit.io | | 1640915246400 | [2021/12/31 01:47:26] [ info] [engine] started (pid=1) | | 1640915246400 | [2021/12/31 01:47:26] [ info] [storage] version=1.1.1, initializing... | | 1640915246400 | [2021/12/31 01:47:26] [ info] [storage] in-memory | | 1640915246400 | [2021/12/31 01:47:26] [ info] [storage] normal synchronization mode, checksum disabled, max_chunks_up=128 | | 1640915246400 | [2021/12/31 01:47:26] [ info] [cmetrics] version=0.1.1 | | 1640915246400 | [2021/12/31 01:47:26] [ info] [input:tcp:tcp.0] listening on 127.0.0.1:8877 | | 1640915246400 | [2021/12/31 01:47:26] [ info] [input:forward:forward.1] listening on unix:///var/run/fluent.sock | | 1640915246400 | [2021/12/31 01:47:26] [ info] [input:forward:forward.2] listening on 127.0.0.1:24224 | | 1640915246420 | [2021/12/31 01:47:26] [ info] [sp] stream processor started | | 1640916114285 | [2021/12/31 02:01:54] [engine] caught signal (SIGTERM) | | 1640916114285 | [2021/12/31 02:01:54] [ info] [input] pausing forward.1 | | 1640916114285 | [2021/12/31 02:01:54] [ info] [input] pausing forward.2 | | 1640916114285 | [2021/12/31 02:01:54] [ warn] [engine] service will stop in 5 seconds | | 1640916118500 | [2021/12/31 02:01:58] [ info] [engine] service stopped | -----------------------------------------------------------------------------------------------------------------------------
おわりに
New Relic 謹製 Fluent Bit イメージのベースイメージは比較的古いバージョンの AWS for Fluent Bit が採用されていました。
New Relic用プラグインはタイムスタンプからしておそらく最新のバージョンが同梱されているように見受けられ、Fluent Bit バージョンは意図的に古いバージョンに固定している意図が伺えます。
New Relic 謹製 Fluent Bit イメージはプライベートレジストリからの配布であることと、イメージタグに関する情報がないため任意のバージョンを指定できないのが難点に思えます。
今回の調査を踏まえ今後のアプローチとしては自前で AWS for Fluent Bit イメージに New Relic用プラグインを組み込んで管理するのがよいのかもしれないという方向性を確認できました。 また、New Relic 謹製 Fluent Bit イメージに設定ファイルを追加してカスタムログルーティングは原理的には可能だと思うので、実用性はあるのかは置いておいて興味本位で時間あるときに試してみたいと思います。