Sintaxis
newrelic.agent.profile_trace(name=None, group=None, label=None, params=None, terminal=False)Se utiliza para instrumentar una función y las funciones dentro de ella a una profundidad específica para funciones que no están instrumentadas por defecto.
Descripción
profile_trace es un decorador para agregar a funciones. Agregar este decorador le permite recopilar información adicional de la transacción (incluida la información de la traza de la transacción).
El decorador profile_trace se puede usar en funciones con la versión del agente 2.102.0.85 o superior. La medición del tiempo de estos objetos comienza cuando se inicia el consumo, y termina cuando el objeto se agota o sale del ámbito.
Puede utilizar el decorador junto con decoradores existentes, incluidos los de métodos estáticos y de clase. Al anidar varios decoradores, tenga el decorador profile_trace como el decorador más externo.
Formularios de llamada alternativos
Para configuraciones en las que no puede utilizar el decorador, estos formularios de llamada alternativos están disponibles:
The wrapper
Si sabes de antemano dónde están las funciones específicas que deseas trazar, puedes usar el decorador profile_trace . Sin embargo, si don't conoce todas las funciones que deben trazarse (por ejemplo, si se buscan dinámicamente como parte de un sistema de enrutamiento), entonces debe usar ProfileTraceWrapper para ajustar la función en el en el momento de la inscripción o en el momento de la convocatoria.
Envoltura basada en rutas
wrap_profile_trace se utiliza para encapsular funciones fuera del código en el que están declaradas. Por ejemplo: podrías usar esto para instrumentar el código de la biblioteca que no deseas modificar.
Para obtener más información sobre las diferencias entre estos formatos de llamadas, consulte Diferentes formatos de llamadas.
Parámetros
Parámetro para decorador
newrelic.agent.profile_trace(name=None, group=None, label=None, params=None, depth=3)Esta convocatoria incluye estos parámetros:
Parámetro | Descripción |
|---|---|
cadena o función | Opcional. El nombre de la función. Podría ser una función que acepta los mismos parámetros que la función envuelta. Si no se establece, el valor predeterminado es el nombre capturado de la función. |
cadena o función | Opcional. El Si no se proporciona, el grupo se establecerá de forma predeterminada en |
cadena o función | Opcional. Agrega un indicador de estilo de llamada al segmento en una traza de la transacción. El valor predeterminado es |
dict o función | Opcional. Parámetros personalizados para agregar al segmento en las trazas de la transacción. Podría ser una función que acepte los mismos parámetros que la función que se está envolviendo. |
En t | Opcional. El valor predeterminado es 3. La profundidad del stack a la que se agregan segmentos dentro de la función. |
Parámetro de envoltura
newrelic.agent.ProfileTraceWrapper(wrapped, name=None, group=None, label=None, params=None)Los parámetros para el contenedor incluyen todos los parámetros para profile_trace y un parámetro wrapped :
Parámetro | Descripción |
|---|---|
función | Requerido. La función que se está envolviendo. |
cadena o función | Opcional. El nombre de la función. Podría ser una función que acepta los mismos parámetros que la función envuelta. Si no se establece, el valor predeterminado es el nombre capturado de la función. |
cadena o función | Opcional. El Si no se proporciona, el grupo se establecerá de forma predeterminada en |
cadena o función | Opcional. Agrega un indicador de estilo de llamada al segmento en una traza de la transacción. El valor predeterminado es |
dict o función | Opcional. Parámetros personalizados para agregar al segmento en las trazas de la transacción. Podría ser una función que acepte los mismos parámetros que la función que se está envolviendo. |
En t | Opcional. El valor predeterminado es 3. La profundidad del stack a la que se agregan segmentos dentro de la función. |
Parámetro de ajuste basado en ruta
newrelic.agent.wrap_profile_trace(module, object_path, name=None, group=None, label=None, params=None, depth=3)El parámetro incluye todos los parámetros para profile_trace y estos parámetros:
Parámetro | Descripción |
|---|---|
objeto | Requerido. El módulo que contiene la función a instrumentar. |
cadena | La ruta a la ubicación de la función. |
Ejemplos
profile_trace
Un ejemplo de uso del decorador 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_nodeEn el ejemplo anterior, la traza de perfil envuelve a una función recursiva. Las trazas de función se agregarán hasta una profundidad de 7 llamadas recursivas de stack dentro de la función.
Ejemplo de contenedor
Un ejemplo de uso de 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 desea nombrar la métrica después del nombre del extremo (en lugar de nombrar la métrica según el identificador de la función que se llama), puede proporcionar el nombre que se usará más un prefijo de ruta de métrica alternativo cuando se cree el objeto 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 desea nombrar la métrica dinámicamente (en lugar de nombrar la métrica en función del identificador de la función que se está llamando), puede proporcionar el nombre como una función cuando se crea el objeto 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)