翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
OpenTelemetry Python への移行
このガイドは、Python アプリケーションを X-Ray SDK 計装から OpenTelemetry 計装に移行するのに役立ちます。自動計装アプローチと手動計装アプローチの両方について説明し、一般的なシナリオのコード例を示します。
セクション
ゼロコード自動計装ソリューション
X-Ray SDK では、リクエストをトレースするためにアプリケーションのコードを変更する必要がありました。OpenTelemetry は、リクエストをトレースするためにゼロコード自動計装ソリューションを提供します。OpenTelemetry では、ゼロコード自動計装ソリューションを使用してリクエストをトレースできます。
OpenTelemetry ベースの自動計装を使用したゼロコード
-
Distro for OpenTelemetry (ADOT) auto-Instrumentation for AWS Python – Python アプリケーションの自動計測については、AWS 「 Distro for OpenTelemetry Python Auto-Instrumentation
」を参照してください。 (オプション) ADOT Python 自動計測 AWS を使用して でアプリケーションを自動的に計測するときに CloudWatch Application Signals を有効にして、現在のアプリケーションの状態をモニタリングし、ビジネス目標に照らして長期的なアプリケーションパフォーマンスを追跡することもできます。Application Signals は、アプリケーション、サービス、依存関係をアプリケーション中心の統合ビューで表示し、アプリケーションの状態をモニタリングしてトリアージできるようにします。
-
OpenTelemetry Python のゼロコード自動計装の使用 – OpenTelemetry Python を使用した自動計装については、「Python ゼロコード計装
」を参照してください。
アプリケーションを手動で計装する
pip コマンドを使用することで、アプリケーションを手動で計装できます。
トレースセットアップの初期化
Python 用の ADOT 自動計装の使用
Python 用の ADOT 自動計装を使用すると、Python アプリケーション用に OpenTelemetry を自動的に設定できます。ADOT 自動計測を使用すると、手動でコードを変更して受信リクエストをトレースしたり、 AWS SDK や HTTP クライアントなどのライブラリをトレースしたりする必要はありません。詳細については、AWS 「 Distro for OpenTelemetry Python Auto-Instrumentation を使用したトレースとメトリクス
Python 用の ADOT 自動計装は以下をサポートしています。
-
環境変数
export OTEL_TRACES_SAMPLER=xrayを介した X-Ray リモートサンプリング -
X-Ray トレースコンテキストの伝播 (デフォルトで有効)
-
リソース検出 (Amazon EC2、Amazon ECS、Amazon EKS 環境のリソース検出はデフォルトで有効になっています。)
-
サポートされているすべての OpenTelemetry 計装の自動ライブラリ計装は、デフォルトで有効になっています。
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS環境変数を使用すると選択的に無効にすることができます。(すべてデフォルトで有効になっています。) -
スパンの手動作成
X-Ray サービスプラグインから OpenTelemetry AWS リソースプロバイダーへ
X-Ray SDK には、Amazon EC2、Amazon ECS、Elastic Beanstalk などのホストされたサービスからプラットフォーム固有の情報をキャプチャするために xray_recorder に追加できるプラグインが用意されています。これは、情報をリソース属性としてキャプチャする OpenTelemetry のリソースプロバイダーに似ています。さまざまな AWS プラットフォームで使用できるリソースプロバイダーは複数あります。
-
まず、 AWS 拡張機能パッケージをインストールします。
pip install opentelemetry-sdk-extension-aws -
目的のリソース検出器を設定します。次の例は、OpenTelemetry SDK で Amazon EC2 リソースプロバイダーを設定する方法を示しています。
from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.extension.aws.resource.ec2 import ( AwsEc2ResourceDetector, ) from opentelemetry.sdk.resources import get_aggregated_resources provider = TracerProvider( active_span_processor=span_processor, resource=get_aggregated_resources([ AwsEc2ResourceDetector(), ])) trace.set_tracer_provider(provider)
受信リクエストのトレース
AWS SDK 計測
requests による送信 HTTP 呼び出しの計装
他のライブラリの計装サポート
OpenTelemetry Python でサポートされているライブラリ計装の全リストは、「Supported libraries, frameworks, application servers, and JVMs
または、OpenTelemetry レジストリを検索して、OpenTelemetry が計装をサポートしているかどうかを調べることもできます。検索を開始するには、「Registry
トレースデータを手動で作成する
Python アプリケーションで xray_recorder を使用してセグメントとサブセグメントを作成できます。詳細については、「Instrumenting Python code manually」を参照してください。トレースデータに注釈とメタデータを手動で追加することもできます。
OpenTelemetry SDK を使用したスパンの作成
start_as_current_span API を使用してスパンを開始し、スパンを作成するための設定を行います。スパンの作成例については、「Creating spansSERVER タイプのスパンのみが X-Ray セグメントに変換され、その他は X-Ray サブセグメントに変換されます。
from opentelemetry import trace from opentelemetry.trace import SpanKind import time tracer = trace.get_tracer("my.tracer.name") # Create a new span to track some work with tracer.start_as_current_span("parent", kind=SpanKind.SERVER) as parent_span: time.sleep(1) # Create a nested span to track nested work with tracer.start_as_current_span("child", kind=SpanKind.CLIENT) as child_span: time.sleep(2) # the nested span is closed when it's out of scope # Now the parent span is the current span again time.sleep(1) # This span is also closed when it goes out of scope
OpenTelemetry SDK を使用してトレースに注釈とメタデータを追加する
X-Ray Python SDK には、トレースに注釈とメタデータを追加するための個別の API、put_annotation と put_metadata が用意されています。OpenTelemetry SDK では、注釈とメタデータは単にスパンの属性であり、set_attribute API を介して追加されます。
トレースの注釈にするスパン属性は、予約キー aws.xray.annotations の下に追加されます。予約キーの値は注釈のキーと値のペアのリストです。他のすべてのスパン属性は、変換されたセグメントまたはサブセグメントのメタデータになります。
さらに、ADOT コレクターを使用している場合は、コレクター設定で indexed_attributes を指定することで、X-Ray 注釈に変換するスパン属性を設定できます。
次の例は、OpenTelemetry SDK を使用してトレースに注釈とメタデータを追加する方法を示しています。
with tracer.start_as_current_span("parent", kind=SpanKind.SERVER) as parent_span: parent_span.set_attribute("TransactionId", "qwerty12345") parent_span.set_attribute("AccountId", "1234567890") # This will convert the TransactionId and AccountId to be searchable X-Ray annotations parent_span.set_attribute("aws.xray.annotations", ["TransactionId", "AccountId"]) with tracer.start_as_current_span("child", kind=SpanKind.CLIENT) as child_span: # The MicroTransactionId will be converted to X-Ray metadata for the child subsegment child_span.set_attribute("MicroTransactionId", "micro12345")
Lambda 計装
X-Ray での Lambda 関数のモニタリングでは、X-Ray を有効にし、関数呼び出しロールに適切なアクセス許可を追加しました。さらに、関数からのダウンストリームリクエストをトレースする場合は、X-Ray Python SDK を使用してコードを計装しました。
OpenTelemetry for X-Ray では、Application Signals をオフにして CloudWatch Application Signals Lambda レイヤーを使用することをお勧めします。これにより、関数が自動計装され、関数の呼び出しと関数からのダウンストリームリクエストのスパンが生成されます。トレースに加えて、Application Signals を使用して関数の状態をモニタリングする場合は、「Lambda でアプリケーションを有効にする」を参照してください。
-
AWS Lambda Layer for OpenTelemetry ARN から関数に必要な Lambda レイヤー ARN を見つけて追加します。
-
これを行うには、関数に次の環境変数を設定します。
-
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument– 関数の自動計装をロードします。 -
OTEL_AWS_APPLICATION_SIGNALS_ENABLED=false– これにより、Application Signals のモニタリングが無効になります。
-
Lambda 計装を使用したスパンの手動作成
さらに、関数内でカスタムスパンを生成して作業を追跡できます。これを行うには、Application Signals Lambda レイヤーの自動計装と組み合わせて opentelemetry-api パッケージのみを使用します。
-
関数の依存関係として
opentelemetry-apiを含めます。 -
次のコードスニペットは、カスタムスパンを生成するためのサンプルです。
from opentelemetry import trace # Get the tracer (auto‑configured by the Application Signals layer) tracer = trace.get_tracer(__name__) def handler(event, context): # This span is a child of the layer's root span with tracer.start_as_current_span("my-custom-span") as span: span.set_attribute("key1", "value1") span.add_event("custom-event", {"detail": "something happened"}) # Any logic you want to trace result = some_internal_logic() return { "statusCode": 200, "body": result }