Problema
Importante
Observe que isso só será um problema se nenhum dado estiver sendo relatado.
Você está usando o agente Python mais recente e vê uma entrada de log com uma mensagem de aviso como:
Attempt to activate application in a process different to where the agent harvest thread was started.
OU:
Attempt to reactivate application or record transactions in a process different to where the agent was already registered.
O aplicativo é exibido como relatório na interface do New Relic, mas nenhum dado é relatado ao New Relic.
Solução
Para resolver este problema com seu aplicativo:
Mova todas as chamadas para
newrelic.agent.register_application
ounewrelic.agent.application
dentro das funções dentro de uma verificação__name__ == __main__
.Se você não tiver certeza de onde as chamadas para
newrelic.agent.register_application
ounewrelic.agent.application
estão ocorrendo, use o log de depuração do agente para procurar uma entrada contendo:newrelic.core.agent DEBUG - Application was activated from:Use o rastreamento da entrada da chamada que ativou o agente. Consulte os seguintes quadros, que são considerados normais:
File "newrelic/api/transaction.py", line x, in __init__application.activate()File "newrelic/hooks/application_celery.py", line x, in process_initializerapplication_instance().activate()Se a ativação estiver ocorrendo em um local diferente, corrija esse problema seguindo este exemplo:
Antes:
import newrelic.agent# This will cause the agent to activate whenever custom_event is importedapp = newrelic.agent.application()def custom_event():newrelic.agent.record_custom_event('CustomEvent', {}, application=app)Depois:
import newrelic.agentdef custom_event():app = newrelic.agent.application()newrelic.agent.record_custom_event('CustomEvent', {}, application=app)
Para outras dicas quando nenhum dado aparece, consulte a documentação de resolução de problemas do Python.
Causa
Existem duas causas principais para esse problema. A primeira é criar uma instância de aplicativo várias vezes ou criar uma instância de aplicativo antes da bifurcação.
Isso geralmente é causado por uma chamada para
newrelic.agent.register_application
ounewrelic.agent.application
que ocorre no momento da importação.Example:
import newrelic.agent# This will cause the agent to activate whenever custom_event is importedapp = newrelic.agent.application()def custom_event():newrelic.agent.record_custom_event('CustomEvent', {}, application=app)Esse problema também pode ocorrer quando serviços de monitoramento como o celery, onde um processo pai principal lança processos de trabalho. Ocorre quando uma instância de aplicativo do agente é criada no processo principal antes da bifurcação dos processos de trabalho. Como o agente é lançado no processo pai, nenhum dado é coletado no processo filho.