통사론
newrelic.agent.create_distributed_trace_payload()
이 방법은 분산 추적 내에서 트랜잭션을 연결하는 데 사용되는 페이로드를 생성하는 데 사용됩니다.
요구 사항
Python 에이전트 버전 4.2.0.100 이상.
주의
이 API는 더 이상 사용되지 않습니다. 대신 newrelic.agent.insert_distributed_trace_headers
) 사용하십시오.
분산 추적을 활성화 해야 합니다.
설명
이 API를 사용하려면 분산 추적을 사용하도록 설정 해야 합니다.
파트너 호출 accept_distributed_trace_payload
과 함께 이 호출을 사용하는 방법에 대한 지침은 에이전트 API로 분산 추적 사용 을 참조하십시오.
이 호출은 분산 추적을 구현하는 데 사용됩니다. accept_distributed_trace_payload
메소드를 사용하여 수신 애플리케이션에서 읽는 페이로드를 생성합니다.
반환 값
성공하면 Python의 기본 제공 dict
유형에서 상속되고 다음과 같은 추가 메서드가 있는 DistributedTracePayload
객체를 반환합니다.
text
: 페이로드의 JSON 인코딩된 문자열 버전을 생성합니다.http_safe
: 페이로드의 base64로 인코딩된 문자열 버전을 생성합니다.
실패하면 None
을 반환합니다. 이는 분산 추적이 활성화되지 않았거나 활성 트랜잭션 외부에서 호출될 때 발생할 수 있습니다.
예
중요
추적에서 범위의 적절한 순서를 유지하려면 페이로드를 보내는 범위의 컨텍스트에서 페이로드를 생성해야 합니다.
백그라운드 작업 내에서 분산 추적 페이로드 만들기
단일 백그라운드 작업 내에서 두 개의 외부 추적 을 만드는 데 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)