AWS Fargate のログを New Relic に送信する仕組みをAWS Lambdaで作成してみた
はじめに
New Relicでは、AWSなどのクラウドサービスのデータを収集・可視化し、パフォーマンスの向上、トラブルシューティングの迅速化、システム運用リソースやコストの最適化を図ることができるサービスです。
FargateのログをNew Relicに転送する方法は、主に2つあります
- サイドカー用のFireLensコンテナを追加する
- FargateのログをCloudWatch Logsに出力している場合、CloudWatch LogsのログをNew Relicに転送するAWS Lambda関数を作成する
1.については、こちらの記事通りにすると、実現できます。
今回は、2.の方法をご説明します。
2.の場合、Fargateのログ以外にもCloudWatch Logs のログをNew Relicに転送できることがメリットになります。
構成図は、以下の通りです。
事前準備
- New Relicアカウントの作成
-
Fargateでタスク起動を済み
ライセンスキーの発行
New Relicのコンソール上で、ライセンスキーを発行します。
キーの値をコピーしておきます。
Lambdaを作成
AWS Serverless Application Repositoryを開き、検索窓にnewrelic-log-ingestion
と入力し、Show apps that create custom IAM roles or resource policies
にチェックマークを入れます。
NewRelic-log-ingestion
をクリックします
[Deploy]をクリックします
Lambdaを作成するパラメータを記入します。最低限入力が必要な値は以下の2つです。
NRLicenseKey
には、先程のライセンスキーを入力しますこのアプリがカスタム IAM ロールとリソースポリシーを作成することを承認します。
にチェックをします。
Lambdaの環境変数
Lambdaを作成後、環境変数を修正します。
DEBUG_LOGGING_ENABLED
: CloudWatch Logsにデバッグ メッセージを出力するかどうか。- デバッグ ログをオンにする場合
true
を入力します
- デバッグ ログをオンにする場合
INFRA_ENABLED
:ログを New Relic Infrastructure に転送するかどうか。- 転送したい場合、
True
にします。
- 転送したい場合、
LICENSE_KEY
:ライセンスキーの値を入力LOGGING_ENABLED
::ログを New Relic Logging に転送するかどうか。- 転送したい場合、
True
にします。
- 転送したい場合、
New Relicにログを転送するためには、LOGGING_ENABLED
は、True
にする必要がありますので、設定しましょう。
Lambdaのトリガー設定
FargateのログがCloudWatch Logs に出力されたら、LambdaがNew Relicに転送する、Lambdaのトリガーの設定をします。
Lambdaの[トリガーの追加]をクリックします。
トリガー設定は、以下の通りに設定します。
- トリガーのAWSサービス:CloudWatch Logs
- ロググループ:New Relicに転送したいログを選択する
- フィルターの名前:何でもよいです
- フィルターパターン:特定の文字列のログのみを転送します。
- 例えば、エラーログのみを転送したい場合、
Error
を入力します。詳しくはこちら - 全て転送したい場合、記入しなくてよいです。
- 例えば、エラーログのみを転送したい場合、
ログがNew Relicに転送されているか確認
New Relicの[Logs]からログを確認できることを確認します。
トリガー設定以降に、CloudWatch Logs に出力されたログがNew Relicに転送されます。
ログが出力されていますね。
他のロググループも転送したい場合、Lambdaのトリガーを追加すれば、転送できます。