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.
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
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.
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.
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).
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.
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.