Transcript
Page 1: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

27 au 29 mars 2013

Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios

Wednesday, March 27, 13

Page 2: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Speaker

Cyrille Le Clerc

@cyrilleleclerc

Open Source

CTO

Fort Traffic

Cloud, DevOps

Architect

Wednesday, March 27, 13

Page 3: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Speaker

Henri Gomez

@hgomez

Open Source

Intégration Continue

DevOps

Architecte CI

Wednesday, March 27, 13

Page 4: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Vous ?

Dev ? Qa ? Ops ?Expérience monitoring ?

Wednesday, March 27, 13

Page 5: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

27 au 29 mars 2013

Agenda

Wednesday, March 27, 13

Page 6: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 7: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 8: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

SOS CocktailDémo

Wednesday, March 27, 13

Page 9: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

27 au 29 mars 2013

Les indicateurs à monitorer

Pourquoi Monitorer ?Quoi ?

Wednesday, March 27, 13

Page 10: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Les indicateurs à monitorer

Wednesday, March 27, 13

Page 11: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Les Indicateurs à monitorer

• Operating System -> Sysload

• JVM -> GC duration

• Tomcat -> activeSessions (active visitors)

• Application -> sales revenue & items

Wednesday, March 27, 13

Page 12: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Open Source Monitoring for Java

eCommerce Web Site Graphite

Seyren

Dashboard - wiki

Nagios

Email

(1)(2) (3)

(4)

(5)

Wednesday, March 27, 13

Page 13: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

27 au 29 mars 2013

JMX & Métriques

Wednesday, March 27, 13

Page 14: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 15: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 16: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 17: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

JMX

Wednesday, March 27, 13

Page 18: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

JMX & JSP

$  curl  http://demo-­‐cocktail.jmxtrans.cloudbees.net/5ADrUWr5/jmx-­‐sales-­‐metrics.txt.jspEpoch   SalesRevenueInCentsCounter   SalesItemsCounter   SalesOrdersCounter1363217376   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 friendlyAttention sécurité !

Wednesday, March 27, 13

Page 19: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

JMX & JSP

$  curl  http://demo-­‐cocktail.jmxtrans.cloudbees.net/5ADrUWr5/jmx-­‐sales-­‐metrics.txt.jspEpoch   SalesRevenueInCentsCounter   SalesItemsCounter   SalesOrdersCounter1363217376   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 friendlyAttention sécurité !

/5ADrUWr5/jmx-sales-metrics.jsp

Wednesday, March 27, 13

Page 20: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

JMX & JSPPowered by JMX!

Wednesday, March 27, 13

Page 21: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Alternatives à JMX

Wednesday, March 27, 13

Page 22: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Alternatives à JMX

class  Shopping

CartController

 {

 @Monitor(name

="revenueInCen

ts",  type=COUN

TER)

 final  AtomicI

nteger  revenue

InCentsCounter

 =  new  AtomicI

nteger();

         void  p

urchase(...){

     ...

     revenueInCe

ntsCounter.add

AndGet(priceIn

Cents);

 }

Servo

Wednesday, March 27, 13

Page 23: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Alternatives à JMX

class  Shopping

CartController

 {

 @Monitor(name

="revenueInCen

ts",  type=COUN

TER)

 final  AtomicI

nteger  revenue

InCentsCounter

 =  new  AtomicI

nteger();

         void  p

urchase(...){

     ...

     revenueInCe

ntsCounter.add

AndGet(priceIn

Cents);

 }

Servo

class  ShoppingCartController  {          final  Counter  revenueInCentsCounter  =  Metrics.newCounter(                            ShoppingCartController,  "revenue-­‐in-­‐cents");          void  purchase(...){      ...      revenueInCentsCounter.inc(priceInCents);  }

Metrics

Wednesday, March 27, 13

Page 24: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

JMX

•OS: Sysload•JVM: Garbage Collector•Tomcat: activeSessions •Application: Web Site Revenue

Wednesday, March 27, 13

Page 25: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

27 au 29 mars 2013

jmxtrans & embedded-jmxtrans

Wednesday, March 27, 13

Page 26: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

jmxtrans - standalone

jmxtrans - standalone

ecommerceTomcat

Graphite

accountingTomcat

logisticsTomcat

...

Wednesday, March 27, 13

Page 27: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

embedded-jmxtrans

embedded-jmxtrans

logistics

Tomcat

Graphite

ecommerce

Tomcat

accounting

Tomcat

Librato

...

batch

Wednesday, March 27, 13

Page 28: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

standalone vs. embedded

standalone embedded

Packaging

Modèledaemon 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

Page 29: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

jmxtrans & embedded-jmxtrans

SOS Cocktail Graphite

embedded

Wednesday, March 27, 13

Page 30: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

embedded-jmxtrans configuration

Wednesday, March 27, 13

Page 31: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

embedded-jmxtrans configuration

<dependency>    <groupId>org.jmxtrans.embedded</groupId>    <artifactId>embedded-­‐jmxtrans</artifactId>    <version>1.0.5</version></dependency>

Wednesday, March 27, 13

Page 32: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 33: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 34: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

jmxtrans

•OS: Sysload•JVM: Garbage Collector•Tomcat: activeSessions •Application: Web Site Revenue

Wednesday, March 27, 13

Page 35: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

27 au 29 mars 2013

Graphite

Wednesday, March 27, 13

Page 36: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Graphite

• BD de Time Series et solution de Graphe

• Utilisé par des grands du Web

• Similaires

Simplicité et Self Service

Wednesday, March 27, 13

Page 37: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 38: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 39: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

27 au 29 mars 2013

Graphes et monitoring

Wednesday, March 27, 13

Page 40: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 41: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 42: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Des graphes et des formules

?

Ever Increasing Counter Revenue per Second

Wednesday, March 27, 13

Page 43: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Des graphes et des formules

?

Ever Increasing Counter Revenue per Second

derivative()

Wednesday, March 27, 13

Page 44: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Des graphes et des formules

?

Revenue per HourPer Second -> Per Hour

Wednesday, March 27, 13

Page 45: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Des graphes et des formules

?

Revenue per Hour

summarize()

Per Second -> Per Hour

Wednesday, March 27, 13

Page 46: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Des graphes et des formules

2 servers

?

Total Revenue per Hour

Wednesday, March 27, 13

Page 47: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Des graphes et des formules

2 servers

?

Total Revenue per Hour

sumSeries()

Wednesday, March 27, 13

Page 48: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Des graphes et des formules

server restart

?

Ignore reset to zero

Wednesday, March 27, 13

Page 49: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Des graphes et des formules

server restart

?

Ignore reset to zero

nonNegativeDerivative()

Wednesday, March 27, 13

Page 50: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Des graphes et des formules

Compare to last week

?

Wednesday, March 27, 13

Page 51: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Des graphes et des formules

Compare to last week

?timeShift()

Wednesday, March 27, 13

Page 52: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Des graphes et des formules

•OS: Sysload•JVM: Garbage Collector•Tomcat: activeSessions •Application: Web Site Revenue

Wednesday, March 27, 13

Page 53: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Dashoards Wikidashboard.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(sumSeries(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

Page 54: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Dashoards by Email

Envoyer les graphes par email

Wednesday, March 27, 13

Page 55: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

27 au 29 mars 2013

L’alerting

Intégrer Graphite à de l’alertingURL ApiSeyrenNagios

Wednesday, March 27, 13

Page 56: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 57: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Alerting - Seyren

• Alerting Dashboard for Graphite

• Open Source

• Java .war + MongoDB

• Alertes email, PagerDuty, ...

Wednesday, March 27, 13

Page 58: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Alerting - Seyren

•OS: Sysload•JVM: Garbage Collector•Tomcat: activeSessions •Application: Web Site Revenue

http://seyren.jmxtrans.cloudbees.net/

Wednesday, March 27, 13

Page 59: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Nagios

• Infrastructure Monitoring

• Open Source

• Standard de facto en entreprise

• check_graphite plugin

• Pierre-Yves Ritschard

• Jason Dixon / obfuscurity

Wednesday, March 27, 13

Page 60: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

27 au 29 mars 2013

Monitoring & Continuous Delivery

Wednesday, March 27, 13

Page 61: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 62: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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(sumSeries(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

Page 63: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 64: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

27 au 29 mars 2013

Déploiement de Graphite

Wednesday, March 27, 13

Page 65: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

Déploiement de Graphite

Wednesday, March 27, 13

Page 66: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

27 au 29 mars 2013

Cadeau bonus !

Wednesday, March 27, 13

Page 67: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 68: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

27 au 29 mars 2013

Conclusion

Wednesday, March 27, 13

Page 69: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

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

Page 70: Monitoring Open Source pour Java avec JmxTrans, Graphite et Nagios - DevoxxFR 2013

http://demo-cocktail.jmxtrans.cloudbees.net/ http://jmxtrans.org/

Wednesday, March 27, 13


Top Related