Go to Hackademy website

Analysez vos erreurs avec Errbit

François Vaux

Posté par François Vaux dans les catégories outils

Ne nous leurrons pas, la plupart des applications finissent par générer des erreurs (aussi appelées exceptions) qui peuvent, quand elles ne sont pas fatales, impliquer des problèmes plus profonds.

Il existe plusieurs solutions pour ne pas rater ces précieuses informations : envoi d’emails, stockage dans une base de données dédiée, notifications SMS, etc.

Errbit est une solution intégrée, libre et open-source très répandue, calquant son mode de fonctionnement (jusqu’à son API publique) sur Airbrake, une solution hébergée et payante.

Errbit est une application Rails (3 à l’heure ou ces lignes sont écrites) utilisant MongoDB pour stocker les erreurs desquelles elle est notifiée, tout en envoyant des notifications par email aux différentes personnes impliquées dans l’application.

Elle permet, tout comme son pendant propriétaire, d’agréger les erreurs en provenance de vos applications de façon centralisée. Ceci se fait au travers d’appels à l’API publique d’Errbit.

L’API étant compatible avec Airbrake, on va pouvoir réutiliser la gem Airbrake pour faire ces appels de façon automatisée.

Il faut noter que la gem permet par défaut d’instrumenter automatiquement les erreurs survenant dans les contrôleurs de l’application Rails.

Installation d’Errbit

L’installation se fait facilement en suivant les instructions fournies dans le

README de l’application. Voici le résumé de la procédure :

# Installer MongoDB, sous Ubuntu on pourra faire :
apt-get install mongodb-10gen

# Installer les dépendances : libxml et libcurl
apt-get install libxml2 libxml2-dev libxslt-dev libcurl4-openssl-dev

# Installer Bundler
gem install bundler

# Cloner le dépôt
git clone https://github.com/errbit/errbit.git; cd errbit

# Installation des dépendances
bundle install

# Préparation de l'application
rake errbit:bootstrap

Test en local et déploiement

Pour tester l’application en local, vous pouvez lancer le serveur Rails via la commande rails server, comme avec n’importe quelle application Rails.

Elle est alors disponible sur http://localhost:3000.

Par défaut, la tâche errbit:bootstrap crée un utilisateur errbit@errbit.example.com avec le mot de passe password.

Une fois connecté, vous avez accès aux différentes applications configurées et vous pouvez en ajouter.

Pour déployer l’application, vous avez généralement deux options : Capistrano + serveur dédié, ou Heroku.

Dans notre cas, nous déploirons sur un serveur dédié à l’aide de Capistrano.

Pour cela il faut copier le fichier config/deploy.example.rb vers config/deploy.rb et éditer le fichier config/config.yml pour indiquer les bonnes valeurs (hôte, rôles, dépôt, utilisateur, etc.).

Une fois ceci réalisé, créez la hiérarchie standard d’une application Capistrano sur le serveur puis lancez cap deploy:setup et cap deploy.

Si vous utilisez rbenv, n’oubliez pas de rajouter le chemin vers les shims au PATH dans la recette Capistrano :

set :default_environment, {
  'PATH' => "/home/synbioz/.rbenv/shims:/home/synbioz/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
}

N’oubliez pas non plus de lancer l’application avec Unicorn de la façon dont vous le faites habituellement, et de configurer votre serveur Web pour servir correctement l’application au domaine choisi.

Ajout d’une application

L’ajout d’une application se fait grâce au bouton Add a New App depuis l’onglet Apps.

Après avoir cliqué dessus, vous devrez remplir un formulaire assez explicite demandant des informations sur l’application.

Vous noterez qu’Errbit propose en plus une intégration avec différents gestionnaires de tickets (Redmine, Github Issues, Gitlab, etc.) et à plusieurs services de notification (Campfire, Hubot).

Errbit peut aussi notifier les déploiements, chose très pratique dans un environnement multi-développeurs.

Après avoir ajouté l’application, un court texte vous explique comment rendre disponible le suivi des erreurs dans votre application.

Configuration de l’application

Vous devrez ajouter la gem airbrake dans votre Gemfile, et créer un initializer pour celle-ci.

Chaque application dispose de sa propre clé d’API. Voici un exemple d’initializer pour un Errbit déployé sur errbit.example.com :

Airbrake.configure do |config|
  config.api_key = '2d02c427ed006992a7285e009fa1c303'
  config.host    = 'errbit.example.com'
  config.port    = 80
  config.secure  = config.port == 443
end

Après cette étape, vous n’avez plus rien à faire si ce n’est attendre que vos contrôleurs génèrent des erreurs.

Vous voudrez cependant certainement aller plus loin que cette gestion, et pourquoi pas gérer des erreurs hors des contrôleurs (dans vos objets métier par exemple).

Gérer les autres erreurs

La gem Airbrake permet, en plus de l’instrumentation automatique des erreurs des contrôleurs, de soumettre des erreurs personnalisées à Errbit.

D’une part, vous pouvez vouloir instrumenter plus d’erreurs que ce qu’Airbrake fait par défaut dans les contrôleurs. Pour cela, utilisez notify_airbrake en passant en argument une exception.

Partout ailleurs que dans les contrôleurs, vous pouvez faire appel à Airbrake.notify.

Cette dernière prend en argument supplémentaire un hash d’attributs que vous pouvez rajouter à l’exception afin de donner plus de détails sur le contexte dans lequel elle est survenue.

Conclusion

Avec Errbit, vous n’aurez plus d’excuse pour ne pas avoir remarqué un bug critique ou une régression, et vous améliorerez considérablement votre capacité à débugguer votre application.

L’installation et la configuration de l’application sont vraiment très simples, et se priver d’une telle solution (ou d’un équivalent) serait un réel handicap quant à votre facilité à deployer une application robuste.

Articles connexes

Un plugin Vim à la mimine

03/01/2019

Dans l’article précédent, intitulé une assez bonne intimité, je vous présentais GPG et le chiffrement de courriels. Nous avons alors remarqué que le contenu d’un courriel était encodé de sorte que le...

Une assez bonne intimité

20/12/2018

Si vous êtes utilisateur de MacOS, il y a de fortes chances que vous utilisiez Apple Mail pour échanger des courriels. Et comme vous êtes sensible à la confidentialité des informations que vous...

Tests end to end avec Jest et Puppeteer

05/07/2018

Dans cet article, on va partir sur des tests end to end. Pour planter le décor, un test end to end (e2e) est un test logiciel qui a pour but de valider que le système testé répond correctement à un...

Chasser les requêtes N+1 avec Bullet

05/04/2018

Aujourd’hui nous allons parler des requêtes N+1 dans une application Rails : vous savez ces lignes quasiment identiques, qui s’ajoutent de manière exponentielle aux logs, dès lors que l’on appelle...