構文
newrelic.agent.create_distributed_trace_payload()
この方法は、分散型トレース内のトランザクションを接続するためのペイロードを生成するために使用されます。
要件
Pythonエージェントのバージョン4.2.0.100以上。
注意
この API は非推奨になりました。代わりに newrelic.agent.insert_distributed_trace_headers
を使用してください。
Distributed Tracingが有効であること .
説明
このAPIは、 分散型トレースが有効になっている必要があります 。
この呼び出しとそのパートナー呼び出し accept_distributed_trace_payload
の使用方法については、 「エージェント API で分散トレースを有効にする」を参照してください。
この呼び出しは、分散トレースを実装するために使用されます。これは、受信アプリケーションによって accept_distributed_trace_payload
メソッドを使用して読み取られるペイロードを生成します。
戻り値
成功すると、Python の組み込み dict
型を継承し、次の追加メソッドを持つ DistributedTracePayload
オブジェクトが返されます。
text
: ペイロードの JSON エンコード文字列バージョンを生成します。http_safe
: ペイロードの Base64 エンコード文字列バージョンを生成します。
失敗した場合は None
を返します。これは、分散トレースが有効になっていない場合、またはアクティブなトランザクションの外部から呼び出された場合に発生する可能性があります。
例
重要
トレース内のスパンの適切な順序を維持するためには、ペイロードを送信するスパンのコンテキストでペイロードを生成する必要があります。
バックグラウンドタスク内での分散型トレースペイロードの作成
1 つのバックグラウンド タスク内から 2 つの 外部トレース を作成する際の create_distributed_trace_payload
の使用例:
@newrelic.agent.background_task()def main(url): header_key = newrelic.agent.ExternalTrace.cat_distributed_trace_key
with newrelic.agent.ExternalTrace('my_external_library', url, method='GET'): # Generate the payload in the context of the ExternalTrace # span that sends it payload = newrelic.agent.create_distributed_trace_payload() headers = {header_key: payload.http_safe()} response = my_external_library._get(url, headers=headers)
data = _process_response(response) with newrelic.agent.ExternalTrace('my_external_library', url, method='POST'): # Generate the payload in the context of the ExternalTrace # span that sends it payload = newrelic.agent.create_distributed_trace_payload() headers = {header_key: payload.http_safe()} response = my_external_library._post(url, data=data, headers=headers)
外部トレースの中に分散型トレースペイロードを作成する
外部トレースの作成での create_distributed_trace_payload
の使用例:
def _bind_url(url, *args, **kwargs): # _bind_url is called with the args and kwargs sent to the `get` # method below return url
@newrelic.agent.external_trace('my_external_library', _bind_url, method='GET')def get(url): payload = newrelic.agent.create_distributed_trace_payload() header_key = newrelic.agent.ExternalTrace.cat_distributed_trace_key headers = {header_key: payload.http_safe()} return my_external_library._get(url, headers=headers)