Sintaxis
newrelic.agent.create_distributed_trace_payload()
Este método se utiliza para generar carga utilizada para conectar transacciones dentro de un rastreo distribuido.
Requisitos
Agente Python versión 4.2.0.100 o superior.
Advertencia
Esta API ha quedado obsoleta. Utilice newrelic.agent.insert_distributed_trace_headers
en su lugar.
rastreo distribuido debe estar habilitado.
Descripción
Esta API requiere que rastreo distribuido esté habilitado.
Para obtener instrucciones sobre cómo utilizar esta llamada, junto con su llamada de socio accept_distributed_trace_payload
, consulte Habilitar rastreo distribuido con API de agente.
Esta convocatoria se utiliza para implementar rastreo distribuido. Genera una carga útil que la aplicación receptora lee con el método accept_distributed_trace_payload
.
Valores de retorno
Cuando tiene éxito, devuelve un objeto DistributedTracePayload
, que hereda del tipo dict
integrado de Python y tiene los siguientes métodos adicionales:
text
: genera una versión de cadena codificada en JSON de la carga útil.http_safe
: Genera una versión de cadena codificada en base64 de la carga útil.
Si no tiene éxito, devuelve None
. Esto puede suceder cuando rastreo distribuido no está habilitado o cuando se llama desde fuera de una transacción activa.
Ejemplos
Importante
Para mantener el orden correcto de los tramos en una traza, se debe generar la carga útil en el contexto del tramo que la envía.
Crear una carga útil rastreo distribuida dentro de una tarea en segundo plano
Un ejemplo del uso de create_distributed_trace_payload
para crear dos trazas externas desde una sola tarea en 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)
Crear una carga útil rastreo distribuida dentro de una traza externa
Un ejemplo del uso create_distributed_trace_payload
para crear una traza externa:
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)