Post on 06-Apr-2016
transcript
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 1
Bei Anruf: Fehler bereits behobenProaktive Fehlerbeseitigung ohne Kundenbeteiligung
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 2
Über uns...
TobiasGindler
SvenBunge
Die Holisticon AG ist eine Management- und IT-Beratung mit Sitz in Hamburg. Mit einem ganzheitlichen Beratungsansatz unterstützen wir unsere Kunden in ihren Entwicklungsprojekten auf technischer, taktischer wie auch strategischer Ebene.
http://blog.holisticon.deTwitter: @holisticon
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 3
Agenda
■ Motivation
■ Mögliche Fehlerquellen
■ … und wie man diese aufspürt
■ Verarbeitung von Logfiles
■ Implizites Logging
■ Alerting
■ Fragen und Diskussion
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 4
Motivation
■ Gesteigerte Komplexität in Softwaresystemen steigert auch Fehlerwahrscheinlichkeit
■ Fehler können nie mit Gewissheit ausgeschlossen werden.
■ In produktiver Umgebung sollte Fehler von Kunden unbemerkt bleiben
■ … und automatisiert erkannt und schnell behoben werden.
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 5
Beispiel 1: Benutzer erleben Fehler
■ Kunde besucht Onlineshop Kunde wählt Produkt Kunde meldet sich an / erstellt Konto Kunde gibt Zahlungsdaten ein
Beim Speichern tritt ein Fehler auf Kunde sieht Fehlerseite
■ Geschäftsabschluss findet nicht statt Dem Kunden ist klar, dass Kauf nicht stattgefunden hat
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 6
Beispiel 2: Benutzer bezahlen Fehler
■ Kunde besucht Onlineshop Kunde wählt Produkt Kunde meldet sich an / erstellt Konto Kunde gibt Zahlungsdaten ein Kunde bestätigt Kauf und sieht Kaufbestätigung
■ Geschäftsabschluss findet statt
■ Kauf wird nicht ins ERP System übertragen Kunde bezahlt Fehler ohne das Ware geliefert wird
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 7
Fehler sind ungemütlich im Geschäftsalltag
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 8
Vielfältige Fehlerquellen
Software / Implementierung
Daten
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 9
Bild durch Klicken auf Symbol hinzufügen
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 11
Fehler in der Anwendung
■ Software Programmierfehler Unklare / unvollständige Anforderungen Integrationsinkonsistenzen gegenüber externen Komponenten
■ Datenkonsistenz / -korrektheit Fehlerhafte Daten können zu unvorhersehbaren Systemverhalten führen Fehlerhafte Daten können durch Fehler in der Software und der Infrastruktur entstehen
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 12
Detektion von Software-Fehlern
■ Meldung durch den Endbenutzer
■ Überprüfung der persistenten Daten Konsistenz Anforderungen
■ Auswertung von Log-Dateien Access-Logs Anwendungsserverlogs
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 13
Log-Dateien
■ Sind technologieunabhängig
■ Ausgabe-Formate sind vielfältig
■ Müssen fortlaufend verbessert werden Hinzufügen fehlender Informationen Entfernung von Ausgaben ohne Mehrwert Optimierung der Log Level der Ausgabe
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 14
Große Systeme haben viele Log-Dateien
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 15
Bild durch Klicken auf Symbol hinzufügen
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 16
Aggregation von Logausgaben
■ Nicht aggregiert
■ Aggregiert
2014-10-05 23:13:30.813 [main] INFO holisticon.examples.TestClass - Hello World
2014-10-05 23:12:28.227 [main] INFO holisticon.examples.TestClient - [SESSION_ID] - [REQUEST_ID] - Hello World
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 17
Kontext-Propagation
Wie loggen wir eigentlich?
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 20
Explizites Logging
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 21
Implizites Logging
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 22
Ausgabe des impliziten Logging
■ n
IMPLICIT_EXCEPTION_LOGGER: { "errorMessage": { "message": "An error occurred while updating the customer" }, "invocationContext": { "className": "de.holisticon.examples.CustomerDao2", "methodName": "updateCustomer", "parameters": [{ "de.holisticon.examples.Customer": "Customer@7e14b389[id=10001,firstName='Max',lastName='Mustermann',version=1]"}] }, "throwable": { "message": "java.lang.IllegalArgumentException: org.hibernate.ObjectDeletedException: deleted instance passed to merge:", "stacktrace": "..." }}
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 23
Logging an den Komponentengrenzen
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 24
Beispiel - Webanwendung
■ Kunde erhält bei Eingabe von Zahlungsinformationen einen Fehler
■ Fehler wird im Log aufgezeichnet Identifikation über Session ID Request-ID als Klammer für Nutzerinteraktion Erweiterte Kontextinformationen
■ Kontextinformationen sind zum Beispiel URL mit Aufrufparameter / Payload SOAP / REST Kommunikation
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 25
Einschränkungen
■ Ausgabe Sicherheitskritischen Daten Komplexen Datenstrukturen Großen Datenmengen
■ Frameworkabhängige Einschränkungen JPA: Entitäten mit Relationen CDI: Injection
■ Zusammenspiel mit anderen Problemlösungen Beispiel: Fehlerseiten-Filter
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 27
Automatisierte Fehlererkennung / Alerting
■ Automatisierte Suche nach Fehlern und Schlüsselworten
■ Vergleich der gefundenen Fehler mit bereits aufgetretenen Fehlern Automatisierte Erstellung eines Tickets im Ticket System bei unbekannten Fehlern Erhöhung der Behebungspriorität im Ticket-System bei wiederholtem Auftreten Tickets enthalten Verlinkung auf Log-Servers mit vordefinierter Request ID und Session ID
■ Regelmäßige Erstellung von Fehlerreports und Fehlerstatistiken
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 28
TracEE
■ Kostenloses Java Framework
■ Open-Source, auf GitHub verfügbar
https://github.com/holisticon/tracee
■ Bereitstellung und Propagation von Session- und Request-Ids in verteilten Systemen
■ Leicht erweiterbar
■ Verwendete Techniken auf andere Technologie-Stacks übertragbar
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 29
TracEE – Implizites Logging
■ Implizites (Kontext-)Logging im Falle eines Fehlers
■ Unterstützt viele Java-Technologien
■ Leicht einzubinden
■ Log-Ausgaben flexibel konfigurierbar
■ Einfach erweiterbar
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 30
Zusammenfassung
Alerting des Logservers
Reproduktion durch Fehler-
Kontext
Bugfix
Kunden ermitteln / korrigieren
Kundenbeschwerde
Fehlerkorrektur
Bei Anruf: Fehler bereits behoben | Tobias Gindler & Sven Bunge | 31
Fragen und Diskussion