Konzept Logging
Diese Seite ist ein Teil der IsyFact-Standards. Alle Inhalte der Seite, insbesondere Texte und Grafiken, sind urheberrechtlich geschützt. Alle urheberrechtlichen Nutzungs- und Verwertungsrechte liegen beim Bundesverwaltungsamt.
Die Nutzung ist unter den Lizenzbedingungen der Creative Commons Namensnennung 4.0 International gestattet.
Java Bibliothek / IT-System
Name | Art | Version |
---|---|---|
|
Bibliothek |
v3.3.x |
1. Einleitung
Dieses Dokument beschreibt die konzeptionellen Grundlagen des Loggings in der IsyFact. Es adressiert die einheitliche Erstellung von Logs in den entwickelten Anwendungen sowie deren Auswertung. Es bildet damit die Grundlage der technisch und fachlich einheitlichen Umsetzung des Loggings in der gesamten Anwendungslandschaft und die davon abhängige effiziente Auswertung der Logeinträge.
Die daraus abgeleitete Umsetzung des Loggings im Rahmen einer Anwendungsentwicklung und die möglichen Auswertungen der Logs sind in den Nutzungsvorgaben Logging beschrieben. Zu beachten ist, dass die Nutzungsvorgaben an einen größeren Leserkreis gerichtet sind und einige Aspekte, sind nicht nur für das Logging-Konzept sondern auch für die Nutzungsvorgaben relevant. Um Redundanzen zu vermeiden, werden diese Aspekte alle in den Nutzungsvorgaben beschrieben und im vorliegenden Dokument darauf verwiesen.
2. Aufbau und Zweck des Dokuments
Ziel des Dokuments ist die Definition eines ganzheitlichen Standards für das Logging, von Erstellung (Inhalt und Ausgabe) der Logs durch die Systeme, über Verarbeitung der Logs durch die Infrastruktur, bis hin zur anwendungslandschaftsübergreifenden Auswertung der Logeinträge. Hierbei werden die Anforderungen von Betrieb, Test, Softwareentwicklungsreferat und Softwarelieferanten berücksichtigt.
Das Dokument ist entsprechend dieser Zielsetzungen in die folgenden Kapitel untergliedert:
Im Kapitel Anforderungen an das Logging werden die Zielsetzungen und Anforderungen an das Logging definiert, die die Grundlage für die nachfolgenden Kapitel bilden.
Im Kapitel Vorgaben zur Logerstellung werden die Vorgaben zur Erstellung der Logs innerhalb der Anwendungen gemäß der IsyFact definiert.
Im Kapitel Log Auswertung werden die Informationen beschrieben, die letztendlich im Auswertungstool zur Verfügung stehen und damit die Grundlagen zur Durchführung von Analysen darstellen.
Im Kapitel Anhang: Logging Glossar werden die Begriffe und Abkürzungen definiert, die spezifisch für das Themenfeld „Logging“ sind.
Abgrenzung
Logging ist ein querschnittliches Thema einer Anwendungslandschaft mit Schnittstellen zu zahlreichen weiteren Themen. Folgende Abgrenzungen werden dabei getroffen:
-
In diesem Dokument werden die Grundlagen geschaffen, um eine effiziente Auswertung der Logs zu ermöglichen. Die eigentliche Auswertung mit Hilfe von Analysetools ist nicht Teil des Dokuments.
-
Konfiguration von Drittsystemen: Die Konfiguration des Loggings von Systemen, die nicht mit der IsyFact entwickelt wurden (bspw. Apache Webserver, Apache Tomcat, Mailserver), wird in den Konzepten der einzelnen Systeme adressiert. Das Logging-Konzept definiert jedoch, welche Informationen durch die einzelnen Systeme bereitgestellt werden (Kapitel Log Auswertung).
-
Monitoring, Logging, Protokollierung: Unter „Logging“ wird in diesem Dokument „Logging zu technischen Zwecken“ verstanden.
Die Protokollierung behandelt das Mitschreiben von Informationen zu durchgeführten Geschäftsvorfällen auf Grund fachlicher Anforderungen.
Das Monitoring zur betrieblichen Überwachung der Anwendungslandschaft und frühzeitigen Eskalation von Problemen ist im Konzept Überwachung beschrieben.
In folgender Tabelle werden die drei verschiedenen Disziplinen detailliert voneinander abgegrenzt:
Logging | Monitoring/Überwachung | Protokollierung | |
---|---|---|---|
erfasst werden |
Anwendungszustände, Fehlermeldungen |
Anwendungszustände, Fehlermeldungen |
Aktionen innerhalb der Anwendung |
wo erfasst |
Log-Server |
zentrales Monitoring System, z.B. Nagios |
Datenbank Protokollrecherche |
Auswertung erfolgt |
kontinuierlich |
kontinuierlich |
bei Verdacht auf security incident |
Auswerteart |
automatisch - inklusive Korrelation von Ereignissen und ggf. Meldung an Überwachungs-System anlassbezogen - Prüfung einzelner Logdateien bei Störung oder Verdacht auf security incident |
automatisch - inklusive Alarmierungsfunktionen |
nur manuell |
Einschränkung der Auswertung auf |
Administratoren |
Administratoren |
dedizierte Fachadministratoren der Protokollrecherche |
Zielsetzung |
zeitnahe Feststellung von Störungen und potentiellen Angriffen |
Überwachung des Betriebszustands der Anwendungen plus Alarmierung bei Störungen |
Nachvollziehbarkeit, Vorfallsaufklärung |
3. Anforderungen an das Logging
Im Folgenden werden die Ziele und Anforderungen an das Logging definiert. Diese bilden die Grundlage für die Ausgestaltung des Loggings in den darauffolgenden Kapiteln.
Anforderungen an die Log-Inhalte und deren Auswertungsmöglichkeiten
-
Erkennen, Behandeln und Beheben von Fehlern:
-
Fehlererkennung: Sämtliche technischen Ausnahmen müssen erkannt werden können und in den Logs hinterlegt werden.
-
Fehlereskalation: Für jeden Fehler muss klar ersichtlich sein, wie schwerwiegend er ist, durch welche IT-Komponente er ausgelöst wurde und durch wen (welche Nutzergruppe – bspw. Betrieb, Entwicklungsabteilung etc.) er zu behandeln ist.
-
Fehleranalyse: Es müssen Informationen zur Ermittlung der Fehlerursache – im jeweils benötigten Detaillierungsgrad – verfügbar sein.
-
-
Analyse und Nachvollziehen von Systemereignissen und des Systemzustands:
-
Systemereignisse und –zustand (Beschreibung der Systemereignisse): Wichtige Systemereignisse und Zustände müssen nachvollzogen werden können.
-
Systemengpässe / Laufzeiten: Systemengpässe müssen erkannt werden können. Dazu müssen Laufzeiten relevanter Operationen zur Verfügung gestellt werden.
-
Erkennen von Anomalien: Anomalien sowohl im Nutzungs- als auch im Systemverhalten müssen erkannt werden können. Dies beinhaltet auch die Anforderung der Erkennung von kritischen Aktivitäten, die durch Anomalien aufgedeckt werden können (bspw. Logins außerhalb der Geschäftszeiten).
-
Ermitteln von technischen Nutzungsstatistiken: Es müssen technische Nutzungsstatistiken (bspw. Anzahl der Aufrufe einer bestimmten Schnittstelle oder Komponente) ermittelt werden können.
-
-
Weitere systemspezifische Auswertungen: Für jedes System können weitere systemspezifische Anforderungen an die Auswertbarkeit der Logs definiert werden, das Logging muss hierfür entsprechende Erweiterungsmöglichkeiten vorsehen.
Anforderungen an die Logausgabe und das Logging-Framework
-
Technische Vereinheitlichung des Loggings: Das Logging muss in allen Systemen, die gemäß der IsyFact entwickelt werden, technisch einheitlich umgesetzt werden. Dies umfasst die folgenden Teilaspekte:
-
Einheitliche Strukturierung der Ausgaben: Ausgaben werden in einer fest vorgegebenen strukturierten Form erstellt, um die einheitliche Verarbeitung und Auswertung der Einträge zu gewährleisten.
-
Einheitliche Logging-Konfiguration: Die Logger in allen Anwendungen werden mit den gleichen technischen Mitteln konfiguriert.
-
Anpassung der Logging-Konfiguration zur Laufzeit (ohne Neustart der Anwendung): Anpassung der Konfiguration im Testsystem zur Laufzeit der Anwendung und Anpassung der Log-Level in der Produktionsumgebung bei Bedarf.
-
Keine Abhängigkeit zwischen Anwendungen: Jede Anwendung besitzt eigene Logdateien und eigene Mechanismen zum Schreiben der Logs. Es gibt keine gemeinsam genutzten Logdateien und keine zentrale Anwendung zum Erstellen der Logs.
-
Eindeutige Zuordnung von Logdateien: Logdateien müssen eindeutig einer Anwendung zugeordnet werden können.
-
Es wird nur ein Logging-Framework verwendet: Alle Anwendungen müssen das gleiche Logging-Framework verwenden.
-
Minimale Auswirkungen auf Performanz: Das Logging darf die Performanz der Anwendung nur minimal beeinträchtigen.
-
Anforderungen an die Log-Infrastruktur
-
Aufbau einer zuverlässigen und effizienten Log-Infrastruktur
-
Einfache Backupmöglichkeit: Es muss ein einfaches Backup der Logs durch den Betrieb sichergestellt werden.
-
Zentraler Auswertungsserver: Zur einfachen Auswertung der Logeinträge wird ein zentraler Auswertungsserver eingesetzt.
-
(Nahezu) Echtzeit-Auswertung: Die Auswertung der Logs (im Auswertungsserver) muss nahezu in Echtzeit erfolgen können.
-
Datenschutz: Falls fachliche Daten in den Logs enthalten sind, so müssen diese gemäß ihrem Schutzbedarf behandelt werden.
-
Robustheit: Ein Ausfall der Log-Infrastruktur darf keine Auswirkungen auf Anwendungen haben. Es dürfen keine Logs verloren gehen.
-
Automatisierte Auswertung: Die Log-Infrastruktur muss Logs automatisiert auswerten und daraus Aktionen ableiten können, z.B. zur Alarmierung.
-
Anforderungen an die Umsetzung
-
Komplexität
-
Möglichst geringer Aufwand: Der Aufwand zur Umsetzung des Loggings im Rahmen der Anwendungsentwicklung muss möglichst geringgehalten werden.
-
4. Vorgaben zur Logerstellung
In diesem Abschnitt werden sämtliche Aspekte zur Erstellung von Logeinträgen – dem eigentlichen „Logging“ – in den Anwendungen betrachtet und einheitliche Vorgaben definiert. Dabei findet eine Standardisierung auf Ebene der Inhalte der Logs (Log-Inhalte), der Ausgabe der Logs (Logausgabe) und des eingesetzten Logging-Frameworks (Logging-Framework) statt.
4.1. Log-Inhalte
Die Inhalte der Logeinträge sind standardisiert, um eine effiziente Auswertung der Logs zu ermöglichen. Ein Logeintrag ist dabei wie eine fachliche Entität des Loggings, mit klar definierten Attributen zu verstehen – analog zu einer persistenten Entität des fachlichen Datenmodells einer Anwendung.
4.1.1. Entitäten
Um zu verdeutlichen, dass es sich bei Logeinträgen um Entitäten – und nicht einfach nur einen „Freitext“ – handelt, wird der Inhalt eines Logeintrags in Abbildung 1 in Form von Entitäten dargestellt.
Jeder Logeintrag muss gewisse Standardinformationen enthalten. Diese sind in der Entität ETY_Logeintrag zusammengefasst. Je nach Zweck des Eintrags müssen jedoch noch weitere auswertbare Informationen (bspw. die Verarbeitungszeit eines Aufrufs) hinterlegt werden. Dies geschieht in Form von Markern (ETY_Marker), die eine generische Ergänzung des Logeintrags um Name/Wert-Paare ermöglichen.
Die Inhalte der Entitäten werden im Folgenden beschrieben.
4.1.1.1. ETY_Logeintrag
Kurzbeschreibung |
Dieser Entitätstyp enthält Informationen eines geloggten Ereignisses. |
Feld | Datentyp | Bedeutung |
---|---|---|
ATT_System-ID |
DTY_System-ID |
Eindeutige Identifikation des Systems, durch das der Logeintrag erstellt wurde. |
ATT_Host-ID |
DTY_Host-ID |
Eindeutige Identifikation des Hosts, auf dem das System betrieben wird, durch das der Logeintrag erstellt wurde. |
ATT_Thread |
DTY_Zeichenkette |
Name des Threads (bspw. |
ATT_Logger |
DTY_Zeichenkette |
Name des Loggers (absoluter Pfad der Klasse). |
ATT_Zeitstempel |
DTY_Zeitstempel |
Zeitpunkt der Erstellung des Logeintrags. |
ATT_Korrelations-ID<1..n> |
DTY_Korrelations-ID |
Korrelations-ID des Aufrufs (siehe Korrelations-ID) |
ATT_Level |
DTY_Log-Level |
Log-Level, welches dem Logeintrag zugeordnet wird (siehe Log-Level, Log-Kategorie und Ereignisschlüssel). |
ATT_Kategorie |
DTY_Log-Kategorie |
Kategorisierung des Logeintrags in Bezug auf dessen Zweck. (siehe Log-Level, Log-Kategorie und Ereignisschlüssel). |
ATT_Ereignisschlüssel |
DTY_ Ereignisschlüssel |
Eindeutige Identifikation des Ereignisses und dem damit verbundenen Zweck der Erstellung des Logeintrags (siehe Log-Level, Log-Kategorie und Ereignisschlüssel). |
ATT_Nachricht |
DTY_Zeichenkette |
Nachricht, welche das Ereignis des Logeintrags menschenlesbar beschreibt (siehe Nachricht). |
ATT_Enthaelt_fachliche_Daten |
DTY_Wahrheitswert |
Wahrheitswert, der angibt, ob der Logeintrag datenschutzrelevante Daten (vgl. Datenschutz) enthält. |
4.1.1.2. ETY_Marker
Kurzbeschreibung |
Dieser Entitätstyp ermöglicht es, dem Logeintrag weitere Attribute in Form von Name/Wert-Paaren hinzuzufügen. |
Feld | Datentyp | Bedeutung |
---|---|---|
ATT_Name |
DTY_Zeichenkette |
Bezeichnung des Markers. |
ATT_Wert |
DTY_Zeichenkette |
Wert des Markers |
4.1.1.3. Datentypen
Kurzbeschreibung |
Die Attribute von den Entitäten ETY_Logeintrag und ETY_Marker werden aus diesen Datentypen ausgewählt. |
Datentyp | Basistyp | Bedeutung | Wertebereich |
---|---|---|---|
DTY_System-ID |
Zeichenkette |
Eindeutige Identifikation eines Systems. |
Bspw.: |
DTY_Host-ID |
Zeichenkette |
Eindeutige Identifikation eines Hosts/Servers. |
Bspw.: |
DTY_Zeitstempel |
Datum |
Zeitpunkt. |
ISO8601-Format inklusive Zeitzone: Bspw.: |
DTY_Korrelations-ID |
Zeichenkette |
Eindeutige Identifikation eines Aufrufs über Anwendungsgrenzen hinweg (siehe Korrelations-ID) |
Liste von UUIDs mit optionalen Präfixen (siehe Korrelations-ID). |
DTY_Log-Level |
Enum |
Kategorie eines Logeintrags in Bezug auf Wichtigkeit (siehe Log-Level, Log-Kategorie und Ereignisschlüssel). |
|
DTY_Log-Kategorie |
Enum |
Kategorie eines Logeintrags in Bezug auf Zweck (siehe Log-Level, Log-Kategorie und Ereignisschlüssel). |
|
DTY_Ereignisschlüssel |
Zeichenkette |
Eindeutige Identifikation des Zwecks eines Logeintrags (siehe Log-Level, Log-Kategorie und Ereignisschlüssel). |
Bspw.: |
DTY_Zeichenkette |
Zeichenkette |
Frei wählbare Zeichenketten. |
UTF-8 Zeichenkette |
DTY_Wahrheitswert |
Wahrheitswert |
Ein Wahrheitswert kann genau zwei Zustände annehmen: „true“ oder „false“. |
|
4.1.2. Log-Level, Log-Kategorie und Ereignisschlüssel
Log-Level, Log-Kategorie und Ereignisschlüssel werden in dem Dokument Logging - Nutzungsvorgaben beschrieben.
4.1.3. Korrelations-ID
Die Korrelations-ID ist immer mitzuloggen, damit die Logeinträge einzelnen Aufrufen zugeordnet und über die Komponenten der Anwendungslandschaft verfolgt werden können. Die Korrelations-ID besteht aus einer Liste von IDs. Jede ID besteht ihrerseits wiederum aus einem UUID sowie einem optionalen Präfix. Die Korrelations-ID enthält die einzelnen IDs in der Reihenfolge, in der sie erzeugt wurden. Somit ist die letzte ID der Korrelations-ID stets die des aktuellen Systemaufrufs.
UUID: Universally Unique Identifier |
Eine exemplarische Korrelations-ID ist demnach (als JSON-Array formatiert):
{"c15638a2-4c38-4d18-b887-5ebd2a1c427d",
"f60143b3-3408-4501-9947-240ec1c48667",
"BATCH-c893d44f-3b8e-446e-a360-06a520440e64"}
4.1.4. Nachricht
Die Nachricht enthält eine menschenlesbare Beschreibung des eingetretenen Logereignisses. Diese ist dann relevant, wenn die Logeinträge unverarbeitet durch einen (menschlichen) Anwender ausgewertet werden, was insbesondere bei der Fehleranalyse der Fall ist.
Die Nachrichten sind so weit wie möglich zu vereinheitlichen. Dazu werden in dem Dokument Logging - Nutzungsvorgaben klare Vorgaben definiert, welche Nachrichten in welcher Situation zu erstellen sind.
4.1.5. Datenschutz
Datenverarbeitung im Auftrag – auch Auftragsdatenverarbeitung (ADV) genannt – bezeichnete in Deutschland die Erhebung, Verarbeitung oder Nutzung personenbezogener Daten durch einen Dienstleister im Auftrag des Verantwortlichen. Seit Inkrafttreten der DSGVO regelt Artikel 28 der DSGVO die Verarbeitung im Auftrag. Artikel 28 verweist wiederum auf Artikel 32 der DSGVO, in dem eine Pseudonymisierung und Verschlüsselung personenbezogener Daten gefordert wird. Für die Weitergabe von Log Dateien an Auftragsverarbeiter (Entwickler) bedeutet das konkret, dass personenbezogene Daten nur pseudonymisiert weitergegeben werden dürfen.
Ausnahme: Sollten die datenschutzrechtlich- oder sicherheitsrelevanten Daten zur Analyse zwingend notwendig sein – bspw., wenn fachlich fehlerhafte Daten zu technischen Fehlern führen – dürfen diese Daten im dafür notwendigen Maße mitgeschrieben werden. Die entsprechenden Logeinträge müssen durch einen Marker markiert werden, damit sie durch die Loginfrastruktur gesondert behandelt werden können. Die Daten dürfen nur so lange aufbewahrt werden, wie es für die Analyse der Daten zwingend erforderlich ist.
4.2. Logausgabe
In diesem Abschnitt werden sämtliche Aspekte zur Ausgabe der Logeinträge betrachtet und für die IsyFact standardisiert. Dies umfasst die Definition des Formats der einzelnen Logeinträge (Logformat), die Ablage der Einträge in Logdateien (Logdateien, Log-Rotation und Komprimierung).
4.2.1. Logformat
Die Logeinträge werden im JSON-Format ausgegeben. Dies hat den Vorteil, dass die Einträge dadurch sehr einfach maschinell verarbeitet werden können und der Umfang der erzeugten Datenmengen (bspw. im Vergleich zu XML) reduziert wird. Die „Menschenlesbarkeit“ der erstellten Einträge wird durch die Verwendung von JSON leicht eingeschränkt, dies ist aber akzeptiert, da eine Aufbereitung der Logeinträge durch die Log-Infrastruktur stattfindet (siehe Kapitel Log-Auswertung).
Jedes Attribut eines Logeintrags wird in einem entsprechenden JSON Name/Wert-Paar abgelegt. Attributnamen werden dabei komplett in Kleinbuchstaben und ohne Sonderzeichen geschrieben. Im Folgenden wird ein exemplarischer Logeintrag dargestellt, ergänzt um Leerzeichen und Zeilenumbrüche um die Lesbarkeit zu erhöhen:
{
"zeitstempel" : "2014-03-04T12:27:27.943",
"systemid" : "Systemxyz",
"hostid" : "appserver01",
"thread" : "main",
"logger" : "x.y.HelloWorldZ",
"korrelationsid" : {"c15638a2-4c38-4d18-b887-5ebd2a1c427d","BATCH-c893d44f-3b8e-446e-a360-06a520440e64"},
"level" : "INFO",
"kategorie" : "PROFILING",
"logschluessel" : "LISYLO01001",
"nachricht" : "Aufruf des Nachbarsystems XYZ in 10 ms beendet.",
# Zusätzliche Marker:
"dauer" : "10"
}
Zu beachten ist, dass durch das Logging-Framework sichergestellt wird, dass nur fest definierte Marker in den Logeintrag aufgenommen werden. Die Vergabe „beliebiger“ Marker ist nicht möglich, so dass ein Namenskonflikt zwischen Marker und den anderen Attributen des Eintrags ausgeschlossen ist.
Ein tatsächlicher Logeintrag (ohne zusätzliche Leerzeichen und Zeilenumbrüche) sieht demnach wie folgt aus:
{"zeitstempel":"2014-03-04T12:27:27.943","systemid":"Systemxyz","hostid":"appserver01","thread":"main","logger":"x.y.HelloWorldZ","korrelationsid":{"c15638a2-4c38-4d18-b887-5ebd2a1c427d","BATCH-c893d44f-3b8e-446e-a360-06a520440e64"},"level":"INFO","kategorie":"PROFILING","logschluessel":"LISYLO01001","nachricht":"Aufruf des Nachbarsystems XYZ in 10 ms beendet.","dauer" :"10"}
4.2.2. Logdateien, Log-Rotation und Komprimierung
Die Vorgaben zu Logdateien sowie deren Rotation und Komprimierung sind in den Nutzungsvorgaben Logging beschrieben.
4.3. Logging-Framework
Als Logging-Framework wird in der IsyFact logback eingesetzt (siehe Produktkatalog).
Für mehr Informationen zu logback siehe http://logback.qos.ch/ |
Die Nutzung und Konfiguration von isy-logging
sind in dem Dokument Logging - Nutzungsvorgaben beschrieben.
Im Folgenden werden die grundlegenden Aspekte der Implementierung von isy-logging
beschrieben.
4.3.1. Logging-Fassade
isy-logging
stellt eine Fassade zum Zugriff auf logback bzw. auf dessen Schnittstellen, die durch das allgemeine Framework SLF4J definiert werden, bereit.
Wichtig ist, dass durch isy-logging
selbst SLF4J nicht implementiert wird.
Dies wird aus zwei Gründen nicht gemacht:
-
Durch die Bereitstellung einer proprietären Schnittstelle können die spezifischen Anforderungen an das Logging besser umgesetzt werden (Verwendung spezifischer Attribute an den Schnittstellen).
-
Es soll nur eine einzige SLF4J-Implementierung eingesetzt werden. Die Verwendung von zwei verschiedenen SLF4J-Implementierungen in einer Anwendung ist zwar möglich, führt jedoch zu einer komplexeren und fehleranfälligeren Konfiguration. Zudem ist durch die gewählte Architektur der Austausch von logback mit einer anderen SLF4J Implementierung auch weiterhin sehr einfach möglich. Es könnte sogar auf eine komplett neue Logging-Schnittstelle (hinter der Fassade) gewechselt werden, ohne dass der Anwendungscode angepasst werden muss.
In Abbildung 2 ist eine Übersicht der Implementierung der Fassade dargestellt.
Die Klassen der Fassade sind in Tabelle 4 beschrieben.
Klasse | Beschreibung |
---|---|
IsyLoggerFactory |
Factory zum Erstellen einer Instanz der Klasse Sie nutzt das Interface |
IsyLogbackLoggerImpl |
Logger-Fassade, um Logeinträge zu erstellen. Die Klasse besitzt eine Referenz auf eine Instanz des eigentlichen Loggers (Klasse Die bereitgestellten Methoden werden durch das Interface |
IsyMarker |
Implementierung des Interface Marker, welches durch SLF4J definiert wird. Die Klasse wird durch den |
4.3.1.1. IsyLogger
Das Interface IsyLogger stellt Methoden zum Erstellen von Logeinträgen bereit. Es ist in Abbildung 3 dargestellt.
Das Interface wird in dem Dokument Logging - Nutzungsvorgaben detailliert beschrieben.
Implementiert wird das Interface durch die Klasse IsyLoggerImpl
.
Eingehende Aufrufe werden dabei an den SLF4J-Logger delegiert.
Die zusätzlich definierten Parameter (Object…) werden in Form von Markern (jeder Marker beschreibt dabei ein Name/Wert-Paar) an den Logger übergeben.
Grundsätzlich ermöglicht es SLF4J jeweils nur einen Marker zu übergeben.
Marker können jedoch aneinandergehängt werden (Methode add am Marker), so dass ein Marker über diesen Weg weitere Marker enthalten kann.
4.3.2. Log-Aufbereitung
Zur Aufbereitung der Logeinträge im JSON-Layout (Siehe Kapitel Logformat) steht die Klasse IsyJsonLayout
zur Verfügung.
Diese erweitert die Klasse JsonLayout
von logback um die Auswertung der IsyMarker
.
Wird ein entsprechender Marker übergeben, so schreibt die Klasse diesen und alle enthaltenen Marker als Name/Wert-Paare (JSON-Attribute) in das Log.
Die zusätzliche Inhalte, die mithilfe von IsyMarker gespeichert werden, werden im Abschnitt Zusätzliche Inhalte mit isy-logging beschrieben.
In Abbildung 4 ist das Zusammenspiel der verschiedenen Klassen zur Aufbereitung der Logeinträge dargestellt.
4.3.3. Hilfsklassen
isy-logging
stellt zwei Hilfsklassen zur Erstellung von Logeinträgen bereit, um die Umsetzung der in dem Dokument Logging - Nutzungsvorgaben definierten Szenarien an die Logerstellung zu vereinfachen.
Diese sind in Abbildung 5 dargestellt.
Die Klasse LogInterceptor
dient dabei als Hilfsklasse, um verschiedene Informationen zu Methodenaufrufen zu loggen und wird per Spring-AOP konfiguriert.
Die Klasse LogApplicationListener
dient dem Loggen von wichtigen Systemereignissen und wird als Spring-Bean konfiguriert.
Die Informationen zur Konfiguration und Verwendung der beiden Klassen sind in dem Dokument Logging - Nutzungsvorgaben beschrieben und werden an dieser Stelle nicht wiederholt.
4.3.4. Logging externer Bibliotheken
Logback wird als einzige Implementierung von SLF4J eingesetzt (IsyLoggerFactory
implementiert das Interface LoggerFactory
von SLF4J nicht). Externe Bibliotheken, die SLF4J oder logback nutzen und in die Anwendung eingebunden werden, nutzen dadurch direkt die LoggerFactory
und damit auch den Logger
, der durch logback bereitgestellt wird.
Dies ist ohne Einschränkungen möglich, da die Vereinheitlichung der Logeinträge durch das IsyJsonLayout
auch in diesem Fall durchgeführt wird.
Für Frameworks, die weder logback noch SLF4J nutzen, werden durch SLF4J entsprechende „Bridging Modules“ bereitgestellt, durch die die Aufrufe des Logging-Frameworks auf SLF4J (bzw. logback) umgeleitet werden können.
Diese sind zu verwenden, so dass die Erstellung der Logeinträge ausschließlich durch logback erfolgt.
Die Nutzung der Bridges ist in dem Dokument Logging - Nutzungsvorgaben) beschrieben.
5. Log-Auswertung
In diesem Kapitel werden die Informationen beschrieben, die letztendlich im Auswertungstool zur Verfügung stehen, und damit die Grundlage zur Durchführung von Analysen darstellen. In den einzelnen Unterabschnitten werden die verschiedenen Logdateien aufgeführt, die an die Log-Infrastruktur anzubinden sind. Wichtig ist, dass die Logeinträge der Systeme der Log-Infrastruktur selbst, auch in die Auswertung einfließen müssen, um Probleme bei der Verarbeitung der Logs zu erkennen.
Konkrete Szenarien zur Auswertung der Logeinträge sind in dem Dokument Logging - Nutzungsvorgaben beschrieben.
5.1. Allgemeine Hinweise
In diesem Abschnitt werden allgemeine Hinweise und Besonderheiten zur Auswertung der Logs aufgeführt.
5.1.1. Kein Log-Level FATAL in den Logs
Wie in dem Dokument Logging - Nutzungsvorgaben beschrieben, besitzen SLF4J und logback kein Log-Level FATAL. Log-Einträge im Level FATAL und ERROR erscheinen in den Logs beide im Level ERROR, können aber an Hand der Kategorie (FATAL oder ERROR) unterschieden werden:
-
Log-Level ERROR: {"level":"ERROR", "kategorie":"ERROR", …}
-
Log-Level FATAL: {"level":"ERROR", "kategorie":"FATAL", …}
5.2. Allgemeine Inhalte jedes Logeintrags
Die folgenden Attribute werden automatisch durch logstash gesetzt und sind in jedem Event enthalten:
Attribut | Beschreibung | Format / Beispiel |
---|---|---|
path |
Absoluter Pfad der Datei, aus welcher der Logeintrag gelesen wurde. |
|
5.3. Zusätzliche Inhalte mit isy-logging
Durch die Anwendungen geloggte Attribute werden durch die Entität ETY_Logeintrag
beschrieben. Die zusätzliche Attribute werden durch ETY_Marker
beschrieben (Siehe Entitäten).
Zusätzlich erhält man die Attribute: parameter
und gekuerzt
.
Darüber hinaus werden beim Einsatz von LoggingMethodInvoker
und LoggingMethodInterceptor
die Attribute methode
und dauer
gesetzt.
Attribut | Beschreibung | Format / Beispiel |
---|---|---|
parameter<1..n> |
Parameter, die zur Ersetzung der Platzhalter in der Lognachricht übergeben wurden |
|
gekuerzt |
Informiert über die Kürzung eines Logeintrags. Das Attribut wird gesetzt, wenn der Logeintrag die maximale Länge eines Logeintrags überschritten hatte und aus diesem Grund gekürzt wurde.
Das Attribut wird in diesem Fall immer auf den Wert Die Kürzung eines zu langen Logeintrags findet auf Attributebene in folgender Reihenfolge statt: Kürzung von Parameter (bereits in Nachricht enthalten), Exception, Nachricht.
Es werden nur Logeinträge der Levels Nähere Informationen zur Festlegung der maximalen Länge von Logeinträgen finden sich in dem Dokument Logging - Nutzungsvorgaben. |
|
methode |
Vollständige Signatur einer aufgerufenen Methode. Das Attribut wird beim Loggen eines Methodenaufrufs mit den Hilfsklassen |
|
dauer |
Dauer eines Methodenaufrufs. Das Attribut wird beim Loggen der Dauer eines Methodenaufrufs mit den Hilfsklassen |
|
5.4. Tomcat access-log
Die Logeinträge der Tomcat access-logs, die konform zur IsyFact konfiguriert sind, stellen neben der Lognachricht die folgenden Informationen bereit:
Bestandteil | Beschreibung | Format / Beispiel |
---|---|---|
|
Remote Hostname bzw. IP-Adresse, falls der Hostname nicht verfügbar ist |
Beispiel: |
|
Der Thread-Name über den der Request verarbeitet wird |
Beispiel: |
|
Der Remote Benutzername |
|
|
Datum und Uhrzeit |
02/Feb/2012:00:02:50Z |
|
Datum und Uhrzeit im ISO-8601 Format |
2012-02-02T00:02:50.000Z |
|
Erste Zeile des Request. Hieraus ist ersichtlich, ob es eine GET/POST ist, welche URI aufgerufen wurde und welches Protokoll verwendet wurde |
|
|
HTTP-Status Code des Response |
Beispiel: |
|
Anzahl der Bytes |
Ganzzahl |
|
Name des Threads, durch den der Logeintrag erstellt wurde. |
Beispiel: |
|
Verarbeitungszeit in Millisekunden |
Ganzzahl |
|
Die vom Apache generierte Correlation-ID. Diese wird von mod_jk im Request mitgeliefert. |
24 Zeichen. Beispiel: |
|
Im Request von mod_jk wird der Name des Apaches geliefert, über den die Anfrage verarbeitet wurde. |
Beispiel: |
5.5. Wrapper-Log
Die Wrapper-Logs sind Teil des Drittsystems Tomcat (siehe Tanuki Service Wrapper im Produktkatalog). Die Logeinträge des Wrapper-Logs, die konform zur IsyFact konfiguriert sind, stellen neben der Lognachricht die folgenden Informationen bereit:
Bestandteil | Beschreibung | Format / Beispiel |
---|---|---|
|
Datum und Uhrzeit im Original des Logeintrags |
2014/10/14 11:40:27.630 |
|
Datum und Uhrzeit im ISO-8601 Format |
2012-02-02T00:02:50.000Z |
|
Präfix des Logeintrags. |
Beispiel: |
|
Log-Level analog zu analog zu Entitäten |
Beispiel: |
5.6. Apache access-log und error-log
Da der Apache HTTP-Server ein anderes Format für Zeitstempel verwendet, werden folgende Felder durch die Log-Infrastruktur geändert bzw. ergänzt:
Bestandteil | Beschreibung | Format / Beispiel |
---|---|---|
|
Datum und Uhrzeit, des ursprünglichen Felds |
12/Feb/2012:00:02:50 +0000 |
|
Datum und Uhrzeit im ISO-8601 Format |
2012-02-02T00:02:50.000Z |
Wichtig: In den Apache-Logs werden die aufgerufenen URLs inkl. Requestparameter gelogged. Sollten die Requestparameter fachliche Daten enthalten (bspw. weil Suchanfragen über einen REST-Webservice realisiert wurden), so sind alle Apache-Logs des jeweiligen Webservers als „Fachdaten“ zu kennzeichnen (siehe Logging - Nutzungsvorgaben).
5.7. Mailserver-log
Die Logs des Mailservers stellen neben der Lognachricht, die folgenden Informationen bereit:
Bestandteil | Beschreibung | Format / Beispiel |
---|---|---|
|
Datum und Uhrzeit im Original des Logeintrags |
Dec 12 10:03:28 |
|
Identifikation des Mailservers |
|
5.8. logstash-log
Logstash stellt neben der Lognachricht, die folgenden Informationen bereit:
Bestandteil | Beschreibung | Format / Beispiel |
---|---|---|
|
Datum und Uhrzeit im Original des Logeintrags |
2014-12-11T12:18:19.580000Z |
|
Datum und Uhrzeit im ISO-8601 Format |
2012-02-02T00:02:50.000Z |
|
Log-Level analog zu analog zu Abschnitt Kein Log-Level FATAL in den Logs |
Bspw.: |
6. Anhang A: Logging - Glossar
Begriff | Erläuterung | Synonym(e) oder Übersetzung(en) |
---|---|---|
Log |
Speicherort (Datenbank, Datei, Log-Server) der aufgezeichneten Ereignisse. |
|
Log-Aufbereitung |
Mechanismus innerhalb des Logging-Frameworks zur Umwandlung des Logeintrags in ein bestimmtes Format (bspw. JSON). |
Log-Layout |
Log-Auswertung |
Analyse und Bewertung der in den Logeinträgen enthaltenen Informationen. |
|
Log-Infrastruktur |
IT-Systeme und Mechanismen, die zur Verteilung, Verarbeitung, Auswertung und Archivierung der erstellten Logdateien eingesetzt werden und deren Zusammenspiel untereinander |
|
Log-Inhalte |
Definition der Informationen, die in die Logs geschrieben werden. |
|
Log-Kategorie |
Klassifizierung eines Logeintrags im Hinblick auf dessen Zweck (FEHLERANZEIGE, PROFILING, JOURNAL etc.). |
|
Log-Level |
Klassifizierung eines Logeintrags im Hinblick auf dessen Wichtigkeit (FATAL, ERROR, WARN, INFO, DEBUG, TRACE). |
|
Log-Quelle |
Knoten (System oder Datei) in der Log-Infrastruktur, aus dem Log-Einträge gelesen werden. |
|
Log-Rotation |
Zeit- oder größenbasiertes „rotieren“ von Logdateien. „Rotieren“ bedeutet hierbei, dass die vorhandene Datei verschoben bzw. umbenannt (i.d.R. mit einem Index oder Zeitstempel versehen) und eine neue Logdatei begonnen wird. |
|
Ereignisschlüssel |
Eindeutige Identifikation des Ereignisses und dem damit verbundenen Zweck, auf Grund dessen ein Logeintrag im Log-Level INFO erstellt wurde. |
|
Log-Ziel |
Knoten (System oder Datei) in der Log-Infrastruktur, in den Log-Einträge geschrieben werden. |
|
Logausgabe |
Sammelbegriff für alle Mechanismen und Vorgaben der Ausgabe (Format, Medium etc.) von Logeinträgen in einer Anwendung. |
|
Logdatei |
Datei, in die die aufgezeichneten Ereignisse geschrieben werden. |
|
Logeintrag |
Entität des Logs. Beim Aufzeichnen eines Ereignisses wird ein einzelner abgeschlossener Logeintrag geschrieben. |
|
Logerstellung |
Sammelbegriff für alle Mechanismen und Vorgaben der Erstellung von Logeinträgen in einer Anwendung (Log-Inhalte, Logausgabe und Logging-Framework). |
|
Logformat |
Format/Struktur in der die Logeinträge abgelegt werden. |
|
Logging |
Aufzeichnung von Ereignissen eines Systems zur Analyse von System-, Nutzerverhalten oder Systemzuständen. |
|
Logging-Framework |
Framework, welches zum Schreiben der Logeinträge innerhalb der Anwendungen verwendet wird (bspw. logback). |
|
Lognachricht |
Menschenlesbare Nachricht, welches ein geloggtes Ereignis näher beschreibt. Fester Bestandteil jedes Logeintrags. |
|
Protokollierung |
Mitschreiben von Informationen zu durchgeführten Geschäftsvorfällen auf Grund fachlicher Anforderungen. |
|
Monitoring |
Betriebliche Überwachung der Anwendungslandschaft zur frühzeitigen Eskalation von Problemen. |
Überwachung |