Sintaxe
newrelic.agent.create_distributed_trace_payload()
Este método é utilizado para gerar carga utilizada para conectar transações dentro de um distributed trace.
Requisitos
Agente Python versão 4.2.0.100 ou superior.
Cuidado
Esta API foi descontinuada. Use newrelic.agent.insert_distributed_trace_headers
em vez disso.
distributed tracing deve estar ativado.
Descrição
Esta API requer quedistributed tracing esteja ativado.
Para obter instruções sobre como usar esta chamada, juntamente com sua chamada de parceiro accept_distributed_trace_payload
, consulte Habilitar distributed tracing com API do agente.
Esta chamada é usada para implementar distributed tracing. Ele gera uma carga que é lida pelo aplicativo receptor com o método accept_distributed_trace_payload
.
Valores de retorno
Quando bem-sucedido, retorna um objeto DistributedTracePayload
, que herda do tipo dict
integrado do Python e tem os seguintes métodos adicionais:
text
: gere uma versão de string codificada em JSON da carga.http_safe
: gera uma versão de string codificada em base64 da carga útil.
Quando malsucedido, retorna None
. Isso pode acontecer quando distributed tracing não está habilitado ou quando chamado de fora de uma transação ativa.
Exemplos
Importante
Para manter a ordem adequada dos spans em um trace, você deve gerar a carga útil no contexto do span que a envia.
Crie uma carga distributed trace dentro de uma tarefa em segundo plano
Um exemplo de uso de create_distributed_trace_payload
na criação de dois rastreamentos externos a partir de uma única tarefa em segundo plano:
@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)
Crie uma carga distributed trace dentro de um traceexterno
Um exemplo de uso create_distributed_trace_payload
na criação de um rastreamento externo:
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)