Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Fährtenlesen für Microservices - Tracing in der...

Fährtenlesen für Microservices - Tracing in der Cloud

Vortag bei der JavaLand 2019
https://programm.javaland.eu/2019/#/scheduledEvent/569684

Abstract:

In verteilten Microservices ist es mitunter schwer, einen Überblick zu erhalten. Wie viel Zeit benötigen die einzelnen Teilschritte eines Aufrufs? An welcher Stelle tritt ein Fehler auf? Warum dauern einzelne Aufrufe länger als andere?

In unseren Projekten nutzen wir Tracing als Ergänzung zu Logging und Metriken, um diese Fragen zu beantworten. Tracing hilft, die Laufzeit von Teilschritten im Zusammenhang zu ermitteln, wiederholte Aufrufe zu identifizieren und unsinnige Reihenfolgen aufzudecken. Auch asynchrone Verarbeitung kann visualisiert werden. Insbesondere bei komplexen Zusammenhängen zwischen einzelnen Applikationen unterstützt es bei der Fehlersuche und spart damit Zeit.

Der Vortrag zeigt, wie mit OpenTracing und Jaeger vorhandene Spring-Boot-Anwendungen um Tracing erweitert werden. Für HTTP/REST, Datenbanken und Queues existieren bereits vorgefertigte Standard-Instrumentierungen. An anderen Stellen können Aufrufe von Hand instrumentiert werden. Der Vortrag gibt zusätzlich einen Überblick, welche Infrastruktur-Komponenten notwendig sind.

Björn Kasteleiner

March 19, 2019
Tweet

More Decks by Björn Kasteleiner

Other Decks in Programming

Transcript

  1. Fährtenlesen für Microservices: Tracing in der Cloud Kurzvorstellung © msg

    | 19.03.2019 | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 2 33 Jahre alt 5 Jahre Cloud 10 Jahre Java 15 Jahre Linux
  2. Ausgangssituation 1. https://github.com/bjkastel/sb2-jaeger-sample Unsere Anwendung © msg | 19.03.2019 |

    Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 3
  3. Ausgangssituation 1. https://github.com/bjkastel/sb2-jaeger-sample Es funktioniert nicht © msg | 19.03.2019

    | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 6
  4. Ausgangssituation 1. https://github.com/bjkastel/sb2-jaeger-sample Es funktioniert nicht © msg | 19.03.2019

    | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 8
  5. Was ist Tracing? Observability © msg | 19.03.2019 | Fährtenlesen

    für Microservices: Tracing in der Cloud | Björn Kasteleiner 9 Tracing Status Metriken Logging Aufzeichnen von Ereignissen Statistiken über Ereignisse Verlauf von Ereignissen Zustand des Systems
  6. Wie kann Tracing bei der Fehleranalyse unterstützen? Reservierungswunsch anlegen ©

    msg | 19.03.2019 | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 10
  7. Wie kann Tracing bei der Fehleranalyse unterstützen? Verarbeitung der Reservierung

    © msg | 19.03.2019 | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 11
  8. Wie kann Tracing bei der Fehleranalyse unterstützen? Benachrichtigung des Kunden

    © msg | 19.03.2019 | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 12
  9. Trace Was ist Tracing? © msg | 19.03.2019 | Fährtenlesen

    für Microservices: Tracing in der Cloud | Björn Kasteleiner 13 1. https://www.jaegertracing.io/docs/1.9/ • Beschreibt eine Programmsequenz • Besteht aus mehreren Operationen • Koordination erfolgt über Meta-Informationen − Trace Id − Span Id − Parent Span Id − Flags
  10. • Einzelne Operationen in einem Aufruf • Enthält Informationen über

    − Beginn − Ende − Komponentenname − Logeinträge − Tags (Key/Value-Paare) Spans Was ist Tracing? © msg | 19.03.2019 | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 14 1. https://www.jaegertracing.io/docs/1.9/
  11. Libraries, Tools & Frameworks 1. https://opentracing.io/ 2. Logo: https://github.com/cncf/artwork Instrumentierung

    mit OpenTracing © msg | 19.03.2019 | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 15 • Vendor neutrale API für verteiltes Tracing • Semantische Spezifikation • Plattform übergreifend • Anbindung Tracing Implementierungen • Ermöglicht Instrumentierung des Programmcodes • Cloud Native Computing Foundation • Kein Standard • Überlässt die Weitergabe von Trace-Kontext-Metadaten der Tracing Implementierung
  12. Implementierung mit Jaeger Tracing • Implementierung der OpenTracing API •

    Cloud Native Computing Foundation • Ursprünglich von Uber entwickelt • Datenhaltung − Cassandra Database − Elastic Search • Zusätzliche Funktionen − Vergleichen von Traces − Abhängigkeiten zwischen Services darstellen − Unterstützung für Sampling Libraries, Tools & Frameworks © msg | 19.03.2019 | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 16 1. https://www.jaegertracing.io/docs/1.9/architecture/#components 2. Logo: https://github.com/cncf/artwork
  13. Libraries, Tools & Frameworks 1. https://github.com/opentracing-contrib/java-spring-jaeger 2. https://github.com/opentracing-contrib/java-spring-cloud Integration mit

    Spring Boot © msg | 19.03.2019 | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 17 • Vorbereitete Spring Boot Starter − Vorbereitete Konfiguration − Automatische Integration • Nur ein Maven Dependency Eintrag nötig: <dependency> <groupId>io.opentracing.contrib</groupId> <artifactId>opentracing-spring-jaeger-cloud-starter</artifactId> <version>1.0.1</version> </dependency>
  14. Vorhandenen Instrumentierungen • Spring − RestControllers − RestTemplates − WebAsyncTask

    − @Async − @Scheduled − Executors • Messaging − JMS − RabbitMQ − WebSocket STOMP − Spring Messaging • Datenbanken − JDBC − Mongo − Redis • Standard Logging • Weitere − Zuul − RxJava − Feign − HystrixFeign − Hystrix Libraries, Tools & Frameworks © msg | 19.03.2019 | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 18 1. https://github.com/opentracing-contrib/java-spring-jaeger 2. https://github.com/opentracing-contrib/java-spring-cloud
  15. Demo 1. https://github.com/bjkastel/sb2-jaeger-sample Aufbau der Anwendung © msg | 19.03.2019

    | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 19
  16. Weiterführendes Tracing Informationen anreichern © msg | 19.03.2019 | Fährtenlesen

    für Microservices: Tracing in der Cloud | Björn Kasteleiner 21 Spans um Informationen durch Tags erweitern Eigene Spans mit Informationen über den fachlichen Kontext erzeugen // ---------------------------------------------------------------------- // Add waitTime as Tag to current Span tracer.activeSpan().setTag("waitTime", waitTime); // ---------------------------------------------------------------------- // ---------------------------------------------------------------------- // Open own Span for the selectTable. // It's using try-with-resources feature to close the span automatically. try (Scope scope = tracer.buildSpan(„selectTable").startActive(true)) { waitTime = selectTable(); scope.span().setTag("waitTime", waitTime); } // ----------------------------------------------------------------------
  17. Weiterführendes 1. Bild: https://rrze-pp.github.io/rrze-icon-set/tango/gallery.html#filter von Regional Computing Centre of Erlangen

    (RRZE) ist lizenziert gemäß CC BY-SA Sampling / Adaptives Sampling © msg | 19.03.2019 | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 22 • Reduzierung der Rate, mit der Traces aufgezeichnet werden • Varianten: − Constant Sampling − Probabilistic Sampling (1 von 10 Traces) − Rate Limiting (Traces pro Sekunde) − Remote • Adaptives Sampling − Entscheidet auf Basis von bestimmten Operationen (Spans) − Mindestrate + Probabilistic Sampling
  18. Fährtenlesen für Microservices: Tracing in der Cloud Fazit © msg

    | 19.03.2019 | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 23 • Tracing hilfreich als Ergänzung zur Fehlersuche • Leichte Integration • Instrumentierung gängiger Spring Boot Funktionen unterstützt • Informationen über fachlichen Kontext in Traces integrierbar • Einigung auf eine Tracing-Implementierung ist (aktuell) notwendig
  19. Fährtenlesen für Microservices: Tracing in der Cloud Links © msg

    | 19.03.2019 | Fährtenlesen für Microservices: Tracing in der Cloud | Björn Kasteleiner 24 • Entwurf der Tracing-Header Spezifikation des W3Cs https://w3c.github.io/trace-context/ • Webseite des OpenTracing Projekts https://opentracing.io • Webseite des Jaeger Tracing Projekts https://www.jaegertracing.io • Spring Boot Integration von OpenTracing mit Jaeger Tracing https://github.com/opentracing-contrib/java-spring-jaeger https://github.com/opentracing-contrib/java-spring-cloud • Code des Beispiel-Projekts https://github.com/bjkastel/sb2-jaeger-sample
  20. .consulting .solutions .partnership Björn Kasteleiner Lead IT Consultant [email protected] msg

    systems ag Robert-Buerkle-Str. 1, 85737 Ismaning Germany www.msg.group