サーバーレス アプリケーションで何が起こっているかを理解するには、.NET Lambda関数の最も詳細な動作を統合的に可視化することが不可欠です。 この情報により、関数のトラブルシューティングと最適化が可能になり、関数の動作が高速化され、一貫した結果が得られるようになります。
.NET Lambda関数を可視化するには、次の 2 つの分析アプローチから選択できます。
以下のヒントを参考にして、自分に最適なアプローチを決定してください。
機能の比較
次の表は、各アプローチのさまざまな要件と機能の概要を示しています。
New Relic .NET エージェント | OpenTelemetry 向け AWS Distro | |
---|---|---|
コードの変更が必要 | いいえ | はい |
データ送信用のツールが必要 | はい | いいえ |
New Relic UIエクスペリエンス | ||
ディストリビューティッド(分散)トレーシング | はい | |
指標 | いいえ | はい |
トランザクショントレース | はい | 該当なし |
Transactionイベント | はい | |
エラーイベント/スパン | はい | はい |
イベントまたはスパンをスパンする | はい | はい |
SQL トレース | はい | 該当なし |
スレッドプロファイリング | いいえ | 該当なし |
脆弱性管理 | いいえ | 該当なし |
外部通話 | はい | |
XMLを使用したカスタムインストゥルメンテーション | いいえ | いいえ |
APIを使用したカスタムインストゥルメンテーション | はい(エージェント) | はい(OpenTelemetry) |
カスタムメトリック | いいえ | はい |
カスタムイベント | はい | 該当なし |
カスタムスパン | はい | はい |
カスタムエラー | はい | いいえ |
カスタムアトリビュート | はい | はい |
ログ | はい | はい |
レガシークロスアプリケーショントレース | いいえ | いいえ |
情報
コンテキスト内のログは、エージェント内ログ転送ではなく、Lambda 拡張機能または CloudWatch によってキャプチャされます。
New Relic .NET エージェント
エージェント バージョン 10.26.0 以降、 New Relic .NET エージェントはインストゥルメントで扱われたAWS Lambda関数をサポートします。 ほとんどの場合、.NET エージェントはAWS Lambda 関数を自動的に計装します。 エージェントを使用する利点は、ほとんどの場合、Lambda関数を監視するためにコードを変更する必要がないことです。
Lambda関数では、エージェントが「サーバーレスモード」に切り替わり、 New Relicへのデータの直接送信が無効になり、他の機能も無効になります。 New Relic にデータを送信するには、New Relic Lambda Extension (.NET エージェント レイヤーに含まれています) または CloudWatch を使用する必要があります。
ほとんどの Lambda 関数はエージェントによって自動的にインストゥルメントされたため、エージェント NuGet パッケージを使用して Lambda 関数を監視できます。 選択したデプロイメント方法に応じて環境変数を手動で構成する必要があります (導入ガイドを参照)。 ただし、データを に送信するには 、New Relic Lambda Extension または CloudWatch 統合のNew Relic いずれかを設定する必要があります。
自動インストゥルメンテーションは、次のAWS Lambda関数タイプで利用できます (エージェント バージョン 10.29.0 以降)。
- Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction
- Amazon.Lambda.AspNetCoreServer.APIGatewayHttpApiV2ProxyFunction
- Amazon.Lambda.AspNetCoreServer.ApplicationLoadBalancerFunction
制限事項:
- ジェネリック ラムダ メソッドは自動的にはインストゥルメントされません。 ラムダ メソッドが
Task<TResponse> MyMethod<TRequest, TResponse>(TRequest, ILambdaContext)
などのジェネリック メソッドである場合、.NET エージェントは現在そのメソッドを計算できません。 - Lambda アノテーション フレームワークは現在サポートされていません。
- ApiGatewayV2イベントには、ディストリビューティッド(分散)トレーシングに必要な一部のコンテキストがありません。
- さまざまなAWS SDK 呼び出し (SQS など) のアウトバウンド ディストリビューティッド(分散)トレーシングはサポートされていません。
- Lambda関数ハンドラーに
ILambdaContext
問題が含まれていない場合、.NET エージェントは Lambda関数に関する期待される情報をすべて収集できません。 - ネイティブ AOT デプロイメント メソッドで構築された .NET Lambda関数はサポートされていません。
重要
サーバーレス フレームワーク プラグイン.NET Lambda関数のサポートは、サーバーレス プラグインの v5.3.0 から始まります。 v5.3.0より前のバージョンのサーバーレスプラグインを実行している場合は、 v5.3.0 以降にアップグレードすると、.NET Lambda関数が自動的に計装されます。 serverless.yml でexclude ステートメントを使用すると、自動インストゥルメンテーションから関数を除外できます。
AWS Distro for OpenTelemetry (ADOT) Lambda の .NET サポート
OpenTelemetry Lambda インストゥルメンテーション for .NET は、Lambda関数を計測するために使用できる拡張機能とトレースAPIを提供します。 ADOT は、インストールを容易にするためにレイヤーとして利用できます。 ADOT Lambda レイヤーは、AWS OpenTelemetryOpenTelemetryデータを にエクスポートできる コレクター用の DistroNew Relic の縮小バージョンを提供します。このアプローチでは、Serverless UI エクスペリエンスの代わりに、OpenTelemetry UI が使用されます。
この方法では、デプロイメント方法に応じて、初期の手動設定が必要になります。
インストールの詳細については、 「.NET Lambda関数をNew RelicとOpenTelemetryでレースする」を参照してください。