Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Je s’appelle Glowroot - LyonJUG Octobre 2018

Je s’appelle Glowroot - LyonJUG Octobre 2018

Que vous soyez Dev, Ops ou QA, vous avez sûrement eu à investiguer des problèmes de performances sur une application Java.

Savez-vous que cela peut se faire simplement, sans toucher la moindre ligne de code, en moins de 5mn et sans impact sur votre application ?

Mieux encore, si je vous disais que vous pouvez utiliser le même outil que vous soyez en Dev, QA ou en production. Le même outil pour tous, ça sent bon le DevOps non ?

Avatar for Henri Gomez

Henri Gomez

October 24, 2018
Tweet

More Decks by Henri Gomez

Other Decks in Technology

Transcript

  1. Qui suis-je ? Dev, QA, Ops, CI/CD Actuellement éleveur d’infrastructure

    chez En charge notamment de https://github.com/hgomez @hgomez LyonJUG - 24 Octobre 2018
  2. Un APM, qu’est-ce donc ? Application Performance Management (*) Outillage

    de mesure des performances d’une application Terme principal : TPS (Transaction/s) LyonJUG - 24 Octobre 2018
  3. Un APM c’est un outil d’Ops Ops - SLA, Tuning

    Prod QA - Préprod, Réduction du taux de WTF Dev - Run à fond LyonJUG - 24 Octobre 2018
  4. Glowroot, c’est surpuissant Accès à l’instrumentation JVM instruments et MBeans

    Multi frameworks (Servlet, Netty, Play 1&2, VertX …) Multi protocoles (JDBC, Elastic, Cassandra ..) Multi App Server (Tomcat, Jetty, Wildfly, Payara…) Détection des pistes d’exécutions standard (servlet, quartz …) Ajout de pistes d'exécutions à la volée LyonJUG - 24 Octobre 2018
  5. Glowroot, APM Java Agent Java Mode Autonome ou connecté (Central)

    Overhead marginal < 10us Surcoût mémoire minime ~ 2ko LyonJUG - 24 Octobre 2018
  6. Un web server sur le port 4000 En Dev sans

    mode debug (pleine vitesse) En QA pour remonter rapidement des hotspots En Prod sur une VM, un container, oneshot mode En mode autonome LyonJUG - 24 Octobre 2018 Stockage local dans H2 DB, à éviter sur de longues périodes
  7. Java Agent, mode autonome Exemple pour Tomcat # # Injection

    de l’Agent Glowroot # export CATALINA_OPTS="-javaagent:/path/to/glowroot.jar $CATALINA_OPTS" Astuce: Pour Tomcat, dans bin/setenv.sh (créer le fichier et le rendre exécutable) LyonJUG - 24 Octobre 2018
  8. Java Agent, mode autonome - port Web Par défaut 4000,

    peut être défini dans admin.json "web": { "port": 4000, "bindAddress": "127.0.0.1", "contextPath": "/", "sessionTimeoutMinutes": 30, "sessionCookieName": "GLOWROOT_SESSION_ID" LyonJUG - 24 Octobre 2018
  9. En mode connecté Connecté à Glowroot Central (HTTP/2 - gRPC)

    Pré-requis un Cassandra >= 2.1 Pour suivre l’activité d’une ferme d’applications Groupement des applications via glowroot.agent.rollup.id Specification de l’instance via glowroot.agent.id LyonJUG - 24 Octobre 2018
  10. Java Agent, mode connecté Exemple pour Tomcat # # Glowroot

    using Central # export CATALINA_OPTS="-javaagent:/path/to/glowroot/glowroot.jar \ -Dglowroot.agent.id=tomcat \ -Dglowroot.agent.rollup.id=app-voxxedlu2018 \ -Dglowroot.collector.address=central:8181 \ $CATALINA_OPTS" LyonJUG - 24 Octobre 2018
  11. Java Agent, connecté & cluster Exemple pour Tomcat # #

    Glowroot using Dual Central # export CATALINA_OPTS="-javaagent:/path/to/glowroot/glowroot.jar \ -Dglowroot.agent.id=tomcat \ -Dglowroot.agent.rollup.id=app-voxxedlu2018 \ -Dglowroot.collector.address=http://central1:8181,http://central2:8181 \ $CATALINA_OPTS" LyonJUG - 24 Octobre 2018
  12. # Glowroot Agent injection pour SonarQube Web dans sonar.properties sonar.web.javaAdditionalOpts=\

    -javaagent:/path/to/glowroot/glowroot.jar \ -Dglowroot.multi.dir=true \ -Dglowroot.agent.id=web \ -Dglowroot.agent.rollup.id=sqdev # Glowroot Agent injection pour SonarQube ComputeEngine dans sonar.properties sonar.ce.javaAdditionalOpts=\ -javaagent:/path/to/glowroot/glowroot.jar \ -Dglowroot.multi.dir=true \ -Dglowroot.agent.id=ce \ -Dglowroot.agent.rollup.id=sqdev Java Agent, connecté, plusieurs jvm locales LyonJUG - 24 Octobre 2018 Depuis la 0.11.x, il faut spécifier -Dglowroot.multi.dir=true
  13. Glowroot, API Agent <dependency> <groupId>org.glowroot</groupId> <artifactId>glowroot-agent-api</artifactId> <version>0.10.11</version> </dependency> void processInvoice(Invoice

    invoice) { Glowroot.setTransactionName("Process Invoice"); ... } @Instrumentation.Timer("process invoice") void processInvoice(Invoice invoice) { ... } @Instrumentation.TraceEntry(message = "process invoice: {{0.invoiceNumber}}", timer = "process invoice") void processInvoice(Invoice invoice) { ... } LyonJUG - 24 Octobre 2018
  14. Glowroot c’est Pour tous Simplissime à déployer Mode Autonome ou

    Connecté Déclenchement sur dépassement de seuils Pas d’impact sur le run (<10us-2ko/req) “Embarquable” dans vos applications (ASL 2.0) LyonJUG - 24 Octobre 2018