OpenShift est une solution de plateforme en tant que service (PaaS) capable d'héberger des applications Web utilisant différents langages, y compris l'agent Python .
Préparez votre application
Avant d’installer l’agent Python, assurez-vous que votre application Web Python est installée et exécutée sous OpenShift à l’aide de l’une des cartouches Python disponibles. Consultez les guides des développeurs OpenShift pour plus d’informations.
Installer l'agent Python APM
OpenShift prend en charge deux manières différentes d'installer un package Python tiers. Vous pouvez soit répertorier le package en tant que dépendance dans le setup.py
de votre application Web, soit dans le fichier requirements.txt
utilisé par pip
.
Si vous utilisez un fichier setup.py
, installez l'agent en ajoutant newrelic
à la liste des modules tiers transmis à install_requires
:
from setuptools import setup
setup( name="YourAppName", version="1.0", description="OpenShift App", author="Your Name", author_email="example@example.com", url="https://www.python.org/community/sigs/current/distutils-sig", install_requires=["Flask>=0.7.2", "MarkupSafe", "newrelic"],)
Si vous utilisez pip
, ajoutez la ligne suivante à requirements.txt
:
newrelic
Lorsque vous transférez votre projet vers OpenShift, cela installera le package de l'agent Python. Il utilisera la dernière version de l'agent Python du miroir OpenShift du Python package Index (PyPi). Les mises à jour du miroir OpenShift de PyPi peuvent être retardées, vous devrez donc peut-être attendre jusqu'à un jour avant qu'une nouvelle sortie sur PyPi ne soit disponible sur OpenShift.
Mettre à jour l'agent Python
OpenShift mettra en cache le package et ne détectera pas quand une version plus récente de l'agent Python est disponible. Pour forcer une mise à niveau vers une version plus récente, répertoriez explicitement la version par rapport au nom du package dans le fichier setup.py
ou requirements.txt
et envoyez votre application. Utilisez cette syntaxe :
newrelic==A.B.C.D
Remplacez A.B.C.D
par la version de l'agent Python que vous souhaitez installer.
Utiliser les variables d’environnement de l’agent Python
Pour que l'agent Python signale les données au bon compte, vous devez lui indiquer le de votre compte New Relic. Pour OpenShift, le moyen le plus sûr de fournir la clé de licence est d'utiliser une variable d'environnement configurée dans la configuration de votre application à l'aide de la commande rhc env set
. Cela évite de stocker des informations sensibles dans votre référentiel GIT et fonctionne également si vous utilisez une application Web à grande échelle hébergée sur plusieurs hôtes physiques.
$rhc env set NEW_RELIC_LICENSE_KEY=YOUR_LICENSE_KEY -a YOUR_APP_NAME
Lors de la spécification de votre clé de licence, indiquez également Python agent à log l' où enregistrer le message de :
$rhc env set NEW_RELIC_LOG=stderr -a YOUR_APP_NAME
Pour vérifier que les variables d’environnement sont définies, exécutez :
$rhc env list -a YOUR_APP_NAME
Bien que définis, ils ne prendront effet qu'au prochain redémarrage des engrenages de l'application Web.
Tester l'installation de l'agent
Pour vérifier que le package de l'agent Python a été correctement installé et que les variables d'environnement de l'agent sont correctement définies, vous pouvez ssh
accéder à l'engrenage principal de votre application et exécuter :
$newrelic-admin validate-config - stdout
Ce script d'administration créera une connexion et signalera les données de transaction de test sous l'application Python Agent Test dans votre compte.
Les données peuvent prendre jusqu'à cinq minutes pour apparaître dans l' UI. Si le message n'apparaît pas après un certain temps, capturez le résultat de l'exécution du test et utilisez les données pour résoudre le problème. Si vous avez besoin d'aide supplémentaire, obtenez de l'aide sur support.newrelic.com.
Initialiser l'agent Python
Les cartouches Python OpenShift offrent deux manières d'exécuter une application WSGI.
- La première méthode utilise une installation Apache/mod_wsgi préconfigurée. Dans ce cas, votre point d'entrée d'application WSGI doit être défini dans le fichier
wsgi.py
. - La deuxième méthode repose sur votre demande de fourniture d'un script d'application Web Python autonome appelé
app.py
. Cela démarrera généralement un serveur Python WSGI intégré, avec le point d'entrée de l'application WSGI spécifié dans le fichierapp.py
, ou importé à partir d'un fichier de code Python distinct, tel que le fichierwsgi.py
.
Quelle que soit la méthode utilisée, OpenShift contrôle le démarrage du serveur WSGI. Vous devez intégrer manuellement l'agent Python dans votre application WSGI. Vous ne pouvez pas utiliser le script wrapper newrelic-admin
autour du démarrage du serveur WSGI.
Si vous utilisez l'approche Apache/mod_wsgi, ajoutez le code suivant au tout début du fichier wsgi.py
:
import newrelic.agentnewrelic.agent.initialize()
Assurez-vous que cela précède toutes les autres importations de modules Python apparaissant dans le fichier wsgi.py
. Vous n’avez pas besoin de fournir d’arguments à l’appel initialize()
, car les informations de clé de licence et la destination de logging sont lues à partir des variables d’environnement.
Si vous utilisez un serveur Python WSGI intégré à partir de app.py
, placez ces lignes tout en haut du fichier app.py
, même si vous importez le point d'entrée de l'application WSGI à partir d'un fichier wsgi.py
. Lorsque vous utilisez app.py
avec wsgi.py
, n'ajoutez pas ces lignes à wsgi.py
.
Évitez d’utiliser les serveurs de développement intégrés de tout framework Web. N'utilisez pas non plus la cartouche OpenShift Python 2.6 ou les anciennes versions de Django. Cela est dû au fait que ces serveurs de développement sont souvent basés sur le serveur WSGI du module wsgiref de la bibliothèque standard Python. Le serveur WSGI du module wsgiref présentait un bug, ce qui signifiait qu'il n'était pas entièrement compatible WSGI, ce qui pouvait amener l'agent Python à signaler des données incorrectes. Ce problème avec le module wsgiref n'est résolu que dans Python 2.7.4. Le serveur WSGI intégré dans les anciennes versions de Django antérieures à Django 1.4 avait un problème similaire.
Envelopper l'application WSGI
Si vous utilisez un framework Web Python pour lequel l’agent fournit un encapsulage automatique du point d’entrée de l’application WSGI, c’est tout ce qui doit être fait. Les frameworks Web Python avec encapsulation automatique incluent Django, Flask et Bottle.
Pour d’autres, vous devez modifier le fichier de code Python avec votre point d’entrée d’application WSGI pour encapsuler l’objet d’application WSGI avec un wrapper d’application WSGI. Cela lancera le chronométrage des requests Web reçues par votre application.
Point d'entrée | Exemple de code |
---|---|
Le point d'entrée est une fonction | Enveloppez-le dans un décorateur.
|
Le point d'entité est une fonction ou un objet importé d'un module différent. | Enveloppez-le dans un style pré-décorateur.
|
Remplacer le nom de l'application
Par défaut, vos données sont enregistrées sous le nom d'application Python Application. Pour modifier le nom d’affichage, utilisez l’interface utilisateur APM. Cependant, du côté de l' agent, nous recommandons fortement de conserver cette valeur comme une valeur unique et immuable, indépendante des modifications apportées au nom d'affichage dans l' UI. Cela est nécessaire si vous avez l'intention d'exécuter plusieurs sites distincts sous un seul compte New Relic et que vous souhaitez que les données soient signalées séparément.
Pour remplacer le nom de l'application, utilisez la commande rhc env set
:
$rhc env set NEW_RELIC_APP_NAME='Web Site (Production)' -a yourappname
Pour vérifier que la configuration a été mise à jour, exécutez :
$rhc env list -a yourappname
Recherchez ensuite :
NEW_RELIC_APP_NAME=Web Site (Production)
Les modifications apportées aux variables d’environnement ne prennent effet qu’au prochain redémarrage de votre application Web.
Déboguer l'agent Python
Pour commencer le débogage, collectez la log sortie de l'agent Python . Lorsque la NEW_RELIC_LOG
variable d'environnement est définie stderr
sur, le message de log de l'agent Python sera capturé dans le log Python Web standard deapplication.
Pour suivre le log Web d'application sous OpenShift, exécutez :
$rhc tail -a YOUR_APP_NAME
Pour obtenir le log complet, recopiez depuis chacune de vos applications web le fichier de log:
$OPENSHIFT_PYTHON_LOG_DIR/python.log
Par défaut,Python agent log info
l' se au niveau. Si l'agent nécessite un niveau de logging alternatif, vous devrez ajouter manuellement une variable d'environnement supplémentaire. Par exemple, pour définir la sortie de logging sur debug
, exécutez :
$rhc env set NEW_RELIC_LOG_LEVEL=debug -a YOUR_APP_NAME
Les variables d'environnement ne prennent pas effet immédiatement, assurez-vous donc de redémarrer votre application Web.
Exécutez le logging debug
uniquement lorsque cela est demandé et uniquement pendant la durée requise. Le logging de débogage peut produire beaucoup de résultats et gonflera votre fichier de log. Supprimez ce paramètre dès qu'il n'est plus nécessaire en exécutant la commande suivante, puis redémarrez votre application Web :
$rhc env unset NEW_RELIC_LOG_LEVEL -a YOUR_APP_NAME
Utilisez le fichier log pour résoudre le problème. Si vous avez besoin d'aide supplémentaire, obtenez de l'aide sur support.newrelic.com
Mettre à jour le fichier de configuration de l'agent
Avec OpenShift, la manière préférée de spécifier la clé de licence de votre compte et de définir où le logging doit aller est d'utiliser des variables d'environnement. Cela signifie qu'il n'est pas nécessaire d'utiliser un fichier de configuration d'agent pour faire fonctionner l'agent. Cependant, sans le fichier de configuration de l'agent, il n'est pas possible de personnaliser d'autres paramètres de l'agent.
Si vous activez la configuration côté serveur pour votre application, vous n'avez pas besoin d'un fichier de configuration d'agent. Cela se fait à partir du Application settings dans l'application d'interface utilisateur APM. En utilisant la configuration côté serveur, vous pouvez remplacer les paramètres principaux de l'agent. Lorsqu'une modification est apportée à un paramètre via l' UI, l' agent exécuté dans chacun des processus de votre application Web sera averti et récupérera les paramètres modifiés.
Cependant, certaines fonctionnalités agent sont incompatibles avec configuration côté serveur. Dans ces cas, utilisez un fichier de configuration d’agent envoyé avec votre application Web sur OpenShift.
Pour ajouter et activer un fichier de configuration d'agent avec OpenShift :
Ajoutez le fichier de configuration de l’agent
newrelic.ini
au répertoire racine de votre référentiel de projet que vous transmettez à OpenShift. Cela doit contenir une section[newrelic]
ainsi que uniquement le paramètre de configuration spécifique que vous devez définir. Par exemple:[newrelic]transaction_tracer.function_trace = mydbm:connectN'utilisez pas le fichier de configuration de l'agent pour les paramètres principaux tels que la clé de licence ou le nom de l'application, car cela remplacerait les paramètres de la variable d'environnement. Vous ne souhaitez probablement pas non plus que la clé de licence fasse partie de votre référentiel GIT, en particulier si le code source du projet est accessible au public.
Notez également que si la configuration côté serveur est activée en même temps, tout paramètre pouvant être défini via la configuration côté serveur remplacera toujours le paramètre local. Par conséquent, utilisez ceci uniquement pour les paramètres qui ne peuvent pas être définis à l'aide de la configuration côté serveur si la configuration côté serveur est activée.
Modifiez maintenant le fichier
wsgi.py
ouapp.py
où vous avez ajouté le code pour initialiser l'agent Python. Modifiez le code que vous aviez déjà ajouté à :import osimport newrelic.agentrepo_dir = os.environ['OPENSHIFT_REPO_DIR']config_file = os.path.join(repo_dir, 'newrelic.ini')newrelic.agent.initialize(config_file)Validez le fichier de configuration dans votre référentiel et transmettez la modification à OpenShift.