Syntaxe
newrelic.agent.register_application(name=None, timeout=None)
Enregistre immédiatement l'agent Python. Utilisé pour l'initialisation manuelle de l'agent.
Description
Lorsque initialize
est appelé, il configure l'agent Python mais n'enregistre pas l'agent auprès du collecteur. Cet appel enregistre l'agent auprès du collecteur.
Ceci est principalement utilisé pour les transactions d'arrière-plan non Web instrumentées à l'aide de l' API. Lorsqu'il est utilisé avec une transaction non Web, appelez register_application
dès que possible après l'appel initialize
.
Pour les transactions Web, l' agent s'enregistre normalement automatiquement lorsque la première requête Web ou tâche d'arrière-plan se produit, l' agent reçoit sa configuration côté serveur du collecteur. Étant donné que l’enregistrement peut prendre une seconde environ, les détails des premières transactions sont généralement perdus. Vous pouvez collecter toutes ces données en forçant l'enregistrement avec register_application
, bien que cela signifie que votre application peut attendre que l'enregistrement soit terminé avant de répondre à des requests Web ou d'exécuter des tâches en arrière-plan.
Si le script lui-même exécute le serveur WSGI, appelez register_application
à partir du thread du programme principal dans le fichier de script principal. Si vous utilisez Apache/mod_wsgi ou uWSGI, effectuez l'appel à partir du fichier de script WSGI et placez l'appel immédiatement après initialize
.
Cet appel renvoie l'objet d'application, de la même manière que application
. L'objet est utilisé pour obtenir une référence à l'application agent-monitorer actuelle application et est utilisé par certains Python API agent appels d' de .
Évitez d'appeler pendant le verrouillage global de l'importation
N'appelez pas register_application
avec un délai d'expiration différent de zéro lorsque le verrou d'importation global Python sera maintenu. En d’autres termes, ne l’appelez pas dans un fichier de module à portée globale pendant que le module est en cours d’importation. Cela peut entraîner un blocage temporaire avec le thread d’arrière-plan créé par cet appel (le blocage ne sera pas rompu tant que le délai d’attente n’aura pas expiré).
Notez que de nombreux serveurs WSGI importent le module contenant l'application WSGI via les mécanismes d'importation de module Python standard. Dans ces cas, le verrou d'importation global sera maintenu et le problème de blocage décrit ci-dessus peut se produire.
Pour Gunicorn : le problème de blocage qui vient d’être décrit peut également se produire lors de l’utilisation de Gunicorn. Le problème est que le déclenchement de register_application
à partir du module WSGI n’est pas sûr, car il précharge le module dans le processus parent. Pour utiliser register_application
avec Gunicorn (avec ou sans délai d'attente), appelez-le à partir d'un rappel post_fork()
. Ce n'est pas un problème avec Apache/mod_wsgi, puisque ces outils ont été conçus pour ne pas faire cela, il est donc sûr de créer des threads d'arrière-plan lorsque l'application WSGI est chargée.
Appel après le fork du processus de travail
Si vous enregistrez des transactions dans un processus de travail enfant, n'appelez pas register_application
dans le processus parent avant que les processus de travail enfants ne soient dupliqués. Si vous appelez register_application
avant de forker, le thread de l'agent d'arrière-plan sera tué lorsque le processus sera forker. Étant donné que le thread parent signale des données au collecteur, l'agent ne pourra pas signaler de données à partir du processus de travail enfant.
Paramètres
paramètres | Description |
---|---|
chaîne | Facultatif. Le nom de l'application. Si défini, cela remplace le nom de l'application défini dans la configuration de l'agent Python. |
int ou virgule flottante | Le nombre de secondes pendant lesquelles l'application tentera de s'enregistrer avant d'abandonner et d'envoyer une réponse ; ce qui signifie que cette ligne se bloquera jusqu'à ce que New Relic démarre ou que le délai d'attente soit dépassé. Une valeur de Cette valeur indique le nombre maximal de secondes pendant lesquelles l'appelant doit être bloqué avant que le contrôle ne soit rendu et que l'appelant soit autorisé à continuer. Sans valeur, l'appel utilise le paramètre |
Valeurs de retour
Renvoie un application objet qui peut être utilisé par Python API d'autresagent appels d' .
Exemples
Enregistrement d'une tâche en arrière-plan
Cet exemple enregistre une tâche d’arrière-plan non Web avec un délai d’expiration long. En règle générale, pour une application Web, vous disposez d'un délai d'expiration très court (la valeur par défaut est 0), mais vous pouvez définir un délai d'expiration plus long pour une tâche non Web peu fréquente afin de garantir que l'initialisation et l'enregistrement ont lieu.
import newrelic.agent
newrelic.agent.initialize('newrelic.ini')newrelic.agent.register_application(timeout=10.0)
@newrelic.agent.background_task()def main(): pass
if __name__ == '__main__': main()