Problema
Importante
Tenga en cuenta que esto sólo es un problema si no se informan datos.
Estás utilizando el último agente de Python y ves una entrada log con un mensaje de advertencia como:
Attempt to activate application in a process different to where the agent harvest thread was started.
O:
Attempt to reactivate application or record transactions in a process different to where the agent was already registered.
La aplicación se muestra como informes en la UI de New Relic, pero no se informa ningún dato a New Relic.
Solución
Para resolver este problema con su aplicación:
Mueva todas las llamadas a
newrelic.agent.register_application
onewrelic.agent.application
dentro de funciones dentro de una marca__name__ == __main__
.Si no está seguro de dónde se producen las llamadas a
newrelic.agent.register_application
onewrelic.agent.application
, utilice el registro de depuración del agente para buscar una entrada que contenga:newrelic.core.agent DEBUG - Application was activated from:Utilice el rastreo de la entrada de la llamada que activó al agente. Consulte los siguientes cuadros, que se consideran normales:
File "newrelic/api/transaction.py", line x, in __init__application.activate()File "newrelic/hooks/application_celery.py", line x, in process_initializerapplication_instance().activate()Si la activación se produce desde una ubicación diferente, corrija este problema siguiendo este ejemplo:
Before:
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)After:
import newrelic.agentdef custom_event():app = newrelic.agent.application()newrelic.agent.record_custom_event('CustomEvent', {}, application=app)
Para obtener otros consejos cuando no aparecen datos, consulte la documentación de resolución de problemas de Python.
Causa
Hay dos causas principales de este problema. El primero es crear una instancia de aplicación varias veces o crear una instancia de aplicación antes de la bifurcación.
Esto suele deberse a una llamada a
newrelic.agent.register_application
onewrelic.agent.application
que se produce en el momento de la importación.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)Este problema también puede ocurrir cuando se monitorean servicios como el celery donde se procesa un proceso principal de trabajo de lanzamiento. Ocurre cuando se crea una instancia de aplicación de agente en el proceso principal antes de bifurcar los procesos de trabajo. Dado que el agente se lanza en el proceso principal, no se recopilan datos en el proceso secundario.