New Relic & JMeter - Test de performance parfait

Faisant suite aux excellents articles d’introduction présentés récemment sur Nettuts +, cet article montre comment vous pouvez amener New Relic à un niveau supérieur. En tant qu'outil de surveillance de la performance, New Relic est fantastique, mais qu'en est-il de la performance? essai, avant de partir en direct. C'est là que JMeter entre en jeu. Dans ce didacticiel, vous allez voir comment tester notre application sous une charge réaliste et comment combiner les sorties de JMeter et New Relic pour vous donner confiance dans les performances de vos applications avant de les intégrer à un environnement de production..

Contenu sponsorisé

Ce contenu a été commandé par NewRelic et a été écrit et / ou édité par l'équipe de Tuts +. Notre objectif avec le contenu sponsorisé est de publier des tutoriels pertinents et objectifs, des études de cas et des interviews inspirantes qui offrent une véritable valeur éducative à nos lecteurs et nous permettent de financer la création de contenu plus utile..

Pourquoi attendre le déploiement pour voir comment votre application se comportera contre le trafic mondial réel. Si votre code comporte un goulot d'étranglement qui dégrade l'expérience utilisateur, souhaitez-vous vraiment que cette version soit mise en ligne? Et si nous pouvions trouver ces goulots d'étranglement rapidement, améliorer les performances et fournir une excellente application à nos utilisateurs finaux dès la première fois, et maintenir cette tendance avec des analyses comparatives régulières. JMeter et New Relic ensemble peuvent vous donner cette suite de tests de performance parfaite.


Application de démonstration

Avant de pouvoir utiliser New Relic et JMeter, nous avons besoin d’une application simple pour effectuer des tests de performance! Alors, écrivons une simple application Ruby Sinatra dotée d'un service que nous pouvons tester. Je n'entrerai pas trop dans la création de cette application, comme vous pouvez le lire sur Sinatra dans d'autres articles sur Nettuts+.

L'application sera un peu falsifiée, afin de nous permettre de voir des résultats intéressants allant dans le sens de ce que nous verrons dans diverses applications. Nous allons écrire un service qui prend un identifiant et, en fonction de cet identifiant, nous renverrons une valeur immédiatement ou avec un délai. Cela nous montrera ce qui peut arriver si les demandes sont traitées rapidement ou lentement et l'impact que cela a sur les performances globales de vos applications car de nombreux utilisateurs font des demandes..

Voici le code qui définit les services:

 require 'sinatra' require 'puma' require module 'newrelic_rpm' Exemple de classe App < Sinatra::Base get '/example/:id' do |id| result = id if id == '1' result = "This is our id: #id" end if id == '2' sleep 3 result = "We waited for id: #id" end result end end end

Comme vous pouvez le constater, il s'agit clairement d'un exemple artificiel, mais l'idée est que nous disposons de services à réponse rapide et d'un service avec un léger retard. Nous pouvons maintenant utiliser cette application et commencer à rédiger notre plan de tests de performance dans JMeter. Permet d’obtenir d’abord l’installation de JMeter sur notre machine.


Accrocher dans une nouvelle relique

Obtenir votre application rapportant à New Relic est un processus très simple. Les nouvelles reliques prennent en charge Ruby, Python, PHP, Java et d’autres plateformes, avec des guides faciles à suivre pour tous. Dans le cas de Ruby an Sinatra, il s’agit littéralement d’un processus en quatre étapes:

  • Ajoutez la gem 'newrelic_rpm' à votre GemFile et à votre 'installation groupée'.
  • Dans votre 'app.rb' principale où nous avons défini la voie de service ci-dessus, ajoutez une ligne "require" newrelic_rpm '".
  • Téléchargez le fichier 'newrelic.ini' depuis votre compte dans New Relic et placez-le dans un dossier de configuration de votre application..
    (S'assurer que le mode moniteur est défini sur 'true' pour le développement s'il est exécuté localement.)
  • Complétez votre application et voyez-la listée dans New Relic!

Une fois que vous avez suivi ces étapes simples, vous devriez commencer à voir certaines données arriver par New Relic lorsque vous frappez votre application avec du trafic. Vous saurez que cela fonctionne lorsque l'application est répertoriée et passe au vert.


Par souci d'exhaustivité, je vais simplement énumérer un bref aperçu de la vue principale que New Relic fournit pour vos applications. New Relic a été conçu principalement pour surveiller les applications situées dans des environnements de production avec un trafic en direct. L'écran de vue d'ensemble fournit un aperçu de l'état actuel de votre application et de la manière dont elle répond aux demandes des clients..

L'écran peut être décomposé comme suit:

  1. Temps de réponse - c'est le temps de réponse moyen des appels sur votre application.
  2. Apdex - Nouvelle métrique Relics pour l'expérience client. Un score plus proche de 1 indique la grande majorité des utilisateurs
    les demandes tombent dans un délai raisonnable. L'apdex peut être utile pour alerter quand il tombe en dessous du nombre défini.
  3. Débit - les demandes par minute (RPM) faites à votre application.
  4. Transactions Web - les différents itinéraires utilisés dans votre application. Celles-ci sont classées par demandes les plus longues.
  5. Taux d'erreur - le pourcentage de demandes provoquant une erreur. Vous pouvez cliquer et déboguer des erreurs individuelles ici.


Qu'est-ce que JMeter??


JMeter est une application Java qui vous permet de créer des plans de test pouvant tester votre application. Vous pouvez tout définir, depuis le nombre d'utilisateurs simultanés du service jusqu'à la quantité de demandes qu'ils émettent par seconde. Vous pouvez même multiplier les demandes pour voir comment votre application gère la charge changeante, comme dans le cas d'un déploiement dans le monde réel..

Dans le cadre de ce didacticiel, je montrerai les principes de base d'un plan de test pour vos applications, mais avec une multitude de plugins et de documentation, vous disposez de nombreux outils pour gérer tout type de test de performance dont vous pourriez avoir besoin..


Installation et utilisation

L'installation est assez simple et nous allons lister ici les instructions pour Mac et Linux.

Mac OS X

Sur un Mac, JMeter peut être installé très facilement via Brew. Une fois que vous avez Brew essayez le
commande suivante:

 brasser installer jmeter

Linux

Sur une machine Linux, téléchargez simplement à partir de la page de téléchargement JMeter. Ensuite, suivez simplement les instructions fournies.

Toutes les plateformes

Une fois que vous avez le paquet principal JMeter, nous devons également installer le jeu standard de plugins. Nous utiliserons un plugin en particulier par la suite, nous devons donc les ajouter pour pouvoir l’utiliser. Le jeu de plugins standard peut être obtenu à partir de ce lien: http://jmeter-plugins.org/downloads/file/JMeterPlugins-1.0.0.zip Une fois téléchargé, extrayez-le dans le paquet JMeter situé à: "/ usr / local / Cellar / jmeter / "sur un Mac et où que vous soyez installé sous Linux.


Analyse dans New Relic - Nous avons d'abord besoin d'un plan de test JMeter!

Alors maintenant que JMeter est installé et que notre application est simple, testons cette application et voyons comment elle se comporte. Lorsque vous lancez JMeter, vous obtenez cet écran:

Maintenant, définissons l'URL de base pour nos demandes. Clic droit sur "Plan de test" dans le volet gauche et choisissez 'Ajouter -> Elément de configuration -> Requête HTTP par défaut'. Nous pouvons maintenant entrer notre URL de base ici comme si.


Nous pouvons maintenant ajouter le nombre de threads ou "utilisateurs" de notre système. Pour ce faire, cliquez avec le bouton droit sur "Plan de test" encore et choisissez 'Ajouter -> Discussions (Utilisateurs) -> Groupe de discussions'. Nous pouvons ensuite entrer les utilisateurs, dans ce cas 20. Assurez-vous de choisir l'option nombre de boucles pour toujours, car cela nous permettra de contrôler ultérieurement le nombre et le nombre de demandes via un plugin..


Une fois que nous avons le groupe de threads, nous pouvons maintenant définir les demandes que nous souhaitons adresser à notre application que nous allons tester. Pour ce faire, nous allons ajouter "Requête HTTP" à notre "Plan de test". Ceci peut être trouvé en faisant un clic droit sur le "Groupe de discussions" et en choisissant "Ajouter -> Sampler -> Requête HTTP". Nous pouvons ensuite définir la demande à faire dans le volet comme ci-dessous.


Vous pouvez voir que nous n’avons pas besoin de définir l’URL de base, comme nous l’avons déjà fait et qu’il faut simplement ajouter le chemin d’accès à la demande. Dans ce cas, le chemin est à notre réponse 'exemple / 1'. Vous remarquerez également que je suis allé de l'avant et que j'ai ajouté les deux autres demandes avec les volets de résultat et de graphique, que nous utiliserons pour analyser les résultats des tests. A présent, vous devriez avoir la possibilité d'ajouter des éléments et vous pouvez facilement les trouver dans le menu à partir de leurs noms. Les deux principaux centres d’intérêt sont le "minuteur de mise en forme du débit" et le "graphe composite"..

Le minuteur de mise en forme nous permet de définir comment nous souhaitons que les demandes soient adressées à notre application au fil du temps. Par exemple, nous pouvons configurer une demande par seconde pendant 60 secondes, puis augmenter le nombre de demandes jusqu'à cinq par seconde pendant 60 secondes et voir l'effet que cela a sur nos temps de réponse. Voyons comment nous configurons cela dans le volet Shaping Timer.


Ainsi, en entrant dans chaque ligne et en ajoutant chaque ligne, vous pouvez définir le nombre de demandes à effectuer et la durée pendant laquelle vous devez le faire. Nous pouvons ensuite afficher nos résultats à l’aide du "Graphique composite", qui affiche le nombre de transactions effectuées à la seconde par rapport au temps de réponse de nos demandes. Cela nécessite une configuration minimale, en ajoutant simplement les deux graphiques que nous allons combiner, puis dans les paramètres du graphique composite, ajoutez les graphiques dont nous avons besoin, comme ceci:


C'est tout! Nous pouvons maintenant exécuter notre plan de test et commencer à voir des résultats. Appuyez sur play en haut de l'écran, puis cliquez sur le graphique composite. Il commencera à afficher les résultats au fur et à mesure qu'ils arrivent et vous pourrez avoir une idée de la réaction de votre application. Regardons nos résultats.


Nous pouvons clairement voir que le bond des demandes en une minute a un impact assez important sur notre application. Pendant la première minute, les demandes sont stables une par seconde et donnent des temps de réponse d’environ deux / trois ms. Cependant, lorsque nous augmentons à cinq, les temps de réponse augmentent légèrement, atteignant cinq et cinq m / s. Évidemment, ce sont des temps de réponse très rapides dans le monde réel, mais nous montrons simplement ici comment augmenter la charge et voir les conséquences, le cas échéant, que cela aura..

Comparons ces résultats avec le service qui a un délai de trois secondes. Comment cela va-t-il faire face à l'augmentation de la charge? Pour passer à l'exemple 2, cliquez avec le bouton droit de la souris sur l'exemple 1 et choisissez alterner. Cela désactivera cette demande, puis basculera sur l'exemple 2 et l'activera. Assurez-vous de cliquer sur le "Tout effacer" (Balayage) en haut pour effacer les résultats de la dernière exécution, puis cliquer sur play.


Même avec le délai de trois secondes, le serveur a assez bien géré les demandes et nous constatons à peu près la même chose en termes de résultats pour ce service. Seule une augmentation de quelques millisecondes à mesure que les demandes augmentent. Avec un service aussi simple, il faut s'y attendre.


Nouvelle analyse de relique

Le vrai pouvoir vient maintenant de combiner ces données avec New Relic. Nous pourrions par exemple configurer JMeter pour qu’il fonctionne pendant une demi-heure avec différentes variations de charge, puis utiliser New Relic pour analyser les résultats et utiliser sa fonctionnalité d’exploration pour rechercher les goulots d’étranglement dans l’application. Ceux-ci peuvent ensuite être ajustés, augmentant vos performances avant de livrer à vos clients.

Encore une fois, je n’entrerai pas dans la configuration de New Relic car cela est couvert dans d’autres articles récents sur Nettuts + (voir ici). Mais une fois votre application connectée, il suffit simplement de générer la charge via JMeter et de vous connecter à New Relic pour voir les résultats. Pour cette exécution, j'ai configuré le minuteur de mise en forme afin d'exécuter notre charge pendant 30 minutes, en augmentant le nombre de demandes de 5 à 10, puis de 15 par seconde. Cela devrait nous donner un trafic raisonnable à regarder dans New Relic.


Une fois que le test de JMeter est terminé, nous pouvons jeter un coup d’œil à New Relic qui peut maintenant voir stat sur le trafic suivant l’application..


Cela montre clairement la montée en puissance des requêtes, atteignant à son apogée environ 400 requêtes par minute (RPM) et les temps de réponse restant stables à trois secondes. Nous pouvons approfondir les statistiques et examiner la transaction que nous effectuons. Si vous cliquez sur la vue Transactions Web, vous pouvez voir l'analyse effectuée par New Relic uniquement sur cette partie de l'application. Si le code qui traitait la demande comportait plusieurs couches, telles que des méthodes permettant d'appeler d'autres systèmes pour obtenir des données avant de les restituer à l'utilisateur, la défaillance serait plus grave..

Par exemple, sur la gauche, cela montre que nous avons passé 100% du temps de la demande dans cet appel. Si nous avions plusieurs étapes, comme un appel à une base de données, nous pourrions y voir un pourcentage élevé et nous saurions optimiser la requête à la base de données pour améliorer les performances..


New Relic fournit également une vue de création de rapports sur les données de vos applications, appelée Evolutivité. Ce rapport peut être très utile pour contrôler la capacité de vos applications à gérer une charge croissante. Le graphique montre votre temps de réponse par rapport aux demandes par minute, et vous pouvez clairement voir si le temps de réponse se dégrade à mesure qu'il augmente. C’est un excellent outil auquel vous devriez vous référer souvent, à la fois dans les tests de performances, mais également dans le suivi des performances de votre application de production..

Dans notre exemple ci-dessous, il est clair que l'application est capable de conserver un temps de réponse de trois secondes même lorsque le nombre de tours / minute augmente..


New Relic fournit également une autre vue, celle de la capacité. Cela nous permet d’examiner la quantité de ressources disponibles que notre application utilise. Il indique au développeur si le nombre d'instances desservant votre application est suffisant pour gérer le type de charge que vous recevez. Cela est essentiel pour vous assurer que votre capacité de traitement ne soit pas proche de votre capacité et que vous êtes en mesure de gérer les pics de trafic pouvant survenir en dehors de votre flux de trafic normal. New Relic résume bien la page, à côté de l’analyse de notre application, que nous pouvons voir bien se porter même sur ce seul cas..



Conclusion

Le but de ce didacticiel était de vous montrer comment configurer rapidement les plans de test JMeter pour votre application, afin que vous puissiez tester les performances de votre application avant de la livrer à vos clients. Cette approche peut être utilisée dans de nouveaux projets, en veillant à ce que l'application que vous allez livrer soit prête pour le trafic dans le monde réel. Il peut également être utilisé sur des applications héritées, en vous fournissant un indicateur de performance de base. Ainsi, à mesure que vous apportez des modifications, vous pouvez voir si les performances de votre application s'améliorent ou diminuent..

En exploitant les excellents outils fournis par New Relic, vous pouvez à la fois surveiller votre application en ligne en temps réel, mais également utiliser son ensemble d’outils et l’appliquer à votre propre analyse hors ligne. Cela vous donnera, en tant que développeur, confiance dans votre produit, à la fois au cours de son développement et au moment de sa commercialisation..