Python >> Tutoriel Python >  >> Python

Surveillance des projets Django avec Rollbar

Un moyen rapide de rechercher des exceptions et des erreurs dans vos projets d'application Web Django consiste à ajouter quelques lignes de code pour inclure un outil de surveillance hébergé.

Dans ce didacticiel, nous apprendrons à ajouter le service de surveillance Rollbar à une application Web pour visualiser tous les problèmes produits par notre application Web. Ce didacticiel utilisera Django comme framework Web pour créer l'application Web, mais il existe également des tutoriels pour les frameworks Flask et Bottle. Vous pouvez consultez également une liste d'autres outils hébergés et open source sur la page de surveillance.

Nos outils

Python 3 est fortement recommandé pour ce didacticiel car Python 2 ne sera plus pris en charge à partir du 1er janvier 2020. Python 3.6.4 a été utilisé pour créer ce didacticiel. Nous utiliserons également les dépendances d'application suivantes pour créer notre application :

  • Framework Web Django, version 2.0.4
  • bibliothèque rollbar monitoringinstrumentation,version 0.13.18,pour signaler les exceptions et les erreurs
  • pip et virtualenv, qui sont installés avec Python 3, pour installer et isoler ces bibliothèques Django et Rollbar de vos autres applications
  • Un compte Rollbar gratuit où nous enverrons les données d'erreur et les afficherons lorsqu'elles seront capturées

Si vous avez besoin d'aide pour configurer votre environnement de développement avant d'exécuter ce code, consultez ce guide pour configurer Python 3 et Django sur Ubuntu 16.04 LTS.

Tout le code de cet article de blog est disponible en open source sur GitHub sous la licence MIT dans le répertoire monitor-python-django-apps du référentiel blog-code-examples. Utilisez et modifiez le code comme bon vous semble pour vos propres applications.

Installation des dépendances

Démarrez le projet en créant un nouvel environnement virtuel à l'aide de la commande suivante. Je recommande de conserver un répertoire séparé tel que ~/venvs/ afin que vous sachiez toujours où se trouvent tous vos environnements virtuels.

python3 -m venv monitordjango

Activez le virtualenv avec le activate script shell :

source monitordjango/bin/activate

L'invite de commande changera après l'activation de virtualenv :

N'oubliez pas que vous devez activer votre virtualenv dans chaque nouvelle fenêtre de terminal où vous souhaitez utiliser le virtualenv pour exécuter le projet.

Nous pouvons maintenant installer les packages Django et Rollbar dans l'environnement virtuel vide et activé.

pip install django==2.0.4 rollbar==0.13.18

Recherchez une sortie comme celle-ci pour confirmer que les dépendances sont correctement installées.

Collecting certifi>=2017.4.17 (from requests>=0.12.1->rollbar==0.13.18)
  Downloading certifi-2018.1.18-py2.py3-none-any.whl (151kB)
    100% |████████████████████████████████| 153kB 767kB/s 
Collecting urllib3<1.23,>=1.21.1 (from requests>=0.12.1->rollbar==0.13.18)
  Using cached urllib3-1.22-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests>=0.12.1->rollbar==0.13.18)
  Using cached chardet-3.0.4-py2.py3-none-any.whl
Collecting idna<2.7,>=2.5 (from requests>=0.12.1->rollbar==0.13.18)
  Using cached idna-2.6-py2.py3-none-any.whl
Installing collected packages: pytz, django, certifi, urllib3, chardet, idna, requests, six, rollbar
  Running setup.py install for rollbar ... done
Successfully installed certifi-2018.1.18 chardet-3.0.4 django-2.0.4 idna-2.6 pytz-2018.3 requests-2.18.4 rollbar-0.13.18 six-1.11.0 urllib3-1.22

Nous avons nos dépendances prêtes à fonctionner, nous pouvons donc maintenant écrire le code de notre projet Django.

Notre application Web Django

Django facilite la génération du code passe-partout pour les nouveaux projets et applications à l'aide du django-admin.py commandes. Accédez au répertoire où vous stockez généralement vos projets de codage. Par exemple, sur mon Mac j'utilise /Users/matt/devel/py/ . Exécutez ensuite la commande suivante pour démarrer un projet Django nommé djmonitor :

django-admin.py startproject djmonitor

La commande créera un répertoire nommé djmonitor avec plusieurs sous-répertoires que vous devriez connaître lorsque vous avez déjà travaillé avec Django.

Modifiez les répertoires dans le nouveau projet.

cd djmonitor

Démarrez une nouvelle application Django pour notre exemple de code.

python manage.py startapp billions

Django créera un nouveau dossier nommé billions pour notre projet.Assurons-nous que nos URL Django fonctionnent correctement avant d'écrire le code de l'application.

Ouvrez maintenant djmonitor/djmonitor/urls.py et ajoutez les lignes en surbrillance afin que les URL avec le chemin /billions/ sera acheminé vers l'application sur laquelle nous travaillons.

""" (comments section)
"""
from django.conf.urls import include
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('billions/', include('billions.urls')),
    path('admin/', admin.site.urls),
]

Enregistrer djmonitor/djmonitor/urls.py et ouvrez djmonitor/djmonitor/settings.py .Ajouter le billions application à settings.py en insérant la ligne en surbrillance, qui deviendra la ligne numéro 40 après insertion :

# Application definition

INSTALLED_APPS = [ 
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'billions',
]

Enregistrez et fermez settings.py .

Rappel :assurez-vous de changer le DEBUG par défaut et SECRET_KEY valeurs en settings.py avant de déployer du code en production. Sécurisez correctement votre application avec les informations des checklists de déploiement en production de Django afin de ne pas ajouter votre projet à la liste des applications piratées sur le web.

Prochain changement dans le djmonitor/billions annuaire. Créez un nouveau fichier nommé urls.py qui seront spécifiques aux routes pour le billions app dans le djmonitor projet.

Ajoutez les lignes suivantes au djmonitor/billions/urls.py actuellement vide fichier.

from django.conf.urls import url                                                                                                                              
from . import views

urlpatterns = [ 
    url(r'(?P<slug>[\wa-z-]+)', views.they, name="they"),
]

Économisez djmonitor/billions/urls.py . Encore un fichier avant de pouvoir tester que notre simple application Django fonctionne. Ouvrez djmonitor/billions/views.py .

from django.core.exceptions import PermissionDenied
from django.shortcuts import render


def they(request, slug):
    if slug and slug == "are":
        return render(request, 'billions.html', {})
    else:
        raise PermissionDenied("Hmm, can't find what you're looking for.")

Créez un répertoire pour vos fichiers de modèle nommé templates sous le djmonitor/billions répertoire de l'application.

mkdir templates

Dans templates créer un nouveau fichier nommé billions.html qui contient le balisage de modèle Django suivant.

<!DOCTYPE html>
<html>
  <head>
    <title>They... are BILLIONS!</title>
  </head>
  <body>
    <h1><a href="http://store.steampowered.com/app/644930/They_Are_Billions/">They Are Billions</a></h1>
    <img src="https://media.giphy.com/media/2jUHXTGhGo156/giphy.gif">
  </body>
</html>

Très bien, tous nos fichiers sont en place afin que nous puissions tester l'application. Dans le répertoire de base de votre projet, exécutez le serveur de développement Django :

python manage.py runserver

Le serveur de développement Django démarrera sans aucun problème autre qu'un avertissement de migration non appliquée.

(monitordjango) $ python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

April 08, 2018 - 19:06:44
Django version 2.0.4, using settings 'djmonitor.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Seul le /billions/ route atteindra avec succès notre billions application. Essayez d'accéder à "http://localhost:8000/billions/are/". Nous devrions voir notre templaterender avec le gif :

Cool, notre application a rendu avec succès une page HTML super simple avec un GIF de l'un de mes jeux informatiques préférés. Et si nous essayions un autre chemin sous /billions/ comme "http://localhost:8000/billions/arenot/" ?

Notre 403 Forbidden est levé, ce que nous attendions sur la base de notre code. C'est un bloc de code quelque peu artificiel, mais voyons comment nous pouvons attraper et signaler ce type d'erreur sans changer notre views.py code du tout. Cette approche sera beaucoup plus facile pour nous lors de la modification d'une application existante que d'avoir à refactoriser le code pour signaler ces types d'erreurs, si nous savons même où elles existent.

Surveillance avec Rollbar

Accédez à la page d'accueil Rollbar dans votre navigateur pour ajouter leur outil à notre application Django.

Cliquez sur le bouton "S'inscrire" dans le coin supérieur droit. Entrez votre adresse e-mail, un nom d'utilisateur et le mot de passe que vous souhaitez sur la page d'inscription.

Après la page d'inscription, vous verrez le flux d'intégration où vous pourrez entrer un nom de projet et sélectionner un langage de programmation. Pour le nom du projet, tapez "Full Stack Python" (ou le nom du projet sur lequel vous travaillez), puis sélectionnez que vous surveillez une application basée sur Python.

Appuyez sur le bouton "Continuer" en bas pour avancer. L'écran suivant nous montre quelques instructions sur la façon d'ajouter la surveillance.

Modifions notre code de projet Django pour permettre à Rollbar de collecter et d'agréger les erreurs qui apparaissent dans notre application.

Rouvrir djmonitor/djmonitor/settings.py et recherchez le MIDDLEWARE liste. Ajouter rollbar.contrib.django.middleware.RollbarNotifierMiddleware comme dernier élément :

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'rollbar.contrib.django.middleware.RollbarNotifierMiddleware',
]

Ne fermez pas settings.py à l'instant. Ajoutez ensuite les lignes suivantes au bas du fichier. Changer le access_token valeur à votre jeton d'accès côté serveur Rollbar et root vers le répertoire où vous développez votre projet.

ROLLBAR = {
    'access_token': 'access token from dashboard',
    'environment': 'development' if DEBUG else 'production',
    'branch': 'master',
    'root': '/Users/matt/devel/py/blog-code-examples/monitor-django-apps/djmonitor',
    'patch_debugview': False,
}

Si vous n'êtes pas sûr de ce qu'est votre jeton secret, vous pouvez le trouver sur l'écran d'accueil de la Rollbar ou dans « Paramètres » -> « Jetons d'accès » sur rollbar.com.

Notez que je stocke généralement toutes mes variables d'environnement dans un .env

Nous pouvons tester que Rollbar fonctionne pendant que nous exécutons notre application. Exécutez-le maintenant en utilisant le serveur de développement.

python manage.py runserver

De retour dans votre navigateur Web, appuyez sur le bouton "Terminé ! Aller au tableau de bord".

Si un événement n'a pas encore été signalé, nous verrons un écran d'attente comme celui-ci :

Assurez-vous que votre serveur de développement Django est toujours en cours d'exécution et essayez d'aller sur "http://localhost:8000/billions/arenot/". Une erreur 403 est immédiatement signalée sur le tableau de bord :

Nous recevons même un e-mail avec l'erreur (qui peut également être désactivée si vous ne voulez pas d'e-mails pour chaque erreur) :

Très bien, nous avons maintenant la surveillance et le rapport d'erreurs tous configurés pour notre application Django !

Et maintenant ?

Nous avons appris à détecter les problèmes dans notre projet Django à l'aide de Rollbar et à afficher les erreurs dans l'interface de Rollbar. Essayez ensuite les fonctionnalités de surveillance plus avancées de Rollbar telles que :

  • trier les erreurs par utilisateur
  • configuration des règles sur les erreurs de groupe
  • débogage des problèmes de déploiement

Il y a beaucoup plus à apprendre dans les domaines du développement et des déploiements Web, alors continuez à apprendre en lisant sur les frameworks Web. Vous pouvez également en savoir plus sur l'intégration de Rollbar avec les applications Python via leur documentation Python.

Des questions? Faites-le moi savoir via un ticket de problème GitHub sur le référentiel Full Stack Python, sur Twitter@fullstackpythonou @mattmakai.

Voyez-vous une faute de frappe, un problème de syntaxe ou une formulation qui prête à confusion dans cet article de blog ? La source de cette page sur GitHub et soumettre une demande d'extraction avec un correctif ou déposer un ticket de problème sur GitHub.


Prochain article