SlideShare a Scribd company logo
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Diagnose Your Microservices
Open Tracing / Oracle Application Performance Monitoring Cloud
Marcus Hirt / Consulting Member of Technical Staff
John Sullivan / Senior Director of Product Management
OMC
October, 2018
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Agenda
1. Microservices
2. OpenTracing
3. JDK Flight Recorder
4. Oracle Management Cloud (APM)
2
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Microservices
Confidential – Oracle
3
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Monolith vs Microserves
4
Illustrations from https://martinfowler.com/articles/microservices.html
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Microservices
• Decentralized
• Independent
• Black box
• Polyglot
• Do one thing, and do it well
• You build it, you run it
5
Characteristics
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Conway’s Law
6
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
The Robotshop
7
Customers
OrdersLoad Generator
Factory
Add/Remove
Verify
Build/Pickup
Submit/Pickup
Check available robot types and colors
https://github.com/thegreystone/problematic-microservices
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 8
Microservices in the Cloud
LoadBalancer
Incoming
Request
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
OpenTracing
9
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Distributed Tracing
• Dapper - Google’s paper on distributed tracing (2010)
• Inspired other distributed tracer implementations
– Zipkin
– Jaeger
– AppDash
– …
10
Dynatrace (2005)
AppDynamics (2008)
New Relic (2008)
DataDog (2010)
…
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Java Tracing
• All Tracers/APMs pretty much doing the same thing
– BCI for getting the data (value add - knowing what data to get)
– Presenting findings to the user (value add - knowing what to do with the data)
• Want to add additional contextual information?
– Work with vendor specific proprietary API
• Framework/library want to add more detailed trace information?
– Work with vendor specific proprietary API
11
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Open Tracing
• Vendor neutral distributed tracing API
– Library builders can interact with one API to support multiple vendors
– Customers can add contextual information without worrying about vendor lock-in
• Open Tracing is…
– Application level API for producing tracing and trace related information
– API for context propagation
– Mainly contributed by LightStep, Jaeger, Skywalking and Datadog
• Spec and language specific APIs on github:
https://github.com/opentracing
12
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
OpenTracing
• Trace
– A distributed operation, potentially spanning multiple processes
– Implicitly defined by the individual Spans in the trace (more soon)
– Can be thought of as a directed acyclic graph (DAG) of Spans
– The span in the root of the DAG is called the root Span
– The edges between the Spans are called References
13
Core API Concepts
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
OpenTracing
• Span
– Has an operation name
– Has a start timestamp
– Has a finish timestamp
– Has a SpanContext
• Has Baggage Items (key/value pairs which cross process boundaries)
• Implementation specific state (used to identify the span across process boundaries)
– Zero or more key/value Span Tags
– Zero or more Span Logs (key/value + timestamp)
14
Core API Concepts, cont’d
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
OpenTracing
• Reference
– Define a direct casual relationship between two spans
– ChildOf
• Parent depends on the child in some way
• Note that it is legal for a finish timestamp of a child to be after that of any parent
– FollowFrom
• Parent does not depend on the result of the child in any way
• Note that is legal for a FollowsFrom child to be started after the end of any ancestor
– ChildOf is by far the most common reference type
15
Core API Concepts, cont’d
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
createRobot
FactoryService
createRobot
FactoryService
Example Trace DAG
16
Robotshop
createCustomer
CustomerService
fullSystemTest
LoadGenerator
postOrder
OrderService
validateCustomer
CustomerService
createRobot
FactoryService
pickUpOrder
OrderService
pickUpRobot
FactoryService
deleteCustomer
CustomerService
pickUpRobot
FactoryService
pickUpRobot
FactoryService
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 17
Jaeger + Robotshop Demo
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
JDK Flight Recorder
And JDK Mission Control
Confidential – Oracle
18
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
JDK Flight Recorder (JFR)
• JVM technology for production time profiling and diagnostics
• Analogous to a Flight Data Recorder in a commercial aircraft
• Open sourced with JDK 11
• Features added by the Hotspot runtime team continuously
• Used at Oracle for years for sorting out problems in production systems
19
"In Fusion we create hundreds of thousands of Flight
Recordings, and we can figure out 95% of the issues
using nothing but the recordings."
- Joe Albowicz, Oracle (Fusion Application Development)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Simple JFR Event Example
20
For more examples, see the JFR part of: https://github.com/thegreystone/java-svc
public class HelloJfr {
@Label("Hello World!")
static class HelloWorldEvent extends Event {
@Label("Message")
String message;
}
public static void main(String ... args) throws IOException {
HelloWorldEvent event = new HelloWorldEvent();
event.message = "Hello World!";
event.commit();
}
}
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
JDK Mission Control
• An application for, among other things, analysing flight recordings
• Parser and analysis libraries for JDK Flight Recordings
– Statistical operations
– Compact code
– Reports
• Open sourced
• Early access builds of the application available (http://jdk.java.net/jmc/)
• Snapshot builds of the libraries available at Sonatype (org.openjdk.jmc.*)
21
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Example: Generating an Analysis Report (HTML)
22
public static void main(String[] args) throws Exception {
String report = JfrHtmlRulesReport.createReport(
JfrLoaderToolkit.loadEvents(new File(args[0])));
System.out.println(report);
}
For more examples, see the JMC part of: https://github.com/thegreystone/java-svc
- or just run the main method of JfrHtmlRulesReport
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Example: Calculating Statistics for Monitor Enter Events
23
For more examples, see the JMC part of: https://github.com/thegreystone/java-svc
public static void main(String[] args) throws IOException, CouldNotLoadRecordingException {
IItemCollection events = JfrLoaderToolkit.loadEvents(new File(args[0]));
IItemCollection monitorEnterEvents = events.apply(JdkFilters.MONITOR_ENTER);
IQuantity eventCount = monitorEnterEvents.getAggregate(Aggregators.count());
IQuantity avg = monitorEnterEvents.getAggregate(Aggregators.avg((JfrAttributes.DURATION));
IQuantity stddev = monitorEnterEvents.getAggregate(Aggregators.stddev(
JfrAttributes.DURATION));
System.out.println(String.format("# of events: %d, avg: %s, stdddev: %sn",
eventCount.longValue(),
avg.displayUsing(IDisplayable.AUTO),
stddev.displayUsing(IDisplayable.AUTO)));
}
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Idea: Marrying OpenTracing and JDK Flight Recorder
• Combine OpenTracing and Flight Recorder
– Distributed tracing with deep diagnostics capabilities
• Create a JFR OpenTracing Tracer
– Emit flight recording events for Spans and Scopes (thread local)
– Delegate to whichever Tracer is someone’s favourite tracer
– Since context is implementation specific, provide plug-in mechanism for custom
context extractors
– Have it support Oracle JDK 7+ and OpenJDK 11+ by building it as an mrjar
• Open sourced prototype (links towards the end)
24
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 25
jfr-tracer + Robotshop Demo
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
But…
• What if you have thousands of these Java processes?
• How do you trigger the recording dumps?
• Where do you store the recording data?
• What if you also want the logs, and the means to process the logs?
• What if you want some metrics already at the distributed tracing level?
26
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Oracle Management Cloud
Application Performance Management
27
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
APM Diagnostics Use Case Examples
28
Performance issues in the past
• Use APM to monitor and analyze server requests
• Use APM with deep dive thread samples to locate the slow code
• Very recent past - Dump JFR and analyze in APM and in JMC
The problem is happening right NOW!!
• Dump JFR
• Run the profiler
Problem is about to happen (i.e. memory leak)
• Take class histograms and compare/trend later
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
End-2-End Transaction Tracing, Code-level Visibility
• Measure all ingress/egress points
• Measure preformance across
service and tiers
• User defined custom tracing points
(OpenTracing, POJO, etc.) when
OOB are not sufficent
• Leverage diagnostics on
monitoring data anywhere/anytime
29
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Custom Calls Added OpenTrace in APM
30
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 31
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 32
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 33
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 34
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 35
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 36
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 37
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Continuous
Integration
Java Flight
Recorder
Build Better Applications with Oracle
Code
Repository
Telemetry
from test
Telemetry
from pre-
prod/prod
AVAILABILITY
APM
ALERTSSYS
PAGING
VIZ.FRAMEWORK
DBMONITORING
CUSTOM
MONITORING
LOGGING
BIGDATA
MONITORING
DISTRIBUTED
TRACING
CLOUD
MONITORING
Management At Cloud Scale
Monitoring Large-Scale Distributed Applications in
Oracle Cloud - Thursday, Oct 25, 10:00 a.m. - 10:45 a.m.
| Moscone West - Room 2009 - DEV6151
Diagnose Your Microservices: OpenTracing/Oracle
Application Performance Monitoring Cloud -
Wednesday, Oct 24, 4:00 p.m. - 4:45 p.m. | Moscone
West - Room 2011 - DEV5435
Microservices: Ten Steps to Build, Manage, and Monitor
Your Microservices - Wednesday, Oct 24, 9:00 a.m. -
9:45 a.m. | Moscone West - Room 2008 - DEV5564
Build
Diagnose
Run
38
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Summary
• OpenTracing is a vendor neutral initiative for a standard API for supporting
distributed tracing
• JDK Flight Recorder is a framework for production time profiling and
distnostics built into the JVM
• JDK Flight Recorder is open sourced, and included in OpenJDK, since JDK 11
• Oracle has a powerful APM in Oracle Management Cloud
– With support for OpenTracing as a Zipkin agent communication endpoint, and…
– …as a custom OpenTracing Tracer (metrics++ from the OMC APM agent)
– With JFR support
39
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Other JMC-/JFR-related Presentations
Day Time Title Location
Monday 10:30 Contributing to the Mission Control OpenJDK Project MW 2004
Tuesday 11:30 Three Productive Ways to Use Open Source Java Flight Recorder and
Java Mission Control
MW 2024
Tuesday 14:30 Fast and Furious: Java Flight Recorder and Flame Graphs MW 2020
Wednesday 10:30 Production-Time Profiling and Diagnostics on the JVM MW 2004
Wednesday 12:30 OpenJDK Mission Control: The Hands-on-Lab MW 2001A
Wednesday 16:30 Diagnose Your Microservices: OpenTracing/Oracle APM Cloud MW 2011
Thursday 11:00 Getting Started with the (Open Source) JDK Mission Control MW 2014
Thursday 12:30 Flight Recorder in OpenJDK MW 2018
40
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Safe Harbor Statement
The preceding is intended to outline our general product direction. It is intended for
information purposes only, and may not be incorporated into any contract. It is not a
commitment to deliver any material, code, or functionality, and should not be relied upon
in making purchasing decisions. The development, release, and timing of any features or
functionality described for Oracle’s products remains at the sole discretion of Oracle.
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Resources
• OMC: http://cloud.oracle.com/OMC
• Marcus’ blog: http://hirt.se/blog
• Marcus’ GitHub: https://github.com/thegreystone
https://github.com/thegreystone/jfr-tracer
(Delegating JFR tracer for OpenTracing)
https://github.com/thegreystone/problematic-microservices
(Robotshop, use the jfr-tracer branch)
42

More Related Content

What's hot

What's hot (20)

Building Domain-specific PaaS with OpenShift Origin: The TRESOR Healthcare P...
 Building Domain-specific PaaS with OpenShift Origin: The TRESOR Healthcare P... Building Domain-specific PaaS with OpenShift Origin: The TRESOR Healthcare P...
Building Domain-specific PaaS with OpenShift Origin: The TRESOR Healthcare P...
 
Intro to Kubernetes & GitOps Workshop
Intro to Kubernetes & GitOps WorkshopIntro to Kubernetes & GitOps Workshop
Intro to Kubernetes & GitOps Workshop
 
Neutron upgrades strategy
Neutron upgrades strategyNeutron upgrades strategy
Neutron upgrades strategy
 
OpenShift Taiwan Vol.1 Technology Overview
OpenShift Taiwan Vol.1 Technology OverviewOpenShift Taiwan Vol.1 Technology Overview
OpenShift Taiwan Vol.1 Technology Overview
 
OpenShift pour le developpement cloud native - 20171214
OpenShift pour le developpement cloud native - 20171214OpenShift pour le developpement cloud native - 20171214
OpenShift pour le developpement cloud native - 20171214
 
Git General
Git GeneralGit General
Git General
 
OpenShift and next generation application development
OpenShift and next generation application developmentOpenShift and next generation application development
OpenShift and next generation application development
 
How we can do Multi-Tenancy on Kubernetes
How we can do Multi-Tenancy on KubernetesHow we can do Multi-Tenancy on Kubernetes
How we can do Multi-Tenancy on Kubernetes
 
F5 OpenShift Workshop
F5 OpenShift WorkshopF5 OpenShift Workshop
F5 OpenShift Workshop
 
stackconf 2021 | Embracing change: Policy-as-code for Kubernetes with OPA and...
stackconf 2021 | Embracing change: Policy-as-code for Kubernetes with OPA and...stackconf 2021 | Embracing change: Policy-as-code for Kubernetes with OPA and...
stackconf 2021 | Embracing change: Policy-as-code for Kubernetes with OPA and...
 
[JOI] TOTVS Developers Joinville - Java #1
[JOI] TOTVS Developers Joinville - Java #1[JOI] TOTVS Developers Joinville - Java #1
[JOI] TOTVS Developers Joinville - Java #1
 
Deploying & Scaling OpenShift on OpenStack using Heat - OpenStack Seattle Mee...
Deploying & Scaling OpenShift on OpenStack using Heat - OpenStack Seattle Mee...Deploying & Scaling OpenShift on OpenStack using Heat - OpenStack Seattle Mee...
Deploying & Scaling OpenShift on OpenStack using Heat - OpenStack Seattle Mee...
 
Jfrog artifactory as private docker registry
Jfrog artifactory as private docker registryJfrog artifactory as private docker registry
Jfrog artifactory as private docker registry
 
Cloud nativemicroservices jax-london2020
Cloud nativemicroservices   jax-london2020Cloud nativemicroservices   jax-london2020
Cloud nativemicroservices jax-london2020
 
DEVNET-1148 Leveraging Cisco OpenStack Private Cloud for Developers
DEVNET-1148	Leveraging Cisco OpenStack Private Cloud for DevelopersDEVNET-1148	Leveraging Cisco OpenStack Private Cloud for Developers
DEVNET-1148 Leveraging Cisco OpenStack Private Cloud for Developers
 
From shipping rpms to helm charts - Lessons learned and best practices
From shipping rpms to helm charts - Lessons learned and best practicesFrom shipping rpms to helm charts - Lessons learned and best practices
From shipping rpms to helm charts - Lessons learned and best practices
 
What's Rio 〜Standalone〜
What's Rio 〜Standalone〜What's Rio 〜Standalone〜
What's Rio 〜Standalone〜
 
stackconf 2021 | GitOps: yea or nay?
stackconf 2021 | GitOps: yea or nay?stackconf 2021 | GitOps: yea or nay?
stackconf 2021 | GitOps: yea or nay?
 
Kubernetes and CNCF Landscape 101
Kubernetes and CNCF Landscape 101Kubernetes and CNCF Landscape 101
Kubernetes and CNCF Landscape 101
 
Pycon9 - Paas per tutti i gusti con Dokku and Kubernetes
Pycon9 - Paas per tutti i gusti con Dokku and KubernetesPycon9 - Paas per tutti i gusti con Dokku and Kubernetes
Pycon9 - Paas per tutti i gusti con Dokku and Kubernetes
 

Similar to Diagnose Your Microservices

Similar to Diagnose Your Microservices (20)

Java and Serverless - A Match Made In Heaven, Part 1
Java and Serverless - A Match Made In Heaven, Part 1Java and Serverless - A Match Made In Heaven, Part 1
Java and Serverless - A Match Made In Heaven, Part 1
 
Functions and DevOps
Functions and DevOpsFunctions and DevOps
Functions and DevOps
 
Serverless patterns
Serverless patternsServerless patterns
Serverless patterns
 
Serverless Kotlin
Serverless KotlinServerless Kotlin
Serverless Kotlin
 
Using Machine Learning to Debug complex Oracle RAC Issues
Using Machine Learning  to Debug complex Oracle RAC IssuesUsing Machine Learning  to Debug complex Oracle RAC Issues
Using Machine Learning to Debug complex Oracle RAC Issues
 
How to add stuff to MySQL
How to add stuff to MySQLHow to add stuff to MySQL
How to add stuff to MySQL
 
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: Data
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: DataAMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: Data
AMIS Oracle OpenWorld en Code One Review 2018 - Pillar 1: Data
 
AMIS Oracle OpenWorld & CodeOne Review - Pillar 1 - Data (5 november 2018)
AMIS Oracle OpenWorld & CodeOne Review - Pillar 1 - Data (5 november 2018)AMIS Oracle OpenWorld & CodeOne Review - Pillar 1 - Data (5 november 2018)
AMIS Oracle OpenWorld & CodeOne Review - Pillar 1 - Data (5 november 2018)
 
Shrinking the container_zurich_july_2018
Shrinking the container_zurich_july_2018Shrinking the container_zurich_july_2018
Shrinking the container_zurich_july_2018
 
Is 12 Factor App Right About Logging
Is 12 Factor App Right About LoggingIs 12 Factor App Right About Logging
Is 12 Factor App Right About Logging
 
Javantura v6 - JDK 11 & JDK 12 - Dalibor Topic
Javantura v6 - JDK 11 & JDK 12 - Dalibor TopicJavantura v6 - JDK 11 & JDK 12 - Dalibor Topic
Javantura v6 - JDK 11 & JDK 12 - Dalibor Topic
 
Oracle Code One 2018 Feedback (Server Side / Japanese)
Oracle Code One 2018 Feedback (Server Side / Japanese)Oracle Code One 2018 Feedback (Server Side / Japanese)
Oracle Code One 2018 Feedback (Server Side / Japanese)
 
20180921_DOAG_BigDataDays_OracleSpatialandPython_kpatenge
20180921_DOAG_BigDataDays_OracleSpatialandPython_kpatenge20180921_DOAG_BigDataDays_OracleSpatialandPython_kpatenge
20180921_DOAG_BigDataDays_OracleSpatialandPython_kpatenge
 
Oracle Modern AppDev Approach to Cloud & Container Native App
Oracle Modern AppDev Approach to Cloud & Container Native AppOracle Modern AppDev Approach to Cloud & Container Native App
Oracle Modern AppDev Approach to Cloud & Container Native App
 
JDK 10 Java Module System
JDK 10 Java Module SystemJDK 10 Java Module System
JDK 10 Java Module System
 
Advanced technologies and techniques for debugging HPC applications
Advanced technologies and techniques for debugging HPC applicationsAdvanced technologies and techniques for debugging HPC applications
Advanced technologies and techniques for debugging HPC applications
 
Hit Refresh with Oracle GoldenGate Microservices
Hit Refresh with Oracle GoldenGate MicroservicesHit Refresh with Oracle GoldenGate Microservices
Hit Refresh with Oracle GoldenGate Microservices
 
Oracle goldegate microservice
Oracle goldegate microserviceOracle goldegate microservice
Oracle goldegate microservice
 
Hyderabad Mar 2019 - Autonomous Database
Hyderabad Mar 2019 - Autonomous DatabaseHyderabad Mar 2019 - Autonomous Database
Hyderabad Mar 2019 - Autonomous Database
 
Serverless Java: JJUG CCC 2019
Serverless Java: JJUG CCC 2019Serverless Java: JJUG CCC 2019
Serverless Java: JJUG CCC 2019
 

More from Marcus Hirt (7)

Getting Started with JDK Mission Control
Getting Started with JDK Mission ControlGetting Started with JDK Mission Control
Getting Started with JDK Mission Control
 
Production Time Profiling and Diagnostics on the JVM
Production Time Profiling and Diagnostics on the JVMProduction Time Profiling and Diagnostics on the JVM
Production Time Profiling and Diagnostics on the JVM
 
Contributing to JDK Mission Control
Contributing to JDK Mission ControlContributing to JDK Mission Control
Contributing to JDK Mission Control
 
Robotics on Java Simplified
Robotics on Java SimplifiedRobotics on Java Simplified
Robotics on Java Simplified
 
Using Java Flight Recorder
Using Java Flight RecorderUsing Java Flight Recorder
Using Java Flight Recorder
 
Java Mission Control: Java Flight Recorder Deep Dive
Java Mission Control: Java Flight Recorder Deep DiveJava Mission Control: Java Flight Recorder Deep Dive
Java Mission Control: Java Flight Recorder Deep Dive
 
Production Time Profiling Out of the Box
Production Time Profiling Out of the BoxProduction Time Profiling Out of the Box
Production Time Profiling Out of the Box
 

Recently uploaded

Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 

Recently uploaded (20)

Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
AI/ML Infra Meetup | Perspective on Deep Learning Framework
AI/ML Infra Meetup | Perspective on Deep Learning FrameworkAI/ML Infra Meetup | Perspective on Deep Learning Framework
AI/ML Infra Meetup | Perspective on Deep Learning Framework
 
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAGAI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 
Top Mobile App Development Companies 2024
Top Mobile App Development Companies 2024Top Mobile App Development Companies 2024
Top Mobile App Development Companies 2024
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Studiovity film pre-production and screenwriting software
Studiovity film pre-production and screenwriting softwareStudiovity film pre-production and screenwriting software
Studiovity film pre-production and screenwriting software
 
Agnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in KrakówAgnieszka Andrzejewska - BIM School Course in Kraków
Agnieszka Andrzejewska - BIM School Course in Kraków
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
 
Crafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM IntegrationCrafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM Integration
 

Diagnose Your Microservices

  • 1. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Diagnose Your Microservices Open Tracing / Oracle Application Performance Monitoring Cloud Marcus Hirt / Consulting Member of Technical Staff John Sullivan / Senior Director of Product Management OMC October, 2018
  • 2. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Agenda 1. Microservices 2. OpenTracing 3. JDK Flight Recorder 4. Oracle Management Cloud (APM) 2
  • 3. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Microservices Confidential – Oracle 3
  • 4. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Monolith vs Microserves 4 Illustrations from https://martinfowler.com/articles/microservices.html
  • 5. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Microservices • Decentralized • Independent • Black box • Polyglot • Do one thing, and do it well • You build it, you run it 5 Characteristics
  • 6. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Conway’s Law 6
  • 7. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. The Robotshop 7 Customers OrdersLoad Generator Factory Add/Remove Verify Build/Pickup Submit/Pickup Check available robot types and colors https://github.com/thegreystone/problematic-microservices
  • 8. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 8 Microservices in the Cloud LoadBalancer Incoming Request
  • 9. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. OpenTracing 9
  • 10. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Distributed Tracing • Dapper - Google’s paper on distributed tracing (2010) • Inspired other distributed tracer implementations – Zipkin – Jaeger – AppDash – … 10 Dynatrace (2005) AppDynamics (2008) New Relic (2008) DataDog (2010) …
  • 11. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Java Tracing • All Tracers/APMs pretty much doing the same thing – BCI for getting the data (value add - knowing what data to get) – Presenting findings to the user (value add - knowing what to do with the data) • Want to add additional contextual information? – Work with vendor specific proprietary API • Framework/library want to add more detailed trace information? – Work with vendor specific proprietary API 11
  • 12. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Open Tracing • Vendor neutral distributed tracing API – Library builders can interact with one API to support multiple vendors – Customers can add contextual information without worrying about vendor lock-in • Open Tracing is… – Application level API for producing tracing and trace related information – API for context propagation – Mainly contributed by LightStep, Jaeger, Skywalking and Datadog • Spec and language specific APIs on github: https://github.com/opentracing 12
  • 13. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. OpenTracing • Trace – A distributed operation, potentially spanning multiple processes – Implicitly defined by the individual Spans in the trace (more soon) – Can be thought of as a directed acyclic graph (DAG) of Spans – The span in the root of the DAG is called the root Span – The edges between the Spans are called References 13 Core API Concepts
  • 14. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. OpenTracing • Span – Has an operation name – Has a start timestamp – Has a finish timestamp – Has a SpanContext • Has Baggage Items (key/value pairs which cross process boundaries) • Implementation specific state (used to identify the span across process boundaries) – Zero or more key/value Span Tags – Zero or more Span Logs (key/value + timestamp) 14 Core API Concepts, cont’d
  • 15. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. OpenTracing • Reference – Define a direct casual relationship between two spans – ChildOf • Parent depends on the child in some way • Note that it is legal for a finish timestamp of a child to be after that of any parent – FollowFrom • Parent does not depend on the result of the child in any way • Note that is legal for a FollowsFrom child to be started after the end of any ancestor – ChildOf is by far the most common reference type 15 Core API Concepts, cont’d
  • 16. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. createRobot FactoryService createRobot FactoryService Example Trace DAG 16 Robotshop createCustomer CustomerService fullSystemTest LoadGenerator postOrder OrderService validateCustomer CustomerService createRobot FactoryService pickUpOrder OrderService pickUpRobot FactoryService deleteCustomer CustomerService pickUpRobot FactoryService pickUpRobot FactoryService
  • 17. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 17 Jaeger + Robotshop Demo
  • 18. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. JDK Flight Recorder And JDK Mission Control Confidential – Oracle 18
  • 19. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. JDK Flight Recorder (JFR) • JVM technology for production time profiling and diagnostics • Analogous to a Flight Data Recorder in a commercial aircraft • Open sourced with JDK 11 • Features added by the Hotspot runtime team continuously • Used at Oracle for years for sorting out problems in production systems 19 "In Fusion we create hundreds of thousands of Flight Recordings, and we can figure out 95% of the issues using nothing but the recordings." - Joe Albowicz, Oracle (Fusion Application Development)
  • 20. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Simple JFR Event Example 20 For more examples, see the JFR part of: https://github.com/thegreystone/java-svc public class HelloJfr { @Label("Hello World!") static class HelloWorldEvent extends Event { @Label("Message") String message; } public static void main(String ... args) throws IOException { HelloWorldEvent event = new HelloWorldEvent(); event.message = "Hello World!"; event.commit(); } }
  • 21. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. JDK Mission Control • An application for, among other things, analysing flight recordings • Parser and analysis libraries for JDK Flight Recordings – Statistical operations – Compact code – Reports • Open sourced • Early access builds of the application available (http://jdk.java.net/jmc/) • Snapshot builds of the libraries available at Sonatype (org.openjdk.jmc.*) 21
  • 22. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Example: Generating an Analysis Report (HTML) 22 public static void main(String[] args) throws Exception { String report = JfrHtmlRulesReport.createReport( JfrLoaderToolkit.loadEvents(new File(args[0]))); System.out.println(report); } For more examples, see the JMC part of: https://github.com/thegreystone/java-svc - or just run the main method of JfrHtmlRulesReport
  • 23. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Example: Calculating Statistics for Monitor Enter Events 23 For more examples, see the JMC part of: https://github.com/thegreystone/java-svc public static void main(String[] args) throws IOException, CouldNotLoadRecordingException { IItemCollection events = JfrLoaderToolkit.loadEvents(new File(args[0])); IItemCollection monitorEnterEvents = events.apply(JdkFilters.MONITOR_ENTER); IQuantity eventCount = monitorEnterEvents.getAggregate(Aggregators.count()); IQuantity avg = monitorEnterEvents.getAggregate(Aggregators.avg((JfrAttributes.DURATION)); IQuantity stddev = monitorEnterEvents.getAggregate(Aggregators.stddev( JfrAttributes.DURATION)); System.out.println(String.format("# of events: %d, avg: %s, stdddev: %sn", eventCount.longValue(), avg.displayUsing(IDisplayable.AUTO), stddev.displayUsing(IDisplayable.AUTO))); }
  • 24. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Idea: Marrying OpenTracing and JDK Flight Recorder • Combine OpenTracing and Flight Recorder – Distributed tracing with deep diagnostics capabilities • Create a JFR OpenTracing Tracer – Emit flight recording events for Spans and Scopes (thread local) – Delegate to whichever Tracer is someone’s favourite tracer – Since context is implementation specific, provide plug-in mechanism for custom context extractors – Have it support Oracle JDK 7+ and OpenJDK 11+ by building it as an mrjar • Open sourced prototype (links towards the end) 24
  • 25. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 25 jfr-tracer + Robotshop Demo
  • 26. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. But… • What if you have thousands of these Java processes? • How do you trigger the recording dumps? • Where do you store the recording data? • What if you also want the logs, and the means to process the logs? • What if you want some metrics already at the distributed tracing level? 26
  • 27. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Oracle Management Cloud Application Performance Management 27
  • 28. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. APM Diagnostics Use Case Examples 28 Performance issues in the past • Use APM to monitor and analyze server requests • Use APM with deep dive thread samples to locate the slow code • Very recent past - Dump JFR and analyze in APM and in JMC The problem is happening right NOW!! • Dump JFR • Run the profiler Problem is about to happen (i.e. memory leak) • Take class histograms and compare/trend later
  • 29. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. End-2-End Transaction Tracing, Code-level Visibility • Measure all ingress/egress points • Measure preformance across service and tiers • User defined custom tracing points (OpenTracing, POJO, etc.) when OOB are not sufficent • Leverage diagnostics on monitoring data anywhere/anytime 29
  • 30. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Custom Calls Added OpenTrace in APM 30
  • 31. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 31
  • 32. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 32
  • 33. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 33
  • 34. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 34
  • 35. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 35
  • 36. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 36
  • 37. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. 37
  • 38. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Continuous Integration Java Flight Recorder Build Better Applications with Oracle Code Repository Telemetry from test Telemetry from pre- prod/prod AVAILABILITY APM ALERTSSYS PAGING VIZ.FRAMEWORK DBMONITORING CUSTOM MONITORING LOGGING BIGDATA MONITORING DISTRIBUTED TRACING CLOUD MONITORING Management At Cloud Scale Monitoring Large-Scale Distributed Applications in Oracle Cloud - Thursday, Oct 25, 10:00 a.m. - 10:45 a.m. | Moscone West - Room 2009 - DEV6151 Diagnose Your Microservices: OpenTracing/Oracle Application Performance Monitoring Cloud - Wednesday, Oct 24, 4:00 p.m. - 4:45 p.m. | Moscone West - Room 2011 - DEV5435 Microservices: Ten Steps to Build, Manage, and Monitor Your Microservices - Wednesday, Oct 24, 9:00 a.m. - 9:45 a.m. | Moscone West - Room 2008 - DEV5564 Build Diagnose Run 38
  • 39. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Summary • OpenTracing is a vendor neutral initiative for a standard API for supporting distributed tracing • JDK Flight Recorder is a framework for production time profiling and distnostics built into the JVM • JDK Flight Recorder is open sourced, and included in OpenJDK, since JDK 11 • Oracle has a powerful APM in Oracle Management Cloud – With support for OpenTracing as a Zipkin agent communication endpoint, and… – …as a custom OpenTracing Tracer (metrics++ from the OMC APM agent) – With JFR support 39
  • 40. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Other JMC-/JFR-related Presentations Day Time Title Location Monday 10:30 Contributing to the Mission Control OpenJDK Project MW 2004 Tuesday 11:30 Three Productive Ways to Use Open Source Java Flight Recorder and Java Mission Control MW 2024 Tuesday 14:30 Fast and Furious: Java Flight Recorder and Flame Graphs MW 2020 Wednesday 10:30 Production-Time Profiling and Diagnostics on the JVM MW 2004 Wednesday 12:30 OpenJDK Mission Control: The Hands-on-Lab MW 2001A Wednesday 16:30 Diagnose Your Microservices: OpenTracing/Oracle APM Cloud MW 2011 Thursday 11:00 Getting Started with the (Open Source) JDK Mission Control MW 2014 Thursday 12:30 Flight Recorder in OpenJDK MW 2018 40
  • 41. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Safe Harbor Statement The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
  • 42. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Resources • OMC: http://cloud.oracle.com/OMC • Marcus’ blog: http://hirt.se/blog • Marcus’ GitHub: https://github.com/thegreystone https://github.com/thegreystone/jfr-tracer (Delegating JFR tracer for OpenTracing) https://github.com/thegreystone/problematic-microservices (Robotshop, use the jfr-tracer branch) 42