JavaLand 2023, März 2023, Dirk Kröhan, (Software-Architekt bei QAware in Mainz.)
== Dokument bitte herunterladen, falls unscharf! Please download slides if blurred! ==
Bugs passieren, auch in der Produktion!
Die Fehlersuch aber ist anstrengend und zeitintensiv
Die Lösung?
On Demand Debug Logging
Wir zeigen die Funktionen, Vorteile und Nachteile.
21. QAware | 21
Aber wie funktioniert das nur?
■ Schritt 1:
– Requests gehen durch ein API-Gateway
22. QAware | 22
Unsere Architektur
Service A Service C
API-Gateway
Service B
Service E
Service D
23. QAware | 23
Aber wie funktioniert das nur?
■ Schritt 1:
– Requests gehen durch ein API-Gateway
■ Schritt 2:
– Alle Services nutzen eine Tracing-Library
26. Trace Propagation
QAware | 26
■ Es gibt verschiedene Wege um Trace Daten zu propagieren
– W3C Trace Context: https://www.w3.org/TR/trace-context-1/
– Zipking B3 Propagation: https://github.com/openzipkin/b3-propagation
Quelle: https://github.com/openzipkin/b3-propagation
27. QAware | 27
Aber wie funktioniert das nur?
■ Schritt 1:
– Requests gehen durch ein API-Gateway
■ Schritt 2:
– Alle Services nutzen eine Tracing-Library
■ Schritt 3:
– Debug Information propagieren
28. Baggage Propagation
QAware | 28
■ W3C Propagation format for distributed context: Baggage
– https://www.w3.org/TR/baggage/
■ Spring Cloud Sleuth (Spring Boot 2.x)
– https://docs.spring.io/spring-cloud-sleuth/docs/current/reference/htmlsingle/spring-cloud-sleuth.html#features-
baggage
■ Micrometer Tracing (Spring Boot 3.x)
– https://micrometer.io/docs/tracing#_micrometer_tracing_baggage_api
=> Wir setzen x-user-debug-log als Baggage Feld im API-Gateway
29. QAware | 29
Aber wie funktioniert das nur?
■ Schritt 1:
– Requests gehen durch ein API-Gateway
■ Schritt 2:
– Alle Services nutzen eine Tracing-Library
■ Schritt 3:
– Debug Information propagieren
■ Schritt 4:
– Logger loggt auf DEBUG, wenn Debug Info
gesetzt ist
30. Logback Turbofilter
QAware | 30
■ Gedacht für: “high performance filtering of logging events”
■ Werden bei jedem Logging statement aufgerufen
– noch vor der Erstellung des LoggingEvent-Objekts
■ Entscheidet ob:
– NEUTRAL: Entscheidung wird nicht getroffen
– ACCEPT: Log Statement wird geschrieben
– DENY: Log Statement wird nicht geschrieben
■ Mehr Infos unter: https://logback.qos.ch/manual/filters.html#TurboFilter
32. QAware | 32
Elementar, mein lieber Watson!
■ Schritt 1:
– Requests gehen durch ein API-Gateway
■ Schritt 2:
– Alle Services nutzen eine Tracing-Library
■ Schritt 3:
– Debug Information propagieren
■ Schritt 4:
– Logger loggt auf DEBUG, wenn Debug Info
gesetzt ist
33. QAware | 33
Zusammenfassung
Service A Service C
API-Gateway
Service B
Service E
Service D
1. API-Gateway dekodiert
Access-Token um User-ID
zu ermitteln
2. Überprüft ob für die
User-Id On-Deman-Debug-
Log aktiviert ist.
3. Setzt x-user-debug-
log als Baggage Header.
6. Leitet x-user-debug-
log als Baggage Header
weiter
5. DebugLogTurboFilter
entscheidet:
FilterReply.ACCEPT
4. Verarbeitet Tracing +
Baggage Header
7. Leitet x-user-debug-
log als Baggage Header
weiter
35. On-Demand-Debug-Logging
QAware | 35
■ Vorteile
– Fehlerdiagnose auf der Umgebung, wo der Fehler passiert
– Schnellere Fehlerdiagnose
– Jeder Request ist eindeutig per TraceId auffindbar
– Debug Logging sofort aktiv, kein Deployment notwendig
– Kein Problem mit zu hohem Log-Volumen
– Kein Problem mit Datenschutz
■ Nachteile
– Jeder Service im Cluster braucht Tracing Support
– Benötigt zur einfachen Umsetzung ein API-Gateway