X-Ray SDK for Python の設定 - AWS X-Ray

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

X-Ray SDK for Python の設定

X-Ray SDK for Python には、 グローバルレコーダーxray_recorderを提供する という名前のクラスがあります。グローバルレコーダーを設定して、着信HTTPのセグメントを作成するミドルウェアをカスタマイズできます。

サービスプラグイン

pluginsを使用して、アプリケーションをホストしているサービスに関する情報を記録します。

プラグイン
  • Amazon EC2 – インスタンス ID、アベイラビリティーゾーン、および CloudWatch ロググループEC2Pluginを追加します。

  • ElasticBeanstalk– ElasticBeanstalkPluginは、環境名、バージョンラベル、およびデプロイ ID を追加します。

  • Amazon ECS – はコンテナ ID ECSPluginを追加します。

Segment - Scorekeep overview showing Elastic Beanstalk and EC2 deployment details.

プラグインを使用するには、configurexray_recorder を呼び出します。1 はタプルとして渡されるため、単一のプラグインを指定する場合は必ず末尾に 2 を付けてください。

from aws_xray_sdk.core import xray_recorder from aws_xray_sdk.core import patch_all xray_recorder.configure(service='My app') plugins = ('ElasticBeanstalkPlugin', 'EC2Plugin') xray_recorder.configure(plugins=plugins) patch_all()
注記

plugins はタプルとして渡されるため、単一のプラグインを指定する場合は必ず末尾に , を付けてください。例えば、plugins = ('EC2Plugin',)

また、コードで設定した値よりも優先される環境変数を使用して、レコーダーを設定することもできます。

ダウンストリームコールを記録するには、パッチライブラリの前にプラグインを設定します。

SDK また、 はプラグイン設定を使用してセグメントの originフィールドを設定します。これは、アプリケーションを実行する AWS リソースのタイプを示します。複数のプラグインを使用する場合、 SDKは次の解決順序を使用してオリジンを決定します。 ElasticBeanstalk > EKS > ECS > EC2。

サンプリングルール

SDK は、X-Ray コンソールで定義したサンプリングルールを使用して、記録するリクエストを決定します。デフォルトルールでは、最初のリクエストを毎秒トレースし、X-Ray にトレースを送信するすべてのサービスで追加のリクエストの 5% をトレースします。X-Ray コンソールに追加のルールを作成するをクリックして、各アプリケーションで記録されるデータ量をカスタマイズします。

は、カスタムルールが定義されている順序でSDK適用します。リクエストが複数のカスタムルールに一致する場合、 は最初のルールのみSDKを適用します。

注記

SDK が X-Ray に到達してサンプリングルールを取得できない場合、 は毎秒最初のリクエストのデフォルトのローカルルールに戻り、ホストあたりの追加リクエストの 5% に戻ります。これは、ホストにサンプリング を呼び出すアクセス許可がない場合APIs、または によって行われたAPI呼び出しのTCPプロキシとして機能する X-Ray デーモンに接続できない場合に発生する可能性がありますSDK。

JSON ドキュメントからサンプリングルールをロードSDKするように を設定することもできます。SDK は、X-Ray サンプリングが利用できない場合のバックアップとしてローカルルールを使用することも、ローカルルールのみを使用することもできます。

例 sampling-rules.json
{ "version": 2, "rules": [ { "description": "Player moves.", "host": "*", "http_method": "*", "url_path": "/api/move/*", "fixed_target": 0, "rate": 0.05 } ], "default": { "fixed_target": 1, "rate": 0.1 } }

この例では、1 つのカスタムルールとデフォルトルールを定義します。カスタムルールでは、5 パーセントのサンプリングレートが適用され、/api/move/以下のパスに対してトレースするリクエストの最小数はありません。デフォルトのルールでは、1秒ごとの最初のリクエストおよび追加リクエストの 10 パーセントをトレースします。

ルールをローカルで定義することの欠点は、固定ターゲットが X-Ray サービスによって管理されるのではなく、レコーダーの各インスタンスによって個別に適用されることです。より多くのホストをデプロイすると、固定レートが乗算され、記録されるデータ量の制御が難しくなります。

では AWS Lambda、サンプリングレートを変更することはできません。関数がインストルメント化されたサービスによって呼び出された場合、そのサービスによってサンプリングされたリクエストを生成した呼び出しは Lambda によって記録されます。アクティブなトレースが有効で、トレースヘッダーが存在しない場合、Lambda はサンプリングを決定します。

バックアップサンプリングルールを設定するには、次の例xray_recorder.configureに示すように、 を呼び出します。rules は、ルールのディクショナリであるか、サンプリングルールを含むJSONファイルへの絶対パスです。

xray_recorder.configure(sampling_rules=rules)

ローカルルールのみを使用するには、LocalSampler でレコーダーを設定します。

from aws_xray_sdk.core.sampling.local.sampler import LocalSampler xray_recorder.configure(sampler=LocalSampler())

サンプリングを無効にしてすべての着信リクエストを実装するように、グローバルレコーダーを設定することもできます。

例 main.py - サンプリングを無効にする
xray_recorder.configure(sampling=False)

ログ記録

は、デフォルトのWARNINGログ記録レベルで Python の組み込みloggingモジュールSDKを使用します。aws_xray_sdk クラスのロガーへの参照を取得し、その上で setLevel を呼び出して、ライブラリとアプリケーションに別のログレベルを設定します。

例 app.py - ログ記録
logging.basicConfig(level='WARNING') logging.getLogger('aws_xray_sdk').setLevel(logging.ERROR)

デバッグログを使用して問題を識別します。たとえば、「サブセグメントを手動で生成する」場合にサブセグメントが閉じない問題などです。

コード内のレコーダー設定

追加の設定は、xray_recorderconfigure メソッドから利用できます。

  • context_missing - 測定されたコードが、セグメントが開いていないときにデータを記録しようとした場合に例外のスローを回避するには、LOG_ERROR に設定します。

  • daemon_address – X-Ray デーモンリスナーのホストとポートを設定します。

  • service – がセグメントSDKに使用するサービス名を設定します。

  • plugins – アプリケーションの AWS リソースに関する情報を記録します。

  • samplingFalse に設定してサンプリングを無効にします。

  • sampling_rulesサンプリングルール を含むJSONファイルのパスを設定します。

例 main.py - コンテキスト欠落例外を無効にする
from aws_xray_sdk.core import xray_recorder xray_recorder.configure(context_missing='LOG_ERROR')

Django でのレコーダー設定

Django フレームワークを使用している場合は、Django settings.py ファイルを使用してグローバルレコーダーのオプションを設定できます。

  • AUTO_INSTRUMENT (Django のみ) - 組み込みデータベースおよびテンプレートレンダリング操作のサブセグメントを記録します。

  • AWS_XRAY_CONTEXT_MISSING - LOG_ERROR に設定すると、セグメントを開いていないときに測定されたコードがデータを記録しようとしたときに例外が発生するのを防ぐことができます。

  • AWS_XRAY_DAEMON_ADDRESS – X-Ray デーモンリスナーのホストとポートを設定します。

  • AWS_XRAY_TRACING_NAME – がセグメントSDKに使用するサービス名を設定します。

  • PLUGINS – アプリケーションの AWS リソースに関する情報を記録します。

  • SAMPLINGFalse に設定してサンプリングを無効にします。

  • SAMPLING_RULESサンプリングルール を含むJSONファイルのパスを設定します。

settings.py でレコーダ設定を有効にするには、インストールされているアプリのリストに Django ミドルウェアを追加します。

例 settings.py - インストールされたアプリ
INSTALLED_APPS = [ ... 'django.contrib.sessions', 'aws_xray_sdk.ext.django', ]

XRAY_RECORDER という名前の dict で利用可能な設定を行います。

例 settings.py - インストールされたアプリ
XRAY_RECORDER = { 'AUTO_INSTRUMENT': True, 'AWS_XRAY_CONTEXT_MISSING': 'LOG_ERROR', 'AWS_XRAY_DAEMON_ADDRESS': '127.0.0.1:5000', 'AWS_XRAY_TRACING_NAME': 'My application', 'PLUGINS': ('ElasticBeanstalkPlugin', 'EC2Plugin', 'ECSPlugin'), 'SAMPLING': False, }

環境変数

環境変数を使用して X-Ray SDK for Python を設定できます。は、次の変数SDKをサポートしています。

  • AWS_XRAY_TRACING_NAME – がセグメントSDKに使用するサービス名を設定します。プログラムによって設定したサービス名を上書きします。

  • AWS_XRAY_SDK_ENABLED – に設定するとfalse、 は無効になりますSDK。デフォルトでは、環境変数SDKが false に設定されていない限り、 は有効になっています。

    • 無効にすると、グローバルレコーダーによって、デーモンに送信されないダミーセグメントとサブセグメントが自動的に生成され、自動パッチ適用は無効になります。ミドルウェアはグローバルレコーダーのラッパーとして記述されています。ミドルウェアによるセグメントやサブセグメントの生成もすべて、ダミーセグメントおよびダミーサブセグメントになります。

    • AWS_XRAY_SDK_ENABLED の値を設定するには、環境変数を使用するか、aws_xray_sdk ライブラリの global_sdk_config オブジェクトと直接やり取りします。環境変数を設定すると、これらの通信は上書きされます。

  • AWS_XRAY_DAEMON_ADDRESS – X-Ray デーモンリスナーのホストとポートを設定します。デフォルトでは、 はトレースデータ (UDP) とサンプリング () の両方127.0.0.1:2000に SDKを使用しますTCP。この変数は、デーモンを次のように構成している場合に使用します。別のポートでリッスンするまたは、別のホストで実行されている場合。

    [形式]
    • 同じポートaddress:port

    • 異なるポートtcp:address:port udp:address:port

  • AWS_XRAY_CONTEXT_MISSING – 計測されたコードが、セグメントが開いていないときにデータを記録しようとした場合に例外をスローするには、RUNTIME_ERROR に設定します。

    有効な値
    • RUNTIME_ERROR— ランタイム例外をスローします。

    • LOG_ERROR – エラーをログ記録して続行します (デフォルト)。

    • IGNORE_ERROR – エラーを無視して続行します。

    リクエストが開かれていないときに実行されるスタートアップコード、または新しいスレッドを生成するコードで測定されたクライアントを使用しようとしたときに発生する可能性があるセグメントまたはサブセグメントの欠落に関連するエラー。

環境変数は、コードで設定される値を上書きします。