Il existe quelques solutions pour obtenir des métriques de son application Rails. Le service proposé par New Relic est certainement la référence dans le domaine du monitoring. Dans cet article je voudrais présenter les fonctionnalitées qu’offre New Relic en mode développement.
Pour introduire New Relic sur votre projet, rien de plus simple, il suffit d’ajouter le gem newrelic_rpm
à votre application.
Pour aller plus loin, on peut également utiliser le profiler ruby-prof
. Je reviendrais brièvement dessus dans la suite de l’article…
# Gemfile
group :development do
...
gem 'newrelic_rpm' # Use the New Relic developer mode
gem 'newrelic_moped' # Add instrumentation for Mongoid 3
gem 'ruby-prof' # Profile the action, useful with with new relic agent
...
end
Dans mon cas, je ne vais utiliser que le mode de développement donc inutile de polluer les autres environnements.
J’utilise également MongoDB et Mongoid qui nécéssitent newrelic_moped
afin de prendre en compte les appels à la base de données.
Vous trouverez une liste des intrumentations disponibles sur le dépot rpm_contrib
.
En plus d’installer le gem, il faut mettre à disposition le fichier config/newrelic.yml
.
Ce fichier est accessible depuis un compte New Relic mais vous pouvez aussi le trouver sur le dépot du gem.
# config/newrelic.yml
common: &default_settings
license_key: ''
app_name: Mon Appli
monitor_mode: true
developer_mode: false
log_level: info
browser_monitoring:
auto_instrument: true
audit_log:
enabled: false
capture_params: false
transaction_tracer:
enabled: true
transaction_threshold: apdex_f
record_sql: obfuscated
stack_trace_threshold: 0.500
error_collector:
enabled: true
capture_source: true
ignore_errors: ActionController::RoutingError
development:
<<: *default_settings
monitor_mode: false
app_name: Mon Appli (Dev)
developer_mode: true
Vous remarquerez que je ne donne pas de licence_key
car en mode développement, aucune communication avec les serveurs de New Relic n’est requise.
En conséquence, nul besoin d’une clé.
Une fois ces éléments en place, installez les gems avec la commande bundle install
et lancez votre serveur…
Le tableau de bord est accessible à l’adresse /newrelic
.
Vous y trouverez la liste des requêtes ayant été faites sur le serveur :
Cette liste comporte les informations suivantes :
Pour arriver à ce résultat, j’ai visité trois fois le chemin /projects
.
Avant et après la seconde fois j’ai respectivement activé et désactivé le profiling.
Vous pouvez voir que ce dernier à un effet non négligeable sur les performances de l’application, à n’utiliser qu’en cas de besoin donc…
La liste des requêtes n’inclut pas les requêtes ciblant des assets.
Lorsque l’on clique sur une URL, on arrive sur une page de résumé :
Comme vous pouvez le voir, cette page contient :
Note : La ligne Remainder
concerne l’instrumentation de New Relic.
On peut afficher les détails d’une requête depuis le résumé.
Ces détails vous permettent de remarquer que lors de mon rendu, une requête à la base de données est effectuée. On notera également que ce n’est pas la source de la lenteur du rendu…
En fait il ne s’agit pas du SQL dans tout les cas mais plus généralement des échanges entre votre base de donnée et votre application. Bref, lorsque vous cliquez sur SQL depuis le résumé ou depuis le tableau de bord, vous accedez à cette vue :
Dès lors, il est facile de repérer des annomalies. Par exemple découvrir que des requêtes sont faites deux fois ou bien qu’il y a des requêtes N+1, etc.
Pour chaque requête vous pouvez afficher la trace d’exécution de celle ci, pratique pour en identifier l’origine :
Ici on voit que c’est dans la méthode admin_or_authenticate_user!
que je fais la requête. En cliquant sur la ligne, on affiche même le contenu du fichier…
Lorsque l’on active le profiler, on n’accède pas au résumé classique mais à ceci :
Sur la capture on peut voir que l’instrumentation fausse le résultat, c’est dommage. Néanmois si jamais vous rencontrez un problème insoluble, ces informations pourront peut être vous aiguiller.
Voila c’est terminé pour cette présentation du mode développeur de New Relic. Le service associé permet d’aggréger ces mêmes informations sur la durée afin d’en tirer des métriques, créer des alertes, etc. Si vous êtes en charge d’une ou plusieurs applications, ce serait dommage de se priver de ce feedback précieux.
Il est facile de développer à l’aveugle, et de ne voir les problèmes que lorsqu’on s’y heurte, en production. Avec New Relic, vous ne serez plus jamais dans le noir ;-)
L’équipe Synbioz.
Libres d’être ensemble.