Go to Hackademy website

New Relic - le mode développeur

Nicolas Zermati

Posté par Nicolas Zermati dans les catégories outils

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.

Installation de l’agent

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…

Accès au tableau de bord

Le tableau de bord est accessible à l’adresse /newrelic.

Vous y trouverez la liste des requêtes ayant été faites sur le serveur :

Accueil - New Relic dev mode

Cette liste comporte les informations suivantes :

  • la date de la requête, relativement au démarrage de l’application,
  • le temps mis par le serveur pour calculer la réponse et
  • le chemin visité

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.

Résumé d’une requête

Lorsque l’on clique sur une URL, on arrive sur une page de résumé :

Résumé d'une requête - New Relic dev mode

Comme vous pouvez le voir, cette page contient :

  • le nom du controlleur utilisé,
  • l’action exécutée,
  • un tableau des composants les plus lents de cette exécution et
  • un résumé graphique de ce tableau.

Note : La ligne Remainder concerne l’instrumentation de New Relic.

Détails d’une requête

On peut afficher les détails d’une requête depuis le résumé.

Détails d'une requête - New Relic dev mode

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…

SQL d’une requête

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 :

SQL d'une requête - New Relic dev mode

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 :

SQL d'une requête - New Relic dev mode

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…

Profil d’une requête

Lorsque l’on active le profiler, on n’accède pas au résumé classique mais à ceci :

SQL d'une requête - New Relic dev mode

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.

Conclusion

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.

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