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

Monitoring Open Source pour Java avec JmxTrans,...

Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios

Le feedback rapide offert par le monitoring est un élément essentiel des bonnes pratiques de Continuous Delivery. Java dispose dans son écosystème d'un composant robuste dédié à cela : JMX.

Cependant, la difficulté de raccordement de JMX à des outils de supervision et de graphe a longtemps été un frein à son adoption.

Jetez aux orties les solutions bancales à base de logs applicatifs ou d'interface web mal protégées, et venez découvrir une voie ouverte. Une nouvelle génération d'outils Open Source permet de grapher simplement les métriques de vos applications et de les fournir à un système de supervision et d'alerte.

Dans une logique DevOps, nous verrons ensemble comment intégrer la dimension Monitoring dans un projet : de la conception des métriques par les développeurs, à l'intégration des besoins des équipes Ops et Q&A, en déploiement traditionnel ou dans le Cloud. JmxTrans, Graphite et Nagios, ce tryptique peut vous faciliter la vie, venez découvrir comment.

L'application démo : http://demo-cocktail.jmxtrans.cloudbees.net

Le code source de l'application démo : https://github.com/jmxtrans/embedded-jmxtrans-samples/tree/master/embedded-jmxtrans-webapp-coktail

Embedded JmxTrans : https://github.com/jmxtrans/embedded-jmxtrans

Cyrille Le Clerc

April 02, 2013
Tweet

More Decks by Cyrille Le Clerc

Other Decks in Technology

Transcript

  1. 27 au 29 mars 2013 Monitoring Open Source pour Java

    avec JmxTrans, Graphite et Nagios Wednesday, March 27, 13
  2. Speaker Cyrille Le Clerc @cyrilleleclerc Open Source CTO Fort Traffic

    Cloud, DevOps Architect Wednesday, March 27, 13
  3. Agenda • L’application • Le monitoring à réaliser • Instrumenter

    une webapp Java avec JMX • Monitorer • Grapher avec Graphite • Alerter avec Seyren (et Nagios) • Monitoring & Continuous Delivery • Déploiement de Graphite • Conclusion Wednesday, March 27, 13
  4. Votre mission, si toutefois vous l’acceptez ... Mettre en place

    le monitoring technique et métier e-commerce SOS Cocktails http://www.flickr.com/photos/23791504@N08/2607814349 Wednesday, March 27, 13
  5. 27 au 29 mars 2013 Les indicateurs à monitorer Pourquoi

    Monitorer ? Quoi ? Wednesday, March 27, 13
  6. Les Indicateurs à monitorer • Operating System -> Sysload •

    JVM -> GC duration • Tomcat -> activeSessions (active visitors) • Application -> sales revenue & items Wednesday, March 27, 13
  7. Open Source Monitoring for Java eCommerce Web Site Graphite Seyren

    Dashboard - wiki Nagios Email (1) (2) (3) (4) (5) Wednesday, March 27, 13
  8. Pourquoi JMX ? • JMX vs. pages web vs. logs

    vs. ... • Simple et sécurisé • Exposable vers pages web et les logs • Des alternatives à JMX Wednesday, March 27, 13
  9. JMX vs. logs vs. pages web vs. ... • Logs

    de monitoring • Parser des Go de fichiers texte ? • Détail par invocation vs. moyenne par minute • Pages web • Historisation ? • Applications en clusters ? • Sécurité ? Wednesday, March 27, 13
  10. JMX avec Spring <beans  ...>      ...    

     <context:mbean-­‐export/>      ... </beans> @ManagedResource("cocktail:name=ShoppingCartController,type=...") class  ShoppingCartController  {          final  AtomicInteger  revenueInCentsCounter  =  new  AtomicInteger();  @ManagedAttribute  public  int  getRevenueInCentsCounter()  {    return  revenueInCentsCounter.get();  }          void  purchase(...){      ...      revenueInCentsCounter.addAndGet(priceInCents);  } Wednesday, March 27, 13
  11. JMX & JSP $  curl  http://demo-­‐cocktail.jmxtrans.cloudbees.net/5ADrUWr5/jmx-­‐sales-­‐metrics.txt.jsp Epoch   SalesRevenueInCentsCounter  

    SalesItemsCounter   SalesOrdersCounter 1363217376   4500   7   2 curl  http://demo-­‐cocktail.jmxtrans.cloudbees.net/5ADrUWr5/... {    "Epoch":1363217653,    "SalesRevenueInCentsCounter":4050,    "SalesItemsCounter":7,    "SalesOrdersCounter":2 } http://demo-cocktail.jmxtrans.cloudbees.net/jmx.jsp Powered by JMX! Human readable et script friendly Attention sécurité ! Wednesday, March 27, 13
  12. JMX & JSP $  curl  http://demo-­‐cocktail.jmxtrans.cloudbees.net/5ADrUWr5/jmx-­‐sales-­‐metrics.txt.jsp Epoch   SalesRevenueInCentsCounter  

    SalesItemsCounter   SalesOrdersCounter 1363217376   4500   7   2 curl  http://demo-­‐cocktail.jmxtrans.cloudbees.net/5ADrUWr5/... {    "Epoch":1363217653,    "SalesRevenueInCentsCounter":4050,    "SalesItemsCounter":7,    "SalesOrdersCounter":2 } http://demo-cocktail.jmxtrans.cloudbees.net/jmx.jsp Powered by JMX! Human readable et script friendly Attention sécurité ! /5ADrUWr5/jmx-sales-metrics.jsp Wednesday, March 27, 13
  13. Alternatives à JMX class  ShoppingCartController  {  @Monitor(name="revenueInCents",  type=COUNTER)  final  AtomicInteger

     revenueInCentsCounter  =  new  AtomicInteger();          void  purchase(...){      ...      revenueInCentsCounter.addAndGet(priceInCents);  } Servo Wednesday, March 27, 13
  14. Alternatives à JMX class  ShoppingCartController  {  @Monitor(name="revenueInCents",  type=COUNTER)  final  AtomicInteger

     revenueInCentsCounter  =  new  AtomicInteger();          void  purchase(...){      ...      revenueInCentsCounter.addAndGet(priceInCents);  } Servo class  ShoppingCartController  {          final  Counter  revenueInCentsCounter  =  Metrics.newCounter(                            ShoppingCartController,  "revenue-­‐in-­‐cents");          void  purchase(...){      ...      revenueInCentsCounter.inc(priceInCents);  } Metrics Wednesday, March 27, 13
  15. jmxtrans - standalone jmxtrans - standalone ecommerce Tomcat Graphite accounting

    Tomcat logistics Tomcat ... Wednesday, March 27, 13
  16. standalone vs. embedded standalone embedded Packaging Modèle daemon externe, raccordement

    manuel des applications & des indicateurs agent embarqué, applications & indicateurs auto-raccordés / autonomes Curseur OPS -‖----------- DEV OPS ----------‖-- DEV Use case applis “peu modifiables”, middlewares, curseur OPS cloud, batch, curseur DEV/QA Wednesday, March 27, 13
  17. embedded-jmxtrans configuration <dependency>    <groupId>org.jmxtrans.embedded</groupId>    <artifactId>embedded-­‐jmxtrans</artifactId>    <version>1.0.5</version> </dependency>

    <beans  ...    xmlns:jmxtrans="http://www.jmxtrans.org/schema/embedded"    xsi:schemaLocation="...        http://www.jmxtrans.org/schema/embedded  ...”>    <jmxtrans:jmxtrans>        <jmxtrans:configuration>classpath:jmxtrans.json</jmxtrans:configuration>        ...    </jmxtrans:jmxtrans> </beans> Wednesday, March 27, 13
  18. embedded-jmxtrans configuration <dependency>    <groupId>org.jmxtrans.embedded</groupId>    <artifactId>embedded-­‐jmxtrans</artifactId>    <version>1.0.5</version> </dependency>

    <beans  ...    xmlns:jmxtrans="http://www.jmxtrans.org/schema/embedded"    xsi:schemaLocation="...        http://www.jmxtrans.org/schema/embedded  ...”>    <jmxtrans:jmxtrans>        <jmxtrans:configuration>classpath:jmxtrans.json</jmxtrans:configuration>        ...    </jmxtrans:jmxtrans> </beans> {    "queries":  [            {            "objectName":  "cocktail:name=ShoppingCartController",            "resultAlias":  "sales",            "attributes":  ["SalesRevenueInCentsCounter"]        },    ],    "outputWriters":  [        {            "@class":  "org.jmxtrans.embedded.output.GraphiteWriter",            "settings":  {                "host":  "${graphite.host:localhost}",                "port":  "${graphite.port:2003},"                "enabled":  "${graphite.enabled:true}"            }        }    ] } Wednesday, March 27, 13
  19. Graphite • BD de Time Series et solution de Graphe

    • Utilisé par des grands du Web • Similaires Simplicité et Self Service Wednesday, March 27, 13
  20. Ecriture / Alimentation • Création automatique des métriques • Protocoles

    socket “plain text” & sérialisation Python Pickle • Précision et durée de stockage par configuration echo  "devoxx.happyCounter  1.2  1364338989"  |  nc  localhost  2003 [sales_1min_for_15days_5min_for_1year] pattern  =  ^sales\. retentions  =  60s:30d,300s:365d 1.7MB Wednesday, March 27, 13
  21. Lecture / Consommation • Composer de graphe & URL API

    • Tout le monde peut créer ses graphes • Fonctions Riches • sum, scale, derivative, timeshift, deviation, filter, ... • Exports variés : png, svg, csv, json, raw text Wednesday, March 27, 13
  22. Demo Graphite sur le Cloud • http://hostedgraphite.com/ • Graphite as

    a Service • Pas de ‘tracas’ d’installation • addons: Tasseo • No-OPS 1 2 3 email: [email protected] password: devoxx2013 Wednesday, March 27, 13
  23. Les métriques • Exemples: activeRequests, dataSource.activeConnection, ... • Information exploitable

    immédiatement Gauge Ever Increasing Counter • Exemples: requestsCount, revenue, ... • Conversion nécessaire en “par minute” Wednesday, March 27, 13
  24. Des graphes et des formules ? Ever Increasing Counter Revenue

    per Second derivative() Wednesday, March 27, 13
  25. Des graphes et des formules ? Revenue per Hour Per

    Second -> Per Hour Wednesday, March 27, 13
  26. Des graphes et des formules ? Revenue per Hour summarize()

    Per Second -> Per Hour Wednesday, March 27, 13
  27. Des graphes et des formules 2 servers ? Total Revenue

    per Hour sumSeries() Wednesday, March 27, 13
  28. Des graphes et des formules server restart ? Ignore reset

    to zero nonNegativeDerivative() Wednesday, March 27, 13
  29. Des graphes et des formules Compare to last week ?

    timeShift() Wednesday, March 27, 13
  30. Des graphes et des formules •OS: Sysload •JVM: Garbage Collector

    •Tomcat: activeSessions •Application: Web Site Revenue Wednesday, March 27, 13
  31. Dashoards Wiki dashboard.prod.md #  Sales <table> <tr>    <td>  

         <img  src="http://graphite.prod.mycompany/graphite/render/? width=400&height=300&title=Revenue&xFormat=%25a%20%25d %25p&vtitle=USD&lineWidth=3&from=-­‐5days&target=alias(scale(summarize(sumS eries(nonNegativeDerivative(edu.servers.*.sales.revenueInCentsCounter)) %2C%221h%22)%2C0.01)%2C%22Revenue%20per%20Hour%22)...">        </td>        <td>                <img  src="http://graphite.prod.mycompany/graphite/render/?...">        </td> <tr> </table> https://github.com/jmxtrans/embedded-jmxtrans-samples/wiki/Dashboard-PROD Wiki Wednesday, March 27, 13
  32. 27 au 29 mars 2013 L’alerting Intégrer Graphite à de

    l’alerting URL Api Seyren Nagios Wednesday, March 27, 13
  33. Intégrer Graphite à l’alerting • Utiliser l’URL API • Format

    rawText ou JSON • Pattern /render?from=-­‐11minutes&until=-­‐1minutes&format=raw&target=**** $  curl  "http://graphite.exemple.com/render?from=-­‐11minutes&until=-­‐1minutes&format=raw&      target=keepLastValue(servers.cloudbees.jvm.os.SystemLoadAverage)"   my-­‐metric,1363225680,1363226340,60|0.03,0.01,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 Exemple Wednesday, March 27, 13
  34. Alerting - Seyren • Alerting Dashboard for Graphite • Open

    Source • Java .war + MongoDB • Alertes email, PagerDuty, ... Wednesday, March 27, 13
  35. Alerting - Seyren •OS: Sysload •JVM: Garbage Collector •Tomcat: activeSessions

    •Application: Web Site Revenue http://seyren.jmxtrans.cloudbees.net/ Wednesday, March 27, 13
  36. Nagios • Infrastructure Monitoring • Open Source • Standard de

    facto en entreprise • check_graphite plugin • Pierre-Yves Ritschard • Jason Dixon / obfuscurity Wednesday, March 27, 13
  37. Monitoring & Continuous Delivery • Livrer le monitoring avec l’application

    • Les indicateurs • Les dashboards • Builder en continue les configs par environnement • Require: topologie des environnements intégrées au build • Déploiement sur un repo (Maven, ...) • Déployer en automatique le monitoring Wednesday, March 27, 13
  38. Monitoring & Continuous Delivery src/main/graphite/dashboard.template.md Cocktail  App  Dashboards  -­‐  ${environment}

     -­‐  ${version} #  Sales <table> <tr>    <td>        <img  src="${graphite.baseUrl}/render/? width=400&height=300&title=Revenue&xFormat=%25a%20%25d %25p&vtitle=USD&lineWidth=3&from=-­‐5days&target=alias(scale(summarize(sumS eries(nonNegativeDerivative(edu.servers.*.sales.revenueInCentsCounter)) %2C%221h%22)%2C0.01)%2C%22Revenue%20per%20Hour%22)...">        </td>        <td>                <img  src="${graphite.baseUrl}/render/?...">        </td> <tr> </table> StringTemplate ${variable} Dashboard template Wednesday, March 27, 13
  39. Monitoring & Continuous Delivery dashboard.template.md dashboard-generator.groovy PROD-env-topology.json pom.xml <gmaven-plugin> dashboard.PROD.md

    QA-env-topology.json ... dashboard.QA.md ... https://github.com/jmxtrans/embedded-jmxtrans-samples/wiki/Monitoring-Continuous-Deployment repository Monitoring dashboards Continuous Integration Wednesday, March 27, 13
  40. Promo Code • http://hostedgraphite.com/ • 60 days trial with “DEVOXX”

    promo code (1) Signup (2) Enter Promo Code “DEVOXX” help: [email protected] (3) Promo Code “DEVOXX” Wednesday, March 27, 13
  41. Conclusion • Monitoring technique et métier • Monitoring intégrée au

    Continuous Delivery de l’appli • L’approche self-service transforme le monitoring • Solutions Open Source disponibles Monitoring no longer sucks in Java! http://lusislog.blogspot.fr/2011/06/why-monitoring-sucks.html Wednesday, March 27, 13