本ブログではトレースデータやログデータがNew Relicに連携できていないケースの設定の確認方法について紹介します。

はじめに

 AWS LambdaとNew Relicの統合において遭遇する可能性があるデータ取得の問題に対処します。データ連携のトラブルシューティングに関連する設定の確認ポイントを紹介し、モニタリング環境を適切に設定し、アプリケーションのパフォーマンスを維持するための手助けをします。 

トレースデータの統合

 トレースデータが連携できていない場合、「Monitoring」の「Distributed Tracing」や「Events」の「Invocations」にデータが表示されません。トレースデータが連携できないデメリットとして、パフォーマンス問題の特定が困難になり、最適な対策が講じられなくなります。また、障害対応が遅延し、アプリケーションのダウンタイムが長引くことで顧客満足度に悪影響を与える可能性があります。さらに、システム全体の視野が狭まり、潜在的な問題や最適化の機会を見逃すことがあるほか、開発チームや運用チームのコミュニケーションが低下することが考えられます。

 トレースデータが連携できていない原因は、Lambda Layerを用いた関数のラップができていない可能性が考えられます。対象のLambda関数のハンドラーとLayerの設定を確認してください。Lambdaの設定を確認する方法は、AWS Management Console、AWS CLIを使用して行うことができます。以下にそれぞれの方法を説明します。

  1. AWS Management Console
    1. AWS Management Consoleにログインし、Lambdaサービスを開きます。
    2. 左側のメニューから「Functions」を選択します。
    3. リストから対象のLambda関数をクリックします。
    4. 関数の詳細画面(「コード」タブ)で、「ランタイム設定」、「Layers」セクションを確認することで、使用されているハンドラーやレイヤーの情報が表示されます。
Lambda関数のRuntime設定を確認する
  1. AWS CLI
    1. AWS CLIをインストールして設定しておく必要があります。
    2. ターミナルやコマンドプロンプトで以下のコマンドを実行します。
aws lambda get-function-configuration --function-name [YOUR_FUNCTION_NAME]

[YOUR_FUNCTION_NAME]は対象のLambda関数名に置き換えてください。

  1. 実行結果の “Handler”、 “Layers” 部分に、関数で使用されているレイヤーの情報が表示されます。

Handlerに “newrelic-lambda-wrapper.handler” が設定されていることを確認してください。本来使用する Handler は環境変数 "NEW_RELIC_LAMBDA_HANDLER" に設定する必要があります。また “Layers” に設定されたラップしている関数の言語、Runtimeバージョンが適切かどうか確認してください。設定するNew Relicのレイヤーはこちらで確認してください。

New Relic Lambda CLI を使用している場合は、下記のコマンドを実行して設定を更新してください。

newrelic-lambda layers install \
    --function <name or arn> \
    --nr-account-id <new-relic-account-id>

<name or arn>、<new-relic-account-id>にはそれぞれ適切な値を設定してください。

Serverless Frameworkを使用している場合は、プラグインが導入されているか、serverless.ymlにpluginsの設定が記載されているか確認してください。

AWS Serverless Application Model(SAM)を使用している場合は、template.ymlの “Handler”、 “NEW_RELIC_LAMBDA_HANDLER”、 “Layers”の設定を確認してください。

ログデータの統合(Lambda Extensionの利用)

 ログデータが連携できていない場合、「Monitoring」の「Logs」にデータが表示されません。ログデータが連携できないデメリットとして、問題の特定や原因究明が困難になり、アプリケーションの障害対応やパフォーマンス改善が遅れる可能性があります。また、システム全体の可視性が低下し、複数のコンポーネント間の相互作用に起因する問題を見逃すリスクが高まります。さらに、運用監視に多くの手間がかかり、効率的な運用管理が難しくなることが考えられます。

 ログデータが連携できていない原因は、Lambda 拡張のログ連携パラメータが有効化されていない可能性が考えられます。対象のLambda関数の環境変数の設定を確認してください。Lambdaの設定を確認する方法は、AWS Management Console、AWS CLIを使用して行うことができます。以下にそれぞれの方法を説明します。

  1. AWS Management Console
    1. AWS Management Consoleにログインし、Lambdaサービスを開きます。
    2. 左側のメニューから「Functions」を選択します。
    3. リストから対象のLambda関数をクリックします。
    4. 関数の詳細画面(「設定」タブ)で、「環境変数」を選択することで設定されている環境変数の情報が表示されます。
  1. AWS CLI
    1. AWS CLIをインストールして設定しておく必要があります。
    2. ターミナルやコマンドプロンプトで以下のコマンドを実行します。
aws lambda get-function-configuration --function-name [YOUR_FUNCTION_NAME]

[YOUR_FUNCTION_NAME]は対象のLambda関数名に置き換えてください。

  1. 実行結果の "Environment" 部分に、関数で使用されている環境変数の情報が表示されます。

環境変数の “NEW_RELIC_EXTENSION_SEND_FUNCTION_LOGS” に “true”が設定されていることを確認してください。デフォルトがfalseに設定されているため、Lambda拡張を使ってログデータを連携する場合は、 “true”に設定する必要があります。

New Relic Lambda CLI を使用している場合は、下記のコマンドを実行して設定を更新してください。

newrelic-lambda layers install \
    --function <name or arn> \
    --nr-account-id <new-relic-account-id> \
    --enable-extension-function-logs true

<name or arn>、<new-relic-account-id>にはそれぞれ適切な値を設定してください。

Serverless Frameworkを使用している場合は、 “enableFunctionLogs : true”の設定がserverless.ymlに記載されているか確認してください。

AWS Serverless Application Model(SAM)を使用している場合は、template.ymlの “NEW_RELIC_EXTENSION_SEND_FUNCTION_LOGS: true”の設定が記載されているかを確認してください。

まとめ

 New RelicとLambdaの統合におけるトラブルシューティングでは、トレースデータやログデータの取得・転送に関する問題を特定し、解決策する方法を紹介しました。不備の原因を調査することで、システム全体の可視性が向上し、問題の再発防止に繋がります。また、適切なトラブルシューティングにより、開発チームと運用チームのコミュニケーションが強化され、運用上の効率性が向上します。これにより、サービスの安定性が保たれ、顧客満足度の向上に寄与します。