構文
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
、 Enable distributed tracing with agent APIs を参照してください。
この呼び出しは、分散型トレーシングを実装するために使用されます。このコールはペイロードを生成し、受信側のアプリケーションが accept_distributed_trace_payload
メソッドで読み込みます。
戻り値
成功すると、 DistributedTracePayload
オブジェクトを返します。このオブジェクトは、Pythonの組み込み dict
タイプを継承し、以下の追加メソッドを持っています。
テキスト
: ペイロードのJSONエンコードされた文字列バージョンを生成します。http_safe
: ペイロードのbase64エンコードされた文字列バージョンを生成します。
失敗した場合は、 None
を返します。これは、分散型トレーシングが有効になっていない場合や、アクティブなトランザクションの外から呼び出された場合に起こります。
例
重要
トレース内のスパンの適切な順序を維持するためには、ペイロードを送信するスパンのコンテキストでペイロードを生成する必要があります。
バックグラウンドタスク内での分散型トレースペイロードの作成
create_distributed_trace_payload
を使用して、単一のバックグラウンドタスク内から2つの 外部トレース を作成した例です。
@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)