Syntaxe
newrelic.agent.create_distributed_trace_payload()
Cette méthode est utilisée pour générer des charges permettant de connecter des transactions au sein d'une tracedistribuée.
Exigences
Python agent version 4.2.0.100 ou supérieure.
Prudence
Cette API est obsolète. Veuillez plutôt utiliser newrelic.agent.insert_distributed_trace_headers
.
Le tracing distribué doit être activé.
Description
Cette API nécessite que le tracing distribué soit activé.
Pour obtenir des instructions sur l'utilisation de cet appel, ainsi que de son appel partenaire accept_distributed_trace_payload
, consultez Activer le tracing distribué avec l'API d' agent.
Cet appel est utilisé pour implémenter le tracing distribué. Il génère une charge utile qui est lue par l'application réceptrice avec la méthode accept_distributed_trace_payload
.
Valeurs de retour
En cas de succès, renvoie un objet DistributedTracePayload
, qui hérite du type dict
intégré de Python et possède les méthodes supplémentaires suivantes :
text
:Génère une version de chaîne codée JSON de la charge utile.http_safe
:Génère une version de chaîne codée en base64 de la charge utile.
En cas d'échec, renvoie None
. Cela peut se produire lorsque le tracing distribué n'est pas activé ou lorsqu'il est appelé depuis l'extérieur d'une transaction active.
Exemples
Important
Afin de maintenir un ordre correct des étendues dans une trace, vous devez générer la charge utile dans le contexte de l'étendue qui l'envoie.
Créer une traces distribuées à l'intérieur d'une tâche d'arrière-plan
Un exemple d'utilisation de create_distributed_trace_payload
dans la création de deux traces externes à partir d'une seule tâche en arrière-plan :
@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)
Créer une traces distribuées charge à l'intérieur d'une traceexterne
Un exemple d'utilisation de create_distributed_trace_payload
dans la création d'une trace externe:
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)