Comme vous l'avez surement tous remarqué, on se bouffe des tonnes d'erreurs 500 sur le site. Pour cela je pense qu'il faudrait une solution de « monitoring d'erreurs ».
J'ai naturellement pensé à Sentry, solution que je suis en train de déployer à titre personnel mais également pour un projet plus pro/important.
Sentry kesako ?
« Sentry is a realtime, platform-agnostic error logging and aggregation platform ». Oui mais encore ? C'est une solution qui permet de capturer, trier et analyser des logs mais également de centraliser plusieurs projets (preprod et prod par exemple).
L'architecture repose sur du Python (ouf !) et du Django ! On la le choix du SQDB (merci Django) bien que « We highly recommend using PostgreSQL for your database, or MySQL if you have no other choice » (cc SpaceFox).
De plus, on a le droit à des plugins, notamment celui-ci qui peut vraiment nous intéresser.
Qu'est ce que le projet y gagne ?
Une trace des erreurs qui permet de comprendre et d'analyser facilement ce qui ce passe, avec des informations détaillés. Quoi de plus frustrant d'avoir tout le monde qui hurlent « Je prends des 500 » et d'être là avec un tail -f à essayer de comprendre ce qui se passe, et en définitive redémarrer le serveur web en priant. De plus, je doute que tous les utilisateurs du site reportent les 500.
Comment on met ça en place ?
Il existe 2 solutions :
- https://getsentry.com/welcome/, une solution hébergé. Un petit tour sur https://www.getsentry.com/pricing/ vous fera rapidement passer à la solution numéro 2.
- La seconde solution c'est d'héberger nous même notre serveur Sentry. Un petit tour sur https://pypi.python.org/pypi/sentry pour voir qu'il suffit d'un pip install sentry pour installer tout ça (bon OK faut le configurer après mais on a des sys-admin géniaux).
Et pour Django ?
Ça fonctionne très bien avec le client Python qui s'appelle Raven (http://raven.readthedocs.org/en/latest/config/django.html).
Et les alternatives ça donne quoi ?
- Airbrake avec https://github.com/airbrake/airbrake-django. Ça semble assez bien foutu. C'est en Ruby.
- Exceptional avec https://github.com/zacharyvoase/django-exceptional. C'est encore du Ruby.
Voilà, j'espère que ce topic pourra être utile et permettre la mise en place d'une de ces solutions.
Note : Quand je dis qu'il faut configurer Sentry, c'est relativement simple.