Syntaxe
newrelic.agent.profile_trace(name=None, group=None, label=None, params=None, terminal=False)Utilisé pour instrumenter une fonction et les fonctions qu'elle contient jusqu'à une profondeur particulière pour les fonctions qui ne sont pas instrumentées par défaut.
Description
profile_trace est un décorateur permettant d'ajouter des fonctions. L'ajout de ce décorateur vous permet de collecter des informations de transaction supplémentaires (y compris des informations de trace de transaction).
Le décorateur profile_trace peut être utilisé sur les fonctions avec l'agent version 2.102.0.85 ou supérieure. Le chronométrage de ces objets commence lorsque la consommation débute, et se termine lorsque l'objet est épuisé ou sort de la portée.
Vous pouvez utiliser le décorateur en conjonction avec les décorateurs existants, y compris ceux pour les méthodes statiques et de classe. Lors de l'imbrication de plusieurs décorateurs, choisissez le décorateur profile_trace comme décorateur le plus externe.
Formes d'appel alternatives
Pour les configurations où vous ne pouvez pas utiliser le décorateur, ces formulaires d'appel alternatifs sont disponibles :
L'emballage
Si vous savez à l'avance où se trouvent les fonctions spécifiques que vous souhaitez trace, vous pouvez utiliser le décorateur profile_trace. Cependant, si vous don't connaissez toutes les fonctions qui doivent être tracées (par exemple, si elles sont recherchées dynamiquement dans le cadre d'un système de routage), vous devez alors utiliser ProfileTraceWrapper pour encapsuler la fonction au moment de l'enregistrement ou au moment de l'appel.
Enveloppement basé sur le chemin
wrap_profile_trace est utilisé pour encapsuler des fonctions en dehors du code dans lequel elles sont déclarées. Par exemple : vous pouvez l'utiliser pour instrumenter le code de la bibliothèque que vous ne souhaitez pas modifier.
Pour en savoir plus sur les différences entre ces formats d’appel, voir Différents formats d’appel.
Paramètres
paramètre pour le décorateur
newrelic.agent.profile_trace(name=None, group=None, label=None, params=None, depth=3)Cet appel inclut ces paramètres :
paramètres | Description |
|---|---|
chaîne ou fonction | Facultatif. Le nom de la fonction. Il peut s'agir d'une fonction qui accepte les mêmes paramètres que la fonction encapsulée. S'il n'est pas défini, la valeur par défaut est le nom capturé de la fonction. |
chaîne ou fonction | Facultatif. Le S'il n'est pas fourni, le groupe prendra la valeur |
chaîne ou fonction | Facultatif. Ajoute un indicateur de type légende au segment dans une trace de transaction. La valeur par défaut est |
dict ou fonction | Facultatif. Paramètres personnalisés à ajouter au segment dans les traces de transaction. Il peut s'agir d'une fonction qui accepte les mêmes paramètres que la fonction encapsulée. |
int | Facultatif. La valeur par défaut est 3. La profondeur de la stack à laquelle ajouter des segments dans la fonction. |
Paramètres de l'enveloppe
newrelic.agent.ProfileTraceWrapper(wrapped, name=None, group=None, label=None, params=None)Le paramètre du wrapper inclut tous les paramètres de profile_trace et un paramètre wrapped :
paramètres | Description |
|---|---|
fonction | Requis. La fonction en cours d'encapsulation. |
chaîne ou fonction | Facultatif. Le nom de la fonction. Il peut s'agir d'une fonction qui accepte les mêmes paramètres que la fonction encapsulée. S'il n'est pas défini, la valeur par défaut est le nom capturé de la fonction. |
chaîne ou fonction | Facultatif. Le S'il n'est pas fourni, le groupe prendra la valeur |
chaîne ou fonction | Facultatif. Ajoute un indicateur de type légende au segment dans une trace de transaction. La valeur par défaut est |
dict ou fonction | Facultatif. Paramètres personnalisés à ajouter au segment dans les traces de transaction. Il peut s'agir d'une fonction qui accepte les mêmes paramètres que la fonction encapsulée. |
int | Facultatif. La valeur par défaut est 3. La profondeur de la stack à laquelle ajouter des segments dans la fonction. |
Paramètre d'emballage basé sur le chemin
newrelic.agent.wrap_profile_trace(module, object_path, name=None, group=None, label=None, params=None, depth=3)Le paramètre inclut tous les paramètres de profile_trace et ces paramètres :
paramètres | Description |
|---|---|
objet | Requis. Le module contenant la fonction à instrumenter. |
chaîne | Le chemin vers l'emplacement de la fonction. |
Exemples
profile_trace
Un exemple d'utilisation du décorateur profile_trace :
import newrelic.agent
@newrelic.agent.profile_trace(depth=7)def find_node(tree, value): if tree.value == value: return tree for node in tree.children: found_node = find_node(node, value) if found_node: return found_nodeDans l'exemple ci-dessus, la trace de profil enveloppe une fonction récursive. Les traces de fonction seront ajoutées jusqu'à une profondeur de 7 appels de stack récursifs dans la fonction.
Exemple d'enveloppe
Un exemple d'utilisation du ProfileTraceWrapper:
import newrelic.agent
def find_node(tree, value): if tree.value == value: return tree for node in tree.children: found_node = find_node(node, value) if found_node: return found_node
find_node = newrelic.agent.ProfileTraceWrapper(find_node, depth=7)Si vous souhaitez nommer la métrique d'après le nom du point de terminaison (plutôt que de nommer la métrique en fonction de l'identifiant de la fonction appelée), vous pouvez fournir le nom à utiliser ainsi qu'un préfixe de chemin de métrique alternatif lors de la création de l'objet ProfileTraceWrapper .
import newrelic.agent
def find_node(tree, value): if tree.value == value: return tree for node in tree.children: found_node = find_node(node, value) if found_node: return found_node
find_node = newrelic.agent.ProfileTraceWrapper(find_node, name="find_node", group="Python/Profile", depth=7)Si vous souhaitez nommer la métrique de manière dynamique (plutôt que de nommer la métrique à partir de l'identifiant de la fonction appelée), vous pouvez fournir le nom en tant que fonction lors de la création de l'objet ProfileTraceWrapper.
import newrelic.agent
def find_node(tree, value): if tree.value == value: return tree for node in tree.children: found_node = find_node(node, value) if found_node: return found_node
find_node = newrelic.agent.ProfileTraceWrapper(find_node, name=lambda tree, value: f"find_node_{value}", depth=7)