Slide 1

Slide 1 text

Cyrille Le Clerc Open Source Monitoring for Java with Graphite Wednesday, May 15, 13

Slide 2

Slide 2 text

Speaker Cyrille Le Clerc @cyrilleleclerc Open Source CTO DevOps, Infra as Code Solution Architect Cloud Wednesday, May 15, 13

Slide 3

Slide 3 text

You ? DEV ? QA ? OPS ? Monitoring Experience ? Wednesday, May 15, 13

Slide 4

Slide 4 text

Agenda Wednesday, May 15, 13

Slide 5

Slide 5 text

Agenda • The demo application • Monitoring performance: Why ? What ? • Java webapp monitoring with JMX • Monitoring with Graphite • Conclusion Wednesday, May 15, 13

Slide 6

Slide 6 text

The Application Wednesday, May 15, 13

Slide 7

Slide 7 text

Your mission, should you decide to accept it, ... Setup technical and business monitoring e-commerce SOS Cocktails http://www.flickr.com/photos/23791504@N08/2607814349 Wednesday, May 15, 13

Slide 8

Slide 8 text

SOS Cocktail Wednesday, May 15, 13

Slide 9

Slide 9 text

Monitoring application performance Why ? What ? Wednesday, May 15, 13

Slide 10

Slide 10 text

The Indicators to Monitor Wednesday, May 15, 13

Slide 11

Slide 11 text

The Indicators to Monitor • Operating System ➔ Sysload • JVM ➔ GC duration • Tomcat ➔ activeSessions (active visitors) • Application ➔ sales revenue & items Wednesday, May 15, 13

Slide 12

Slide 12 text

Open Source Monitoring for Java Wednesday, May 15, 13

Slide 13

Slide 13 text

Open Source Monitoring for Java e-commerce web site Graphite Seyren Dashboard - wiki Nagios Email Wednesday, May 15, 13

Slide 14

Slide 14 text

JMX & Metrics Wednesday, May 15, 13

Slide 15

Slide 15 text

Why JMX ? • JMX vs. web pages vs. logs vs. ... • Simple and secured • Displayable with web pages and logs • Alternatives to JMX ? Wednesday, May 15, 13

Slide 16

Slide 16 text

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 ? Wednesday, May 15, 13

Slide 17

Slide 17 text

JMX with Spring Framework      ...            ... @ManagedResource("cocktail:name=ShoppingCartController,type=...") class  ShoppingCartController  {          final  AtomicInteger  revenueInCentsCounter  =  new  AtomicInteger();  void  purchase(...){      ...      revenueInCentsCounter.addAndGet(priceInCents);  }  @ManagedAttribute  public  int  getRevenueInCentsCounter()  {    return  revenueInCentsCounter.get();  }         Wednesday, May 15, 13

Slide 18

Slide 18 text

JMX with VisualVM Wednesday, May 15, 13

Slide 19

Slide 19 text

JMX with 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,  ... } http://demo-cocktail.jmxtrans.cloudbees.net/jmx.jsp Human readable & script friendly Watch out for security ! Wednesday, May 15, 13

Slide 20

Slide 20 text

JMX with 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,  ... } http://demo-cocktail.jmxtrans.cloudbees.net/jmx.jsp Human readable & script friendly Watch out for security ! /5ADrUWr5/jmx-sales-metrics.jsp Wednesday, May 15, 13

Slide 21

Slide 21 text

JMX with JSP Wednesday, May 15, 13

Slide 22

Slide 22 text

Alternatives to JMX Wednesday, May 15, 13

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

Alternatives to 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, May 15, 13

Slide 25

Slide 25 text

JMX • OS: Sysload • JVM: Garbage Collector • Tomcat: activeSessions • Application: Web Site Revenue Wednesday, May 15, 13

Slide 26

Slide 26 text

jmxtrans Wednesday, May 15, 13

Slide 27

Slide 27 text

jmxtrans - standalone ecommerce Tomcat Graphite accounting Tomcat logistics Tomcat ... jmxtrans - standalone Wednesday, May 15, 13

Slide 28

Slide 28 text

embedded-jmxtrans logistics Tomcat Graphite ecommerce Tomcat accounting Tomcat Librato ... batch embedded-jmxtrans Wednesday, May 15, 13

Slide 29

Slide 29 text

jmxtrans-agent jmxtrans-agent java -javaagent=jmxtrans-agent.jar=... Graphite ... batch ecommerce Tomcat JVM ecommerce Tomcat JVM ecommerce Tomcat JVM logistics Tomcat JVM ecommerce Tomcat JVM accounting Tomcat JVM JVM JVM Librato Wednesday, May 15, 13

Slide 30

Slide 30 text

standalone vs. embedded vs. agent standalone embedded agent Packaging Model Manually connected apps Pull Standalone apps Push Standalone middleware Push Cursor OPS -‖----------- DEV OPS ----------‖-- DEV OPS ---‖--------- DEV Use case Net unfriendly monitoring, OPS cloud, batch DEV/QA cloud, batch OPS Wednesday, May 15, 13

Slide 31

Slide 31 text

embedded-jmxtrans configuration Wednesday, May 15, 13

Slide 32

Slide 32 text

embedded-jmxtrans configuration    org.jmxtrans.embedded    embedded-­‐jmxtrans    1.0.7 Wednesday, May 15, 13

Slide 33

Slide 33 text

embedded-jmxtrans configuration    org.jmxtrans.embedded    embedded-­‐jmxtrans    1.0.7

Slide 34

Slide 34 text

embedded-jmxtrans configuration    org.jmxtrans.embedded    embedded-­‐jmxtrans    1.0.7

Slide 35

Slide 35 text

Graphite Wednesday, May 15, 13

Slide 36

Slide 36 text

Graphite • Open Source • Time Series DataBase and graphing tool • Used by tech giants • Similar Wednesday, May 15, 13

Slide 37

Slide 37 text

Graphite • Open Source • Time Series DataBase and graphing tool • Used by tech giants • Similar Simplicity and Self Service Wednesday, May 15, 13

Slide 38

Slide 38 text

Metrics injection / Write Access • Automatic metrics creation • Socket protocols: “plain text” & Python Pickle serialization • Precision and storage duration by configuration echo  "geecon.happyCounter  1.2  1364338989"  |  nc  localhost  2003 [sales_1min_for_15days_5min_for_1year] pattern  =  ^sales\. retentions  =  60s:30d,300s:365d 1.7MB Wednesday, May 15, 13

Slide 39

Slide 39 text

• 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 Metrics rendering / Read Access Wednesday, May 15, 13

Slide 40

Slide 40 text

The Art of Graphing Wednesday, May 15, 13

Slide 41

Slide 41 text

Monitoring on the Cloud • http://hostedgraphite.com/ • Graphite as a Service • Zero setup • Addons: Tasseo • No-OPS 1 2 3 email: [email protected] password: GEECON Wednesday, May 15, 13

Slide 42

Slide 42 text

Metrics Types • Examples: activeRequests, dataSource.activeConnection, ... • Information available without transformation Gauge Ever Increasing Counter • Examples: requestsCount, revenue, ... • “per minute” aggregation required Wednesday, May 15, 13

Slide 43

Slide 43 text

Graphs and Maths Ever Increasing Counter Revenue per Second ? Wednesday, May 15, 13

Slide 44

Slide 44 text

Graphs and Maths Ever Increasing Counter Revenue per Second ? derivative() Wednesday, May 15, 13

Slide 45

Slide 45 text

Graphs and Maths ? Revenue per Hour Per Second → Per Hour Wednesday, May 15, 13

Slide 46

Slide 46 text

Graphs and Maths ? Revenue per Hour Per Second → Per Hour summarize(..., “1h”) Wednesday, May 15, 13

Slide 47

Slide 47 text

Graphs and Maths 2 servers ? Total Revenue per Hour Wednesday, May 15, 13

Slide 48

Slide 48 text

Graphs and Maths 2 servers ? Total Revenue per Hour sumSeries() Wednesday, May 15, 13

Slide 49

Slide 49 text

Graphs and Maths server restart ? Ignore reset to zero Wednesday, May 15, 13

Slide 50

Slide 50 text

Graphs and Maths server restart ? Ignore reset to zero nonNegativeDerivative() Wednesday, May 15, 13

Slide 51

Slide 51 text

Graphs and Maths Compare to last week ? Wednesday, May 15, 13

Slide 52

Slide 52 text

Graphs and Maths Compare to last week ? timeShift(..., “7d”) Wednesday, May 15, 13

Slide 53

Slide 53 text

JMX • OS: Sysload • JVM: Garbage Collector • Tomcat: activeSessions • Application: Web Site Revenue Wednesday, May 15, 13

Slide 54

Slide 54 text

Graphite URL API http://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)...)&        ... Wednesday, May 15, 13

Slide 55

Slide 55 text

Sharing metrics and graphs Wednesday, May 15, 13

Slide 56

Slide 56 text

Dashboards and Wikis dashboard.prod.md #  Website  Traffic                                                     Wiki https://github.com/jmxtrans/embedded-jmxtrans-samples/wiki/Dashboard-PROD Wednesday, May 15, 13

Slide 57

Slide 57 text

Dashboards and Email Send dashboards by email Wednesday, May 15, 13

Slide 58

Slide 58 text

Alerting with Metrics Wednesday, May 15, 13

Slide 59

Slide 59 text

Graphite Integration with Alerting • Based on Graphite URL API • RawText or JSON format • Pattern /render?from=-­‐11minutes&until=-­‐1minutes&format=raw&target=**** Wednesday, May 15, 13

Slide 60

Slide 60 text

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 Wednesday, May 15, 13

Slide 61

Slide 61 text

Graphite Alerting with Seyren • Alerting Dashboard for Graphite • Open Source • Java .war + MongoDB • Alerts: email, PagerDuty, ... http://seyren.jmxtrans.cloudbees.net/ Wednesday, May 15, 13

Slide 62

Slide 62 text

• Monitoring Infrastructure • Open Source • De facto standard • check_graphite plugin • Pierre-Yves Ritschard • Jason Dixon / obfuscurity Graphite Alerting with Nagios Wednesday, May 15, 13

Slide 63

Slide 63 text

Conclusion Wednesday, May 15, 13

Slide 64

Slide 64 text

Conclusion • Self-service monitoring changes everything • Technical and business monitoring • Monitoring integrated in the Continuous Delivery pipeline • Open Source solutions are available Wednesday, May 15, 13

Slide 65

Slide 65 text

Hosted Graphite Promo • http://hostedgraphite.com • 60 days trial with “GEECON” promo code help: [email protected] (1) Signup (2) Options / Enter Promo Code (3) Promo Code “GEECON” Wednesday, May 15, 13

Slide 66

Slide 66 text

http://demo-cocktail.jmxtrans.cloudbees.net/ http://jmxtrans.org/ Wednesday, May 15, 13