AWS ECS(Fargate)で動作しているAPPのログをNewRelic、CloudWatchLogs、S3の3箇所に流す方法についてのメモ書きです。
NewRelicだけにログを流すのであればNewRelic専用のfluentbitイメージを利用すれば良いのですが、複数箇所にログを流すとなると、fluentbitをAWSサービスに対応したイメージに変更し、fluent-bit.confにログを流したいサービスを記述する必要があります。(他に上手い方法があるかもしれませんが)
構成としては次のようなイメージです。
ECS ─> awsfirelens ─> fluentbit ─> CloudWatchLogs
└───> Kinesis Data Firehose ─> S3
└───> Kinesis Data Firehose ─> NewRelic
※ できればKinesis Data Firehoseを経由せずfluentbit─> NewRelicとしたかったが、NewRelic専用のfluentbitイメージのソースのfluent-bit.confをいじってみても、AWSに接続するためのモジュールがないせいか上手くいかなかった。
手順
NewRelic以外へのサービスにログを流す方法はこちらの記事にまとめています。
【ECS】fluent bitでAPPのログをCloudWatchとS3へ同時に流す
NewRelicにログを流すには、上記記事の中で用意しているfluentbitの設定ファイルextra.conf
(fluent-bit.confに設定を追記するファイル)に次のような設定を加えます。
# extra.conf
[OUTPUT]
Name cloudwatch
Match **
region ap-northeast-1
log_group_name app-logs
log_stream_prefix app-log-
auto_create_group true
[OUTPUT]
Name firehose
Match **
region ap-northeast-1
delivery_stream S3-Delivery-Stream-app-logs
# 下記を追加
[OUTPUT]
Name firehose
Match **
region ap-northeast-1
delivery_stream NewRelic-Delivery-Stream
次にNewRelic用のKinesis Data Firehoseを用意します。
こちらは下記公式手順を参考に設定します。
Amazon Kinesis Data Firehoseから直接New Relicにデータを取り込む
配信ストリームの名前はNewRelic-Delivery-Stream
(extra.confで設定した名前)を設定します。
これで、APPを動作させればログが取得できているはずです。