• /
  • ログイン
  • 無料アカウント

本書は、お客様のご参考のために原文の英語版を機械翻訳したものです。

英語版と齟齬がある場合、英語版の定めが優先するものとします。より詳しい情報については、本リンクをご参照ください。

問題を作成する

New RelicとOpenTelemetryによる.NET Lambda関数のトレース

PREVIEW

AWS LambdaをOpenTelemetry for .NETで使用するための機能はまだ開発中です。

このガイドでは、 OpenTelemetry Lambda を使って、AWS のマネージド OpenTelemetry Lambda Layers を使って、.NET Lambda 関数をトレースする方法を説明します。OpenTelemetryは、多くの一般的なライブラリの自動インスツルメンテーションを含む、関数のインスツルメンテーションを簡単に行うことができます。

前提条件

このガイドでは、以下のものを想定しています。

ステップ1:レイヤーのインストール

AWSは、 OpenTelemetry Lambda Collector を含むマネージドレイヤーを公開しています。

インストールするには

  1. 作成した関数を Lambda Console で開きます。

  2. **「レイヤー」 「デザイナー」 のセクションで、 「レイヤーの追加」 を選択します。**

  3. Specify an ARN の下に、レイヤーのARNを貼り付けます。

    arn:aws:lambda:{region}:901920570463:layer:aws-otel-collector-amd64-ver-0-43-1:1

    {region}を置き換えてください。は、 us-east-1 のように、あなたのAWSリージョンに置き換えてください。

  4. Choose Add.

また、 SAM(Serverless Application Model) または CloudFormation テンプレートを使用している場合は、Lambda関数のプロパティに以下を追加することで、このレイヤーを指定することができます。

yourFunctionHere:
Type: AWS::Serverless::Function
Properties:
...
Layers:
- !Sub arn:${AWS::Partition}:lambda:${AWS::Region}:901920570463:layer:aws-otel-collector-amd64-ver-0-43-1:1

ステップ2:New Relicの環境変数の追加

このレイヤーが収集した OpenTelemetry データを New Relic に送信するためには、レイヤーに同梱されている OpenTelemetry Lambda Collector を設定して、受信したテレメトリを New Relic OpenTelemetry Endpoint にエクスポートする必要があります。その前に、まずこのコレクターが依存するいくつかの環境変数を設定する必要があります。

  1. New Relic のライセンスキー を生成し、New Relic アカウントからコピーします。
  2. Lambda Console で作成した関数を開きます。
  3. Configuration を選択し、次に Environment variables を選択します。
  4. Environment variables の下で、 Edit を選択します。
  5. 環境変数の追加 を選択します。
  6. Key には、 NEW_RELIC_LICENSE_KEY を設定し、 Value には、ステップ1で生成したライセンスキーの値を設定します。そして、 Save を選択します。
  7. 環境変数の追加 を再度選択します。
  8. Key には、 NEW_RELIC_OPENTELEMETRY_ENDPOINT を設定し、 Value には、以下のいずれかのオプションを設定します(お使いの New Relic のリージョンによって異なります)。その後、 Save を選択します。
  9. 環境変数の追加 を再度選択します。
  10. Key には OTEL_SERVICE_NAME を設定し、 Value にはお使いの機能の名前を設定します。そして、 Save を選択します。
  • otlp.nr-data.net:4317: お客様のNew Relicアカウントが米国地域にある場合
  • otlp.eu01.nr-data.net:4317: あなたのNew RelicアカウントがEU地域にある場合

SAM および CloudFormation テンプレートの場合は、関数のプロパティに以下を追加します。必ず your-license-key-hereNew Relic のライセンスキーotlp.nr-data.net:4317 をお住まいの地域の New Relic OpenTelemetry Endpoint に置き換えてください。

yourFunctionHere:
Type: AWS::Serverless::Function
Properties:
...
Environment:
Variables:
...
NEW_RELIC_LICENSE_KEY: your-license-key-here
NEW_RELIC_OPENTELEMETRY_ENDPOINT: otlp.nr-data.net:4317
OTEL_SERVICE_NAME: your-function-name-here

重要

your-license-key-here をお使いの New Relic ライセンスキーに、 otlp.nr-data.net:4317 をお使いの New Relic リージョンに適したエンドポイントに置き換えてください(上記リストを参照)。

ステップ3:コレクターの設定

それでは、OpenTelemetry Lambda Collectorのデフォルト設定を上書きして、New Relic OpenTelemetry Endpointにテレメトリをエクスポートする設定にします。そのためには、 collector.yaml という設定ファイルを関数に含める必要があります。

関数のルートディレクトリに、以下の内容の collector.yaml ファイルを作成します。

receivers:
otlp:
protocols:
grpc:
http:
exporters:
otlp:
endpoint: ${NEW_RELIC_OPENTELEMETRY_ENDPOINT}
headers:
api-key: ${NEW_RELIC_LICENSE_KEY}
service:
pipelines:
traces:
receivers: [otlp]
exporters: [otlp]
metrics:
receivers: [otlp]
exporters: [otlp]
logs:
receivers: [otlp]
exporters: [otlp]

この collector.yaml ファイルを、機能のZIPパッケージのルートディレクトリにバンドルします。

*.csproj の設定例は次のようになります。

<ItemGroup>
<Content Include="collector.yaml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>

そして、機能を再展開する。

  1. 作成した関数を Lambda Console で開きます。
  2. Configuration を選択し、次に Environment variables を選択します。
  3. Environment variables の下で、 Edit を選択します。
  4. 環境変数の追加 を選択します。
  5. KeyOPENTELEMETRY_COLLECTOR_CONFIG_FILE を設定し、 Value/var/task/collector.yaml を設定しています。
  6. そして、 Save を選択します。

SAMやCloudFormationのテンプレートの場合は、関数のプロパティにこれを追加します。

yourFunctionHere:
Type: AWS::Serverless::Function
Properties:
...
Environment:
Variables:
...
OPENTELEMETRY_COLLECTOR_CONFIG_FILE: /var/task/collector.yaml

重要

ここでは、 collector.yaml を自分の関数のルートディレクトリにバンドルしたと仮定しています。他の場所にバンドルした場合は、 /var/task/collector.yaml を、 collector.yaml へのパスに置き換えてください。

ステップ4:機能の計測

まず、 OpenTelemetry SDK for AWS Lambda を追加します。

dotnet add package OpenTelemetry.Contrib.Instrumentation.AWSLambda

AddAWSLambdaConfigurations()TracerProvider からの呼び出しを追加します。

TracerProvider tracerProvider = Sdk.CreateTracerProviderBuilder()
// add other instrumentations here
.AddAWSLambdaConfigurations()
.Build();

元のLambdaハンドラ関数と同じシグネチャを持つラッパー関数を作成します。 AWSLambdaWrapper.Trace() APIを呼び出し、 TracerProvider 、元のLambda関数とその入力をパラメータとして渡します。

// new Lambda function handler passed in
public string TracingFunctionHandler(JObject input, ILambdaContext context)
=> AWSLambdaWrapper.Trace(tracerProvider, OriginalFunctionHandler, input, context);
public string OriginalFunctionHandler(JObject input, ILambdaContext context)
{
return input?.ToString();
}

例えば、基本的なAPI GatewayのLambda関数は次のようなものです。

namespace Example
{
public class Function
{
public static TracerProvider tracerProvider;
static Function()
{
tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAWSInstrumentation()
.AddOtlpExporter()
.AddAWSLambdaConfigurations()
.Build();
}
// use AwsSdkSample::AwsSdkSample.Function::TracingFunctionHandler as input Lambda handler instead
public APIGatewayProxyResponse TracingFunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
{
return AWSLambdaWrapper.Trace(tracerProvider, FunctionHandler, request, context);
}
/// <summary>
/// A simple function that takes a APIGatewayProxyRequest and returns a APIGatewayProxyResponse
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
{
return new APIGatewayProxyResponse() { StatusCode = 200, Body = Environment.GetEnvironmentVariable("_X_AMZN_TRACE_ID") };
}
}
}

そして、そのラッパー関数をLambda関数のハンドラとして設定します。上記のクラスの場合、ハンドラは function::Example.Function::TracingFunctionHandler となります。

AWS SDKのトレースを含めた動作例については、 このサンプルアプリ を参照してください。

上記は基本的な例です。より高度なインストゥルメンテーションについては、 OpenTelemetry .NET SDK documentation をご参照ください。

ステップ5:New Relic UIでデータを見る

まず、 Lambda 関数 を何度か起動して、テレメトリの生成を開始します。そこからNew Relicにアクセスして、 トレースメトリクスログ を見つけてください。

Telemetry は New Relic Serverless の下には表示されません。代わりに、New Relic OpenTelemetry Nerdlets の下にテレメトリーデータが表示されます。

詳細情報

詳細については、 New Relic OpenTelemetry クイックスタート をご覧ください。

問題を作成する
Copyright © 2022 New Relic Inc.