翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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
コマンドを使用して、アプリケーションを手動で計測できます。
トレース設定の初期化
ADOT auto-Instrumentation for Python を使用する
ADOT auto-instrumentation for Python を使用して、Python アプリケーション用に OpenTelemetry を自動的に設定できます。ADOT 自動計測を使用すると、手動でコードを変更して受信リクエストをトレースしたり、 AWS SDK や HTTP クライアントなどのライブラリをトレースしたりする必要はありません。詳細については、AWS 「 Distro for OpenTelemetry Python Auto-Instrumentation を使用したトレースとメトリクス
ADOT auto-instrumentation for Python は以下をサポートしています。
-
環境変数を介した X-Ray リモートサンプリング
export OTEL_TRACES_SAMPLER=xray
-
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 計測
リクエストによる送信 HTTP 呼び出しの計測
他のライブラリの計測サポート
OpenTelemetry Python でサポートされているライブラリ計測の完全なリストは、サポートされているライブラリ、フレームワーク、アプリケーションサーバー、および JVMs
または、OpenTelemetry Registry を検索して、OpenTelemetry が計測をサポートしているかどうかを調べることもできます。検索を開始するには、 レジストリ
トレースデータを手動で作成する
Python アプリケーションの xray_recorder
を使用してセグメントとサブセグメントを作成できます。詳細については、「Python コードの手動計測」を参照してください。トレースデータに注釈とメタデータを手動で追加することもできます。
OpenTelemetry SDK を使用したスパンの作成
start_as_current_span
API を使用してスパンを開始し、スパンを作成するための設定を行います。スパンの作成例については、「スパンの作成SERVER
種類スパンのみが 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 には、トレースに注釈とメタデータを追加put_metadata
するための個別の APIs put_annotation
と が用意されています。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 OpenTelemetry ARN 用の Lambda Layer から関数に必要な Lambda Layer ARNs を見つけて追加します。
-
関数に次の環境変数を設定します。
-
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 }