Heroku est une solution de plateforme en tant que service (PaaS) pour l'hébergement d'applications Web dans divers langages agent, dont Python. Avec l'agent, vous pouvez étendre Heroku avec des métriques de New Relic.
Ce document décrit les considérations particulières relatives à l'utilisation d'Heroku comme service d'hébergement avec l'agent Python.
Installer le module complémentaire New Relic
Après avoir déployé votre Python application sur Heroku, installez l'agent Python :
L'installation du module complémentaire crée automatiquement un compte New Relic privé et configure l'accès pour les hôtes Heroku. L' agent commencera monitoring les performances des application, l'expérience finale de l'utilisateur et les performances de l'hôte collectées après l'installation du module complémentaire. Dans quelques minutes, les données devraient commencer à apparaître sur votre page de résumé APM.
Mise à niveau à partir d'une installation d'agent existante
Si un agent est déjà installé, réinstallez le module complémentaire à l'aide de la commande Heroku toolbelt.
$heroku config:set NEW_RELIC_APP_NAME='Your Application Name'
Installer l'agent Python
Pour installer un package Python tiers tel que notre agent Python sur Heroku, utilisez pip. Heroku recherche automatiquement un fichier requirements.txt dans le répertoire racine de votre projet. Il installe tout ce qui est répertorié dans ce fichier lorsque vous envoyez votre projet vers Heroku.
Créez ou modifiez le fichier
requirements.txt
en ajoutant la ligne :newrelicDjango users: Modifiez l'entrée
web
de votreProcfile
, en préfixant la valeur avecnewrelic-admin run-program
. Par exemple:web: newrelic-admin run-program gunicorn mysite.wsgiEnvoyez votre projet sur Heroku.
Cela installera le Python agent package avec la dernière version répertoriée dans Python l'index du package (PyPi).
Mettre à jour l'agent Python
Heroku met en cache le package et ne détecte pas quand une version plus récente de l'agent Python est disponible. Pour forcer une mise à niveau :
Modifiez le fichier
requirements.txt
en incluant la version spécifique de l'agent Python (n.n.n.n
) avec le nom du package :newrelic==n.n.n.nEnvoyez votre projet sur Heroku.
Vérifiez le module complémentaire New Relic
Pour vérifier que le module complémentaire New Relic a été activé, exécutez :
$heroku run env | grep NEW_RELIC
Cela génère une liste de variables d'environnement spécifiques à New Relic dans Heroku. L'agent Python les utilise pour déterminer quel compte New Relic et quelles données d'application utiliser pour générer des rapports de données.
Au minimum, vous devriez voir :
NEW_RELIC_LOG=stdoutNEW_RELIC_LICENSE_KEY=****************************************NEW_RELIC_APP_NAME=Your app name
Le est unique à votre compte New Relic.
Dépannez votre installation
Quelques minutes après l'installation et la configuration de l'agent, les données devraient commencer à apparaître sur la page de résumé APM de votre application. Si aucune donnée n'apparaît, testez que les variables d'environnement sont correctement détectées en exécutant :
$heroku run newrelic-admin validate-config - stdout
Cela créera une connexion et signalera les données de transaction de test sous l'application Python Agent Test. 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’assistance supplémentaire, suivez les procédures de dépannage de l’agent Python.
Initialiser l'agent Python
Pour initialiser l’agent Python :
- Depuis la racine de votre projet, recherchez le
Procfile
- Modifiez l'entrée
web
dans votreProcfile
pour définir ce qu'il faut faire pour démarrer votre application Web Python. - Reportez-vous aux exemples suivants pour insérer
newrelic-admin run-program
au début de la commande. - Exécutez votre application Web Python sous le contrôle du script d’administration de l’agent Python.
Mécanisme d'hébergement | Exemple d'entrée Web |
---|---|
Flask avec l'hôte de développement intégré |
|
Flask avec du gunicorn |
|
Django avec gunicorn répertorié dans |
|
Prudence
Évitez d’utiliser les hôtes de développement intégrés de tout framework Web antérieur à la version 2.7.4 de Python ou antérieur à Django 1.4. Utilisez plutôt gunicorn ou uWSGI.
L'hôte WSGI utilisant le module wsgiref n'était pas entièrement compatible WSGI pour les hôtes de développement antérieurs à la version 2.7.4 de Python. Cela a empêché l'agent Python de pouvoir signaler des données correctes.
Enveloppement d'application WSGI
L'agent fournit un encapsulage automatique du WSGI application point pour ces frameworks Web :
- Bottle
- Django
- Flask
Si vous utilisez l’un de ces frameworks Web Python, aucune étape supplémentaire n’est requise.
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.
Si le point d'entrée est celui-ci... | Fais ceci... |
---|---|
Le point d'entrée est une fonction | Enveloppez-le dans un décorateur :
|
Le point d'entrée est une fonction ou un objet importé d'un autre module | Enveloppez-le dans le style décorateur
|
Suivre les tâches de Celery
Pour enregistrer le temps d'exécution des tâches Celery en tant que tâches d'arrière-plan sur votre application Web, encapsulez le démarrage de l'hôte Celery avec la commande newrelic-admin
.
Préfixez la commande de démarrage existante définie par l'entrée worker
dans votre Procfile
:
worker: newrelic-admin run-program python hellodjango/manage.py celeryd -E -B --loglevel=INFO
Déboguer l'agent Python
Pour commencer le débogage, collectez la log sortie de l'agent Python . Heroku envoie Python agent la sortie à la sortie standard et la capture dans le du serveur log Web.
Pour accéder au log du serveur Web pour Heroku, exécutez :
$heroku logs
Par défaut,Python agent log info
l' se au niveau. Si le support New Relic requests un niveau de logging alternatif, vous devez ajouter manuellement une variable de configuration. Par exemple, pour définir la sortie de logging sur debug
, exécutez :
$heroku config:add NEW_RELIC_LOG_LEVEL=debug
Votre application redémarre automatiquement lorsque vous modifiez le niveau de log.
Prudence
Le niveau de log debug
produit de grandes quantités de sortie. Assurez-vous de supprimer ce paramètre dès qu'il n'est plus nécessaire, en exécutant :
$heroku config:remove NEW_RELIC_LOG_LEVEL
Modifier le fichier de configuration de l'agent
Lorsque vous utilisez le module complémentaire d'Heroku avec New Relic, cela définit automatiquement les variables d'environnement clés pour l'agent Python. Vous pouvez également personnaliser des paramètres supplémentaires avec le fichier de configuration de l'agent ou utiliser la configuration côté serveur.
N'ajoutez pas de paramètres de base tels que la clé de licence, le nom de l'application, etc. au fichier de configuration. Heroku ajoute automatiquement ces paramètres.
Pour personnaliser d’autres paramètres, utilisez le fichier de configuration de l’agent Python avec Heroku :
Ajoutez le fichier de configuration de l'agent
newrelic.ini
au répertoire racine de votre référentiel de projet que vous transmettez à Heroku : Dans la section[newrelic]
, incluez le paramètre de configuration spécifique ; par exemple :[newrelic]transaction_tracer.function_trace = mydbm:connectValidez le fichier de configuration dans votre référentiel et transmettez la modification à Heroku.
Utilisez la commande
heroku config:add
pour définir la variable d'environnementNEW_RELIC_CONFIG_FILE
pour votre application déployée :bash$heroku config:add NEW_RELIC_CONFIG_FILE=newrelic.ini
Si vous utilisez le programme wrapper newrelic-admin pour lancer votre hôte WSGI, les paramètres de votre clé de licence, du nom de application, etc., seront récupérés à partir des variables d'environnement définies par Heroku. Tous les paramètres supplémentaires que vous définissez dans le fichier de configuration de l'agent seront également appliqués. Ensuite, lorsque l’agent s’enregistre auprès de New Relic, toute configuration côté serveur sera également fusionnée pour créer la configuration finale que l’agent utilisera.