Sintaxe
newrelic.agent.profile_trace(name=None, group=None, label=None, params=None, terminal=False)Usado para instrumentar uma função e as funções dentro dela até uma profundidade específica para funções que não são instrumentadas por padrão.
Descrição
profile_trace é um decorador para adicionar a funções. Adicionar este decorator permite coletar informações adicionais de transação (incluindo informações de trace da transação).
O decorador profile_trace pode ser usado em funções com a versão do agente 2.102.0.85 ou superior. A medição de tempo desses objetos começa quando o consumo é iniciado e termina quando o objeto é esgotado ou sai do escopo.
Você pode usar o decorador em conjunto com decoradores existentes, incluindo aqueles para métodos estáticos e de classe. Ao aninhar vários decoradores, tenha o decorador profile_trace como o decorador mais externo.
Formulários de chamada alternativos
Para configurações onde você não pode usar o decorador, estes formulários de chamada alternativos estão disponíveis:
O invólucro
Se você souber antecipadamente onde estão as funções específicas que deseja trace , poderá usar o decorador profile_trace. No entanto, se você don't conhece todas as funções que precisam ser rastreadas (por exemplo, se elas estão sendo pesquisadas dinamicamente como parte de um sistema de roteamento), então você deve usar o ProfileTraceWrapper para encapsular a função no no momento da inscrição ou no momento da ligação.
Quebra automática baseada em caminho
wrap_profile_trace é usado para agrupar funções fora do código em que foram declaradas. Por exemplo: você pode usar isso para o código da biblioteca do instrumento que não deseja modificar.
Para obter mais informações sobre as diferenças entre esses formatos de chamada, consulte Diferentes formatos de chamada.
Parâmetro
Parâmetro para decorador
newrelic.agent.profile_trace(name=None, group=None, label=None, params=None, depth=3)Esta chamada inclui estes parâmetros:
Parâmetro | Descrição |
|---|---|
string ou função | Opcional. O nome da função. Pode ser uma função que aceita os mesmos parâmetros que a função que está sendo encapsulada. Se não for definido, o padrão é o nome capturado da função. |
string ou função | Opcional. O Se não for fornecido, o grupo assumirá |
string ou função | Opcional. Adiciona um sinalizador no estilo de destaque ao segmento em um trace da transação. O padrão é |
dict ou função | Opcional. Parâmetros personalizados para adicionar ao segmento nos traces da transação. Pode ser uma função que aceita os mesmos parâmetros que a função que está sendo encapsulada. |
int | Opcional. O padrão é 3. A profundidade da stack para adicionar segmentos dentro da função. |
Parâmetro do wrapper
newrelic.agent.ProfileTraceWrapper(wrapped, name=None, group=None, label=None, params=None)Os parâmetros do wrapper incluem todos os parâmetros para profile_trace e um parâmetro wrapped :
Parâmetro | Descrição |
|---|---|
função | Obrigatório. A função que está sendo encapsulada. |
string ou função | Opcional. O nome da função. Pode ser uma função que aceita os mesmos parâmetros que a função que está sendo encapsulada. Se não for definido, o padrão é o nome capturado da função. |
string ou função | Opcional. O Se não for fornecido, o grupo assumirá |
string ou função | Opcional. Adiciona um sinalizador no estilo de destaque ao segmento em um trace da transação. O padrão é |
dict ou função | Opcional. Parâmetros personalizados para adicionar ao segmento nos traces da transação. Pode ser uma função que aceita os mesmos parâmetros que a função que está sendo encapsulada. |
int | Opcional. O padrão é 3. A profundidade da stack para adicionar segmentos dentro da função. |
Parâmetro de encapsulamento baseado em caminho
newrelic.agent.wrap_profile_trace(module, object_path, name=None, group=None, label=None, params=None, depth=3)parâmetro inclui todos os parâmetros para profile_trace e estes parâmetros:
Parâmetro | Descrição |
|---|---|
objeto | Obrigatório. O módulo que contém a função a ser instrumentada. |
corda | O caminho para o local da função. |
Exemplos
profile_trace
Um exemplo de uso do 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_nodeNo exemplo acima, o trace de perfil envolve uma função recursiva. Os traces de função serão adicionados até 7 chamadas recursivas de stack de profundidade na função.
Exemplo de wrapper
Um exemplo de uso do 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)Se desejar nomear a métrica após o nome do endpoint (em vez de nomear a métrica com base no identificador da função que está sendo chamada), você poderá fornecer o nome a ser usado, além de um prefixo de caminho de métrica alternativo quando o objeto ProfileTraceWrapper for criado.
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)Se você quiser nomear a métrica dinamicamente (em vez de nomear a métrica com base no identificador da função que está sendo chamada), você pode fornecer o nome como uma função quando o objeto ProfileTraceWrapper é criado.
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)