Slide 1

Slide 1 text

NewRelic for Java @rantav Totango Saturday, 29 September 12

Slide 2

Slide 2 text

Server Monitoring Saturday, 29 September 12

Slide 3

Slide 3 text

Application Monitoring Saturday, 29 September 12

Slide 4

Slide 4 text

Webapps Monitoring This is automatic!!! fun fun fun... Saturday, 29 September 12

Slide 5

Slide 5 text

Webapps Monitoring This is automatic!!! fun fun fun... Saturday, 29 September 12

Slide 6

Slide 6 text

Real User Monitoring var NREUMQ=NREUMQ|| [];NREUMQ.push(["mark","firstbyte",new Date().getTime()]) Saturday, 29 September 12

Slide 7

Slide 7 text

Real User Monitoring var NREUMQ=NREUMQ|| [];NREUMQ.push(["mark","firstbyte",new Date().getTime()]) Saturday, 29 September 12

Slide 8

Slide 8 text

The Java API Maven: morphia morphia http://morphia.googlecode.com/svn/mavenrepo/ newrelic.java-agent newrelic-api 2.7.0 Saturday, 29 September 12

Slide 9

Slide 9 text

The Java API Report background as web request: NewRelic.setRequestAndResponse(Request request, Response response) NewRelic.setTransactionName(String category, String transactionName) Custom params: NewRelic.addCustomParameter(String key, String value) NewRelic.addCustomParameter(String key, Number value) Error reporting: NewRelic.noticeError(Throwable throwable) NewRelic.noticeError(Throwable throwable, Map params) NewRelic.noticeError(String message, Map params) Metrics: NewRelic.recordMetric(String name, float value) NewRelic.recordResponseTimeMetric(Stri ng name, long millis) NewRelic.incrementCounter(String name) Real user monitoring: NewRelic.getBrowserTimingHeader() NewRelic.getBrowserTimingFooter() NewRelic.setUserName(String name) NewRelic.setAccountName(String name) NewRelic.setProductName(String name) Ignoring: NewRelic.ignoreTransaction() NewRelic.ignoreApdex() Saturday, 29 September 12

Slide 10

Slide 10 text

Background Processing @Trace(dispatcher=true) NewRelic.setRequestAndResponse() NewRelic.recordMetric() https://newrelic.com/docs/java/java-agent-api Saturday, 29 September 12

Slide 11

Slide 11 text

Background Processing Example 1 @Trace(dispatcher=true) private DateTimeZone getServiceTimezone(String serviceId) { } Saturday, 29 September 12

Slide 12

Slide 12 text

Background Processing Example 1 @Trace(dispatcher=true) private DateTimeZone getServiceTimezone(String serviceId) { } Saturday, 29 September 12

Slide 13

Slide 13 text

Background Processing Example 2 @Trace(dispatcher=true) private void insertSdr(...) { final NewrelicResponseImpl response = new NewrelicResponseImpl(); NewRelic.setRequestAndResponse(new NewrelicRequestImpl("/ rtprocessor/insert-sdr", map("serviceId", sdr.getServiceId())), response); try { ! batchInsertSdr(sdr, serviceTimeZone); } catch (final RuntimeException e) { response.setError(e); ! ! throw e; } } Saturday, 29 September 12

Slide 14

Slide 14 text

Background Processing Example 2 @Trace(dispatcher=true) private void insertSdr(...) { final NewrelicResponseImpl response = new NewrelicResponseImpl(); NewRelic.setRequestAndResponse(new NewrelicRequestImpl("/ rtprocessor/insert-sdr", map("serviceId", sdr.getServiceId())), response); try { ! batchInsertSdr(sdr, serviceTimeZone); } catch (final RuntimeException e) { response.setError(e); ! ! throw e; } } Saturday, 29 September 12

Slide 15

Slide 15 text

Reporting Metrics NewRelic.recordMetric("Custom/last-sdr- seconds-ago-" + sdr.getServiceId(), 5.56); Saturday, 29 September 12

Slide 16

Slide 16 text

Reporting Metrics NewRelic.recordMetric("Custom/last-sdr- seconds-ago-" + sdr.getServiceId(), 5.56); Saturday, 29 September 12

Slide 17

Slide 17 text

Database Monitoring Saturday, 29 September 12

Slide 18

Slide 18 text

Slow SQL Saturday, 29 September 12

Slide 19

Slide 19 text

Map View Saturday, 29 September 12

Slide 20

Slide 20 text

JVM Memory use and GC Saturday, 29 September 12

Slide 21

Slide 21 text

Custom Dashboards Saturday, 29 September 12

Slide 22

Slide 22 text

Alerting Saturday, 29 September 12

Slide 23

Slide 23 text

Apdex Saturday, 29 September 12

Slide 24

Slide 24 text

The Java agent How does it work: java -javaagent:newrelic.jar Saturday, 29 September 12

Slide 25

Slide 25 text

newrelic.yaml Saturday, 29 September 12

Slide 26

Slide 26 text

newrelic-sysmond sudo apt-get install newrelic-sysmond sudo /etc/init.d/newrelic-sysmond stop sudo /etc/init.d/newrelic-sysmond start Saturday, 29 September 12

Slide 27

Slide 27 text

newrelic-sysmond sudo apt-get install newrelic-sysmond sudo /etc/init.d/newrelic-sysmond stop sudo /etc/init.d/newrelic-sysmond start Saturday, 29 September 12

Slide 28

Slide 28 text

Ignoring Ignore URLs: IgnoreNewrelicFilter Ignore methods: @NewRelicIgnoreTransaction or: NewRelic.ignoreTransaction() Ignore methods for apdex: @ NewRelicIgnoreApdex Or: NewRelic.ignoreApdex() Saturday, 29 September 12

Slide 29

Slide 29 text

Ignoring - using the filter Saturday, 29 September 12

Slide 30

Slide 30 text

The full Java API https://newrelic.com/docs/java/java-agent-api Saturday, 29 September 12

Slide 31

Slide 31 text

Deployment Notification curl -H x-api-key:17... -d 'deployment[app_name]=rtprocessor' -d 'deployment[revision]=r15161' -d 'deployment[user]=Ran Tavory' https://rpm.newrelic.com/deployments.xml Saturday, 29 September 12

Slide 32

Slide 32 text

Resources https://sites.google.com/a/totango.com/wiki/engineering/ ops/newrelic https://newrelic.com/docs/java/new-relic-for-java https://newrelic.com/docs/java/java-agent-configuration https://newrelic.com/docs/java/java-agent-api https://newrelic.com/docs/java/real-user-monitoring-in- java http://apdex.org/overview.html Saturday, 29 September 12