Docs » Splunk Observability Cloud 用のサーバーレス関数を実装する » AWSのLambda関数をSplunk Observability Cloudにインストルメンテーションする » AWS Lambda 関数を Splunk Observability Cloud にインストルメンテーションする » .NET AWS Lambda 関数を Splunk Observability Cloud にインストルメンテーションする

.NET AWS Lambda 関数を Splunk Observability Cloud にインストルメンテーションする 🔗

以下の OpenTelemetry テンプレートを使用して、.NET AWS Lambda 関数をインストルメンテーションし、Splunk Observability Cloud にトレースを送信できます。テンプレートは以下のパッケージを使用します:

AWS Lambda for Splunk APM で .NET 関数をインストルメンテーションするには、以下の手順に従います:

  1. 既存の AWS Lambda を以下のテンプレートと統合するか、テンプレートを使用して新しい関数を開始します:

using Amazon.Lambda.Core;
using OpenTelemetry;
using OpenTelemetry.Exporter;
using OpenTelemetry.Instrumentation.AWSLambda;
using OpenTelemetry.ResourceDetectors.AWS;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
using System.Diagnostics;

namespace DotNetInstrumentedLambdaExample;

public class Function
{
   public static readonly TracerProvider TracerProvider;

   static Function()
   {
      TracerProvider = ConfigureSplunkTelemetry()!;
   }

   // Note: Do not forget to point function handler to here.
   public string TracingFunctionHandler(string input, ILambdaContext context)
      => AWSLambdaWrapper.Trace(TracerProvider, FunctionHandler, input, context);

   public string FunctionHandler(string input, ILambdaContext context)
   {
      // TODO: Your function handler code here
   }

   private static TracerProvider ConfigureSplunkTelemetry()
   {
      var serviceName = Environment.GetEnvironmentVariable("AWS_LAMBDA_FUNCTION_NAME") ?? "Unknown";
      var accessToken = Environment.GetEnvironmentVariable("SPLUNK_ACCESS_TOKEN")?.Trim();
      var realm = Environment.GetEnvironmentVariable("SPLUNK_REALM")?.Trim();

      ArgumentNullException.ThrowIfNull(accessToken, "SPLUNK_ACCESS_TOKEN");
      ArgumentNullException.ThrowIfNull(realm, "SPLUNK_REALM");

      var builder = Sdk.CreateTracerProviderBuilder()
            // Use Add[instrumentation-name]Instrumentation to instrument missing services
            // Use Nuget to find different instrumentation libraries
            .AddHttpClientInstrumentation()
            .AddAWSInstrumentation()
            // Use AddSource to add your custom DiagnosticSource source names
            //.AddSource("My.Source.Name")
            .SetSampler(new AlwaysOnSampler())
            .AddAWSLambdaConfigurations(opts => opts.DisableAwsXRayContextExtraction = true)
            .ConfigureResource(configure => configure
                  .AddService(serviceName, serviceVersion: "1.0.0")
                  // Different resource detectors can be found at
                  // https://github.com/open-telemetry/opentelemetry-dotnet-contrib/tree/main/src/OpenTelemetry.ResourceDetectors.AWS#usage
                  .AddDetector(new AWSEBSResourceDetector()))
            .AddOtlpExporter(opts =>
            {
               opts.Endpoint = new Uri($"https://ingest.{realm}.signalfx.com/v2/trace/otlp");
               opts.Protocol = OtlpExportProtocol.HttpProtobuf;
               opts.Headers = $"X-SF-TOKEN={accessToken}";
            });

      return builder.Build()!;
   }
}
  1. aws-lambda-tools-defaults.json ファイルを編集し、function-handler エントリーを変更することで、新しい関数ハンドラ TracingFunctionHandler がメインエントリーポイントとして設定されていることを確認します。また、AWS ウェブコンソールを使用して、Runtime settings のハンドラを変更することもできます。

  2. テンプレートは以下の環境変数を想定しています:

    • AWS_LAMBDA_FUNCTION_NAME: AWS Lambda関数の名前

    • SPLUNK_ACCESS_TOKEN:Splunk インジェストアクセストークン

    • SPLUNK_REALM:Splunk インジェスト領域。例: us0

  3. また、このテンプレートには ConfigureSplunkTelemetry() に以下のカスタマイズポイントが含まれています:

    • カスタムインストルメンテーション・ライブラリを追加して、他のサードパーティライブラリをサポートします。NuGet と OpenTelemetry.Instrumentation. で始まる文字列を使用してライブラリを検索できます。

    • ライブラリの中には、すでに System.Diagnostics.DiagnosticSource モジュールが組み込まれているものもあります。カスタム DiagnosticSource 名を含めるには、.AddSource() メソッドを使用してください。

    • AWS パッケージには、環境を記述するのに役立つ複数の ResourceDetectors 要素が含まれています。ユースケースに合わせてディテクターを選択してください。

  4. デフォルトの AWS テンプレートが期待するように、FunctionHandler 関数にコードを追加します。

This page was last updated on 2024年04月16日.