Problème
Important
Veuillez noter que ceci ne pose problème que si aucune donnée n’est signalée.
Vous utilisez la dernière version de l'agent Python et vous voyez une entrée log avec un message d'avertissement tel que :
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.
L'application s'affiche sous forme de rapport dans l'UI de New Relic, mais aucune donnée n'est signalée à New Relic.
Solution
Pour résoudre ce problème avec votre application :
Déplacez tous les appels vers
newrelic.agent.register_application
ounewrelic.agent.application
à l'intérieur des fonctions à l'intérieur d'une vérification__name__ == __main__
.Si vous n'êtes pas sûr de l'endroit où se produisent les appels à
newrelic.agent.register_application
ounewrelic.agent.application
, utilisez le log de débogage de l'agent pour rechercher une entrée contenant :newrelic.core.agent DEBUG - Application was activated from:Utilisez le traceback de l'entrée de l'appel qui a activé l'agent. Reportez-vous aux cadres suivants, qui sont considérés comme normaux :
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 l'activation se produit à partir d'un emplacement différent, corrigez ce problème en suivant cet exemple :
Avant:
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)Après:
import newrelic.agentdef custom_event():app = newrelic.agent.application()newrelic.agent.record_custom_event('CustomEvent', {}, application=app)
Pour d’autres conseils lorsqu’aucune donnée n’apparaît, consultez la documentation de dépannage Python.
Cause
Il y a deux causes principales à ce problème. La première consiste à créer une instance d’application plusieurs fois ou à créer une instance d’application avant le fork.
Cela est généralement dû à un appel à
newrelic.agent.register_application
ounewrelic.agent.application
survenant au moment de l'importation.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)Ce problème peut également se produire lors de monitoring de services tels que Celery, où un processus parent principal lance des processus de travail. Cela se produit lorsqu'une instance d'application d'agent est créée sur le processus principal avant de dupliquer les processus de travail. Étant donné que l'agent est lancé dans le processus parent, aucune donnée n'est collectée dans le processus enfant.