Lambda 自動計装

あなたのLambdaをOpenTelemetryで自動的に計装する

OpenTelemetryコミュニティは、以下の言語用のスタンドアロン計装Lambdaレイヤーを提供しています。

  • Java
  • JavaScript
  • Python
  • Ruby

これらのレイヤーは、AWSポータルを使用してLambdaに追加し、アプリケーションを自動的に計装できます。 これらのレイヤーにはコレクターは含まれておらず、外部コレクターインスタンスを構成してデータを送信しない限り、追加する必要があります。

OTel Collector LambdaレイヤーのARNを追加する

Collector Lambdaレイヤーのガイダンスを参照して、アプリケーションにレイヤーを追加し、Collectorを設定してください。 これを最初に追加することをおすすめします。

言語要件

Lambdaレイヤーは、Java 8, 11, 17 (Corretto) Lambdaランタイムをサポートしています。 サポートされているJavaのバージョンについては、OpenTelemetry Java ドキュメント を参照してください。

注意: Javaの自動計装エージェントがLambdaレイヤー内にあります - 自動計装エージェントはAWS Lambdaの起動時間に顕著な影響を与えるので、初期化中に最初のリクエストでタイムアウトを起こさずに本番のリクエストに対応するためには、一般的にプロビジョニングされた同時実行とウォームアップリクエストと共にこれを使用する必要があります。

デフォルトでは、レイヤーのOTel Javaエージェントは、アプリケーション内のすべてのコードを自動計装しようとします。 これはLambdaのコールドスタートの起動時間に悪影響を及ぼす可能性があります。

アプリケーションで使用するライブラリ/フレームワークの自動計装のみを有効にすることをおすすめします。

特定の計装だけを有効にするには、以下の環境変数を使用します。

  • OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED: falseに設定すると、レイヤーの自動計装を無効にし、各計装を個別に有効にする必要があります。

  • OTEL_INSTRUMENTATION_<NAME>_ENABLED: 特定のライブラリやフレームワークの自動計装を有効にするには true を設定します。<NAME>の部分を有効にしたい計装で置き換えます。利用可能な計装のリストについては、特定のエージェントの計装を抑制する を参照してください。

たとえば、LambdaとAWS SDKの自動計装だけを有効にするには、以下の環境変数を設定します。

OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED=false
OTEL_INSTRUMENTATION_AWS_LAMBDA_ENABLED=true
OTEL_INSTRUMENTATION_AWS_SDK_ENABLED=true

Lambdaレイヤーは、Node.js v14+のLambdaランタイムをサポートしています。 サポートされるJavaScriptとNode.jsのバージョンの詳細については、OpenTelemetry JavaScriptドキュメントを参照してください。

LambdaレイヤーはPython 3.8とPython 3.9のLambdaランタイムをサポートしています。 サポートされているPythonのバージョンについては、OpenTelemetry PythonドキュメントPyPi のパッケージを参照してください。

Lambda レイヤーは、Ruby 3.2 と 3.3 の Lambda ランタイムをサポートしています。 サポートされる OpenTelemetry Ruby SDK と API バージョンの詳細については、OpenTelemetry RubyドキュメントRubyGem のパッケージを参照してください。

AWS_LAMBDA_EXEC_WRAPPER を設定する

Node.js、Java、Rubyの場合は AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler 、Pythonの場合はAWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument を設定して、アプリケーションのエントリーポイントを変更します。 これらのラッパースクリプトは、自動計装を適用したLambdaアプリケーションを起動します。

計装LambdaレイヤーのARNを追加する

Lambda関数でOTelの自動計装を有効にするには、計装レイヤーとコレクターレイヤーを追加して設定し、トレースを有効にする必要があります。

  1. AWSコンソールで、計装するLambda関数を開く。
  2. 「レイヤー」セクションで、「レイヤーの追加」を選択します。
  3. 「ARNを指定」でレイヤーのARNを貼り付け、「追加」を選択します。

あなたの言語の最新の計装レイヤーリリースを見つけ、そのARNを使用します。 <region>タグをあなたのラムダがあるリージョンに変更します。

注意: ラムダレイヤーはリージョンで分かれたリソースで、公開されているリージョンでのみ使用できます。Lambda関数と同じリージョンでレイヤーを使用するようにしてください。コミュニティは、利用可能なすべてのリージョンでレイヤーを公開しています。

SDKのエクスポーターの設定

gRPC/HTTPレシーバーを持つコレクターが組み込まれている場合、Lambdaレイヤーで使用されるデフォルトのエクスポーターは変更なしで動作します。 環境変数を更新する必要はありません。 ただし、プロトコルのサポートレベルやデフォルト値は言語によって異なります。

OTEL_EXPORTER_OTLP_PROTOCOL=grpcgrpchttp/protobuf および http/jsonOTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 をサポートします。

環境変数 OTEL_EXPORTER_OTLP_PROTOCOL はサポートされていません。ハードコードされたエクスポーターはプロトコル http/protobuf を使用します。OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318

OTEL_EXPORTER_OTLP_PROTOCOL=http/protobufhttp/protobufhttp/jsonOTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 をサポートします。

OTEL_EXPORTER_OTLP_PROTOCOL=http/protobufhttp/protobuf OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 をサポートします。

Lambdaを公開する

Lambdaの新しいバージョンを公開して、新しい変更と計装をデプロイします。