66
©2013 CloudBees, Inc. All Rights Reserved Cyrille Le Clerc Open Source Monitoring for Java with Graphite Thursday, October 24, 13

Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

Embed Size (px)

DESCRIPTION

Fast feedback from monitoring is a key of Continuous Delivery. JMX is the right Java API to do so but it unfortunately stayed underused and underappreciated as it was difficult to connect to monitoring and graphing systems. Throw in the sin bin the poor solutions based on log files and weakly secured web interfaces! A new generation of Open Source tooling based on JMX and Graphite makes it easy to graph java application metrics, including business indicators, and integrate them to traditional monitoring systems like Nagios. Following the logic of DevOps, we will look together how best to integrate the monitoring dimension in a project: from design to development, to QA and finally to production on both traditional deployment and in the Cloud. Come and discover how the JmxTrans-Graphite ticket can make your life easier.

Citation preview

Page 1: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Cyrille Le Clerc

Open Source Monitoring for Java with Graphite

Thursday, October 24, 13

Page 2: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

/me

2

Cyrille Le Clerc

@cyrilleleclerc

Open Source

CTO

DevOps, Infra as Code

Solution Architect

Cloud

Thursday, October 24, 13

Page 3: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

You ?

DEV ? QA ? OPS ?Monitoring Experience ?

3

Thursday, October 24, 13

Page 4: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Agenda

4

Thursday, October 24, 13

Page 5: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Agenda

• The demo application

• Monitoring performance: Why? What?

• Java webapp monitoring with JMX

• Monitoring with Graphite

• Conclusion

5

Thursday, October 24, 13

Page 6: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

The Application

6

Thursday, October 24, 13

Page 7: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Your mission, should you decide to accept it, ...

e-commerce SOS Cocktailshttp://www.flickr.com/photos/23791504@N08/2607814349

Setup technical and business monitoring

7

Thursday, October 24, 13

Page 8: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

SOS Cocktail

8

Thursday, October 24, 13

Page 9: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

MonitoringWhy ? What ?

9

Thursday, October 24, 13

Page 10: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

The Indicators to Monitor

10

http://www.langevin.com/blog/2013/08/29/3-ways-to-maximize-brainstorming/

Thursday, October 24, 13

Page 11: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

The Indicators to Monitor

• Operating System ➔ Sysload

• JVM ➔ GC duration

• Tomcat ➔ activeSessions (active visitors)

• Application ➔ sales revenue & items

11

Thursday, October 24, 13

Page 12: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Open Source Monitoring for Java

12

Thursday, October 24, 13

Page 13: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Open Source Monitoring for Javae-commerce web site

Graphite

Seyren

Dashboard - wiki

Nagios

Email

13

Thursday, October 24, 13

Page 14: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

JMX & Metrics

14

Thursday, October 24, 13

Page 15: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Why JMX ?

• JMX vs. web pages vs. logs vs. ...

• Simple and secured

• Displayable with web pages and logs

• Alternatives to JMX ?

15

Thursday, October 24, 13

Page 16: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

JMX vs. logs vs. web pages vs. ...• Monitoring logs

• Parsing GB of text files ?

• Per invocation details vs. average per minute

• Web pages

• History ?

• Clustered applications ?

• Security ?

16

Thursday, October 24, 13

Page 17: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

JMX with Spring Framework<beans  ...>      ...      <context:mbean-­‐export/>      ...</beans> @ManagedResource("cocktail:name=ShoppingCartController,type=...")

class  ShoppingCartController  {          final  AtomicInteger  revenueInCentsCounter  =  new  AtomicInteger();

 void  purchase(...){      ...      revenueInCentsCounter.addAndGet(priceInCents);  }

 @ManagedAttribute  public  int  getRevenueInCentsCounter()  {    return  revenueInCentsCounter.get();  }

17

Thursday, October 24, 13

Page 18: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

JMX with VisualVM

18

Thursday, October 24, 13

Page 19: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

JMX with 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,  ...}

http://demo-cocktail.jmxtrans.cloudbees.net/jmx.jsp

Human readable & script friendlyWatch out for security !

19

Thursday, October 24, 13

Page 20: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

JMX with 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,  ...}

http://demo-cocktail.jmxtrans.cloudbees.net/jmx.jsp

Human readable & script friendlyWatch out for security !

/5ADrUWr5/jmx-sales-metrics.jsp

19

Thursday, October 24, 13

Page 21: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

JMX with JSP

20

Thursday, October 24, 13

Page 22: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Alternatives to JMX

21

Thursday, October 24, 13

Page 23: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Alternatives to 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

21

Thursday, October 24, 13

Page 24: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Alternatives to 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);

 }

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

Metrics

21

Thursday, October 24, 13

Page 25: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

• OS: Sysload

• JVM: Garbage Collector

• Tomcat: activeSessions

• Application: Web Site Revenue

JMX

22

Thursday, October 24, 13

Page 26: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved 23

jmxtrans

Thursday, October 24, 13

Page 27: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

jmxtrans - standaloneecommerceTomcat

Graphite

accountingTomcat

logisticsTomcat

...

24

jmxtrans - standalone

Thursday, October 24, 13

Page 28: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

embedded-jmxtrans

embedded-jmxtrans

25

logistics

Tomcat

Graphite

ecommerce

Tomcat

accounting

Tomcat

...batch

Librato

Thursday, October 24, 13

Page 29: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

jmxtrans-agent

java -javaagent=jmxtrans-agent.jar=...

Graphite

...

batch

ecommerce

TomcatJVM

ecommerce

TomcatJVM

ecommerce

TomcatJVM

logistics

TomcatJVM

ecommerce

TomcatJVM

accounting

TomcatJVM

JVM

JVM

Librato

26

jmxtrans-agent

Thursday, October 24, 13

Page 30: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

standalone vs. embedded vs. agent standalone embedded agent

Packaging

Model Manually connected appsPull

Standalone appsPush

Standalone middlewarePush

Cursor OPS -♦----------- DEV OPS ----------♦-- DEV OPS ---♦--------- DEV

Use caseNet unfriendly monitoring,

OPScloud, batch

DEV/QAcloud, batch

OPS

27

Thursday, October 24, 13

Page 31: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

embedded-jmxtrans configuration

28

Thursday, October 24, 13

Page 32: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

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

28

Thursday, October 24, 13

Page 33: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

embedded-jmxtrans configuration<dependency>    <groupId>org.jmxtrans.embedded</groupId>    <artifactId>embedded-­‐jmxtrans</artifactId>    <version>1.0.8</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>

28

Thursday, October 24, 13

Page 34: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

embedded-jmxtrans configuration<dependency>    <groupId>org.jmxtrans.embedded</groupId>    <artifactId>embedded-­‐jmxtrans</artifactId>    <version>1.0.8</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}"            }        }    ]}

28

Thursday, October 24, 13

Page 35: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved 29

Graphite

Thursday, October 24, 13

Page 36: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphite• Open Source

• Time series database and graphing tool

• Used by tech giants

• Similar

30

Thursday, October 24, 13

Page 37: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphite• Open Source

• Time series database and graphing tool

• Used by tech giants

• Similar

Simplicity and Self Service

30

Thursday, October 24, 13

Page 38: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

• Automatic metrics creation

• Socket protocols: “plain text” & Python Pickle serialization

• Precision and storage duration by configuration

Metrics injection / Write Access

echo  "softshake.happyCounter  1.2  1364338989"  |  nc  localhost  2003

[sales_1min_for_30days_5min_for_1year]pattern  =  ^sales\.retentions  =  60s:30d,300s:365d 1.7MB

31

Thursday, October 24, 13

Page 39: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Metrics rendering / Read Access• Graph Composer & URL API

• Everybody can create graphs

• Wide range of functions

• sum, scale, derivative, timeshift, deviation, filter, ...

• Various exports

• png, svg, csv, json, raw text

32

Thursday, October 24, 13

Page 40: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved 33

The Art of Graphing

Thursday, October 24, 13

Page 41: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Monitoring on the Cloud

• http://hostedgraphite.com/

• Graphite as a Service

• Zero setup

• Addons: Tasseo

• No-OPS

1

2

3

email: [email protected]: SOFTSHAKE

34

Thursday, October 24, 13

Page 42: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Metrics Types

• Examples: activeRequests, dataSource.activeConnection, ...

• Information available without transformation

Ever Increasing Counter

• Examples: requestsCount, revenue, ...

• “per minute” aggregation required

Gauge

35

Thursday, October 24, 13

Page 43: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphs and Maths

Ever Increasing Counter Revenue per Second

?

36

Thursday, October 24, 13

Page 44: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphs and Maths

Ever Increasing Counter Revenue per Second

?derivative()

36

Thursday, October 24, 13

Page 45: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphs and Maths

?

Revenue per HourPer Second → Per Hour

37

Thursday, October 24, 13

Page 46: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphs and Maths

?

Revenue per HourPer Second → Per Hour

summarize(..., “1h”)

37

Thursday, October 24, 13

Page 47: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphs and Maths

2 servers

?

Total Revenue per Hour

38

Thursday, October 24, 13

Page 48: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphs and Maths

2 servers

?

Total Revenue per Hour

sumSeries()

38

Thursday, October 24, 13

Page 49: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphs and Maths

server restart

?

Ignore reset to zero

39

Thursday, October 24, 13

Page 50: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphs and Maths

server restart

?

Ignore reset to zero

nonNegativeDerivative()

39

Thursday, October 24, 13

Page 51: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphs and Maths

?

40

Compare to last week

Thursday, October 24, 13

Page 52: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphs and Maths

?timeShift(..., “7d”)

40

Compare to last week

Thursday, October 24, 13

Page 53: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

• OS: Sysload

• JVM: Garbage Collector

• Tomcat: activeSessions

• Application: Web Site Revenue

JMX

41

Thursday, October 24, 13

Page 54: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphite URL APIhttp://localhost:8081/render/?      from=-­‐7days&      title=Revenue%20per%20Hour&      vtitle=Dollars&      lineWidth=3&      xFormat=%25a%20%25H%25p&      target=        alias(          scale(            summarize(              sumSeries(                nonNegativeDerivative(                  edu.servers.*.sales.revenueInCentsCounter)...)&        ...

42

Thursday, October 24, 13

Page 55: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved 43

Sharing metrics and graphs

Thursday, October 24, 13

Page 56: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Dashboards and Wikisdashboard.prod.md

#  Website  Traffic

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

Wiki

https://github.com/jmxtrans/embedded-jmxtrans-samples/wiki/Dashboard-PROD

44

Thursday, October 24, 13

Page 57: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Dashboards and EmailSend dashboards by email

45

Thursday, October 24, 13

Page 58: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved 46

Alerting with Metrics

Thursday, October 24, 13

Page 59: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphite Integration with Alerting• Based on Graphite URL API

• RawText or JSON format

• Pattern /render?from=-­‐11minutes&until=-­‐1minutes&format=raw&target=****

47

Thursday, October 24, 13

Page 60: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphite Integration with Alerting• Based on Graphite URL API

• RawText or JSON format

• Pattern /render?from=-­‐11minutes&until=-­‐1minutes&format=raw&target=****

$  curl  "http://graphite.example.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.1,4.0,4.0,0.9,0.7,0.8,0.4,0.5,0.5

Example

47

Thursday, October 24, 13

Page 61: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Graphite Alerting with Seyren• Alerting Dashboard for Graphite

• Open Source

• Java .war + MongoDB

• Alerts: email, PagerDuty, ... http://seyren.jmxtrans.cloudbees.net/

48

Thursday, October 24, 13

Page 62: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

• Monitoring Infrastructure

• Open Source

• De facto standard

• check_graphite plugin

• Pierre-Yves Ritschard

• Jason Dixon / obfuscurity

Graphite Alerting with Nagios

49

Thursday, October 24, 13

Page 63: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved 50

Conclusion

Thursday, October 24, 13

Page 64: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Conclusion• Self-service monitoring changes everything

• Technical and business monitoring

• Monitoring integrated in the Continuous Delivery pipeline

• Open Source solutions are available

51

Thursday, October 24, 13

Page 65: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

Hosted Graphite Promo• http://hostedgraphite.com

• 45 days trial with “SOFTSHAKE” promo code

help: [email protected]

(1) Signup(2) Options / Enter Promo Code

(3) Promo Code “SOFTSHAKE”

52

Thursday, October 24, 13

Page 66: Open Source Monitoring for Java with JMX and Graphite - Softshake 2013

©2013 CloudBees, Inc. All Rights Reserved

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

53

Thursday, October 24, 13