AWS Fargate のログを New Relic に送信する仕組みをAWS Lambdaで作成してみた

AWS FargateのログをCloudWatch Logsに出力している場合、AWS Lambdaを用いて、New Relicにログを転送することができます。
2023.04.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

New Relicでは、AWSなどのクラウドサービスのデータを収集・可視化し、パフォーマンスの向上、トラブルシューティングの迅速化、システム運用リソースやコストの最適化を図ることができるサービスです。

FargateのログをNew Relicに転送する方法は、主に2つあります

  1. サイドカー用のFireLensコンテナを追加する
  2. 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のトリガーを追加すれば、転送できます。

参考