Konzept Logging: Inhalt

1. 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:

    1. Fehlererkennung: Sämtliche technischen Ausnahmen müssen erkannt werden können und in den Logs hinterlegt werden.

    2. 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.

    3. 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:

    1. Systemereignisse und –zustand (Beschreibung der Systemereignisse): Wichtige Systemereignisse und Zustände müssen nachvollzogen werden können.

    2. Systemengpässe / Laufzeiten: Systemengpässe müssen erkannt werden können. Dazu müssen Laufzeiten relevanter Operationen zur Verfügung gestellt werden.

    3. 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).

    4. 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.

2. 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.

2.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.

2.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.

ETYlogmark
Abbildung 1. ETY_Logeintrag und ETY_Marker

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.

2.1.1.1. ETY_Logeintrag

Kurzbeschreibung

Dieser Entitätstyp enthält Informationen eines geloggten Ereignisses.

Tabelle 1. Inhalte eines Logeintrags
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. main).

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.

2.1.1.2. ETY_Marker

Kurzbeschreibung

Dieser Entitätstyp ermöglicht es, dem Logeintrag weitere Attribute in Form von Name/Wert-Paaren hinzuzufügen.

Tabelle 2. Inhalte eines Markers
Feld Datentyp Bedeutung

ATT_Name

DTY_Zeichenkette

Bezeichnung des Markers.

ATT_Wert

DTY_Zeichenkette

Wert des Markers

2.1.1.3. Datentypen

Kurzbeschreibung

Die Attribute von den Entitäten ETY_Logeintrag und ETY_Marker werden aus diesen Datentypen ausgewählt.

Tabelle 3. Datentypen
Datentyp Basistyp Bedeutung Wertebereich

DTY_System-ID

Zeichenkette

Eindeutige Identifikation eines Systems.

Bspw.: XYZRG, XYZGA, QKSVZ

DTY_Host-ID

Zeichenkette

Eindeutige Identifikation eines Hosts/Servers.

Bspw.: appserver01

DTY_Zeitstempel

Datum

Zeitpunkt.

ISO8601-Format inklusive Zeitzone:
yyyy-MM-dd HH:mm:ss,SSSTZD

Bspw.: 2007-09-05 16:40:36,464Z

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).

FATAL, ERROR, WARN, INFO, DEBUG, TRACE

DTY_Log-Kategorie

Enum

Kategorie eines Logeintrags in Bezug auf Zweck (siehe Log-Level, Log-Kategorie und Ereignisschlüssel).

FEHLERANZEIGE, PROFILING, JOURNAL, METRIK,SICHERHEIT, FEHLERANALYSE

DTY_Ereignisschlüssel

Zeichenkette

Eindeutige Identifikation des Zwecks eines Logeintrags (siehe Log-Level, Log-Kategorie und Ereignisschlüssel).

Bspw.: LISYLOO01001

DTY_Zeichenkette

Zeichenkette

Frei wählbare Zeichenketten.

UTF-8 Zeichenkette

DTY_Wahrheitswert

Wahrheitswert

Ein Wahrheitswert kann genau zwei Zustände annehmen: „true“ oder „false“.

true, false

2.1.2. Log-Level, Log-Kategorie und Ereignisschlüssel

Log-Level, Log-Kategorie und Ereignisschlüssel werden in dem Dokument Logging - Nutzungsvorgaben beschrieben.

2.1.3. Korrelations-ID

Die Korrelations-ID ist immer mitzuloggen, damit die Logeinträge einzelnen Aufrufen zugeordnet und über die Komponenten der Anwendungs­landschaft 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"}

2.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.

2.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.

Architekturregel

Beim Loggen der Nachrichten sind grundsätzlich die Vorgaben der Datenschutzgrundverordnung (DSGVO) einzuhalten. Eine besondere Rolle spielen dabei personenbezogene Daten und insbesondere Daten gemäß Artikel 9 DSGVO. Ebenso dürfen grundsätzlich keine sicherheitsrelevanten Daten (z.B. Passwörter) geloggt werden.

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.

2.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).

2.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:

Listing 1. Beispiel für einen Logeintrag
{
  "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:

Listing 2. Tatsächlicher Logeintrag (unformatiert)
{"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"}

2.2.2. Logdateien, Log-Rotation und Komprimierung

Die Vorgaben zu Logdateien sowie deren Rotation und Komprimierung sind in den Nutzungsvorgaben Logging beschrieben.

2.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/
Architekturregel

Logback wird durch eine Anwendung niemals direkt, sondern ausschließlich über die Bibliothek isy-logging aufgerufen. Dadurch wird die einheitliche Nutzung von logback sichergestellt. Ausnahmen sind hierbei externe Bibliotheken (siehe Logging externer Bibliotheken).

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.

2.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.

logfass.dn
Abbildung 2. Logging-Fassade

Die Klassen der Fassade sind in Tabelle 4 beschrieben.

Tabelle 4. Die Klassen der Logging-Fassade
Klasse Beschreibung

IsyLoggerFactory

Factory zum Erstellen einer Instanz der Klasse IsyLoggerImpl.

Sie nutzt das Interface LoggerFactory, um eine Instanz der Klasse Logger von logback zu erzeugen, die durch IsyLoggerImpl gewrapped wird.

IsyLogbackLoggerImpl

Logger-Fassade, um Logeinträge zu erstellen.

Die Klasse besitzt eine Referenz auf eine Instanz des eigentlichen Loggers (Klasse Logger), der durch logback bereitgestellt wird.

Die bereitgestellten Methoden werden durch das Interface IsyLogger definiert, welches in IsyLogger beschrieben ist.

IsyMarker

Implementierung des Interface Marker, welches durch SLF4J definiert wird.

Die Klasse wird durch den IsyLogger verwendet, um einzelne Attribute (Name/Wert-Paare) an den Logger zu übergeben.

2.3.1.1. IsyLogger

Das Interface IsyLogger stellt Methoden zum Erstellen von Logeinträgen bereit. Es ist in Abbildung 3 dargestellt.

interface isylogger
Abbildung 3. Interface von IsyLogger

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.

2.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.

iaufbvLogent
Abbildung 4. Übersicht der Aufbereitung von Logeinträgen

2.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.

hilfklas
Abbildung 5. Hilfsklassen

2.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.

3. 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.

3.1. Allgemeine Hinweise

In diesem Abschnitt werden allgemeine Hinweise und Besonderheiten zur Auswertung der Logs aufgeführt.

3.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", …}

3.1.2. Auswertung des Feldes „zeitstempel“

Für die systematische Auswertung der Logeinträge durch die Betriebsplattform ist der Zeitstempel von besonderer Bedeutung. Daher stellt die Bibliothek isy-logging sicher, dass der Zeitstempel möglichst am Anfang des Logeintrags steht.

3.2. Allgemeine Inhalte jedes Logeintrags

Die folgenden Attribute werden automatisch durch logstash gesetzt und sind in jedem Event enthalten:

Tabelle 5. Allgemeine Inhalte jedes Logeintrags
Attribut Beschreibung Format / Beispiel

path

Absoluter Pfad der Datei, aus welcher der Logeintrag gelesen wurde.

/var/log/xyz-ga/webserver01_xyz-ga_2014-05-10_1700.log

3.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.

Tabelle 6. Zusätzliche Attribute mit isy-logging
Attribut Beschreibung Format / Beispiel

parameter<1..n>

Parameter, die zur Ersetzung der Platzhalter in der Lognachricht übergeben wurden

Freitext

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 true gesetzt. Bei konformen Logeinträgen wird der Marker nicht gesetzt.

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 INFO, WARN und ERROR gekürzt.

Nähere Informationen zur Festlegung der maximalen Länge von Logeinträgen finden sich in dem Dokument Logging - Nutzungsvorgaben.

true

methode

Vollständige Signatur einer aufgerufenen Methode.

Das Attribut wird beim Loggen eines Methodenaufrufs mit den Hilfsklassen LoggingMethodInvoker und LoggingMethodInterceptor automatisch gesetzt.

de.bund.bva.isyfact.logging.hilfsklassen.TestZielKlasse .setzeName(de.bund.bva.isyfact.logging.hilfsklassen .TestZielParameterPerson,java.lang.String)

dauer

Dauer eines Methodenaufrufs.

Das Attribut wird beim Loggen der Dauer eines Methodenaufrufs mit den Hilfsklassen LoggingMethodInvoker und LoggingMethodInterceptor automatisch gesetzt.

124

3.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:

Tabelle 7. Informationen für Tomcat access-log
Bestandteil Beschreibung Format / Beispiel

Tomcathost

Remote Hostname bzw. IP-Adresse, falls der Hostname nicht verfügbar ist

Beispiel: appserver01

Tomcatthread

Der Thread-Name über den der Request verarbeitet wird

Beispiel: main

Benutzername

Der Remote Benutzername

zeitstempelroh

Datum und Uhrzeit

02/Feb/2012:00:02:50Z

zeitstempel

Datum und Uhrzeit im ISO-8601 Format

2012-02-02T00:02:50.000Z

request

Erste Zeile des Request. Hieraus ist ersichtlich, ob es eine GET/POST ist, welche URI aufgerufen wurde und welches Protokoll verwendet wurde

statuscode

HTTP-Status Code des Response

Beispiel: 200

anzahlbytes

Anzahl der Bytes

Ganzzahl

thread

Name des Threads, durch den der Logeintrag erstellt wurde.

Beispiel: main

verarbeitungszeit

Verarbeitungszeit in Millisekunden

Ganzzahl

uniqueid

Die vom Apache generierte Correlation-ID. Diese wird von mod_jk im Request mitgeliefert.

24 Zeichen. Beispiel: U08ZosCoAAM-AAC9CATgFAAAA

Apachename

Im Request von mod_jk wird der Name des Apaches geliefert, über den die Anfrage verarbeitet wurde.

Beispiel: webserver01

3.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:

Tabelle 8. Informationen für Wrapper-log
Bestandteil Beschreibung Format / Beispiel

zeitstempelroh

Datum und Uhrzeit im Original des Logeintrags

2014/10/14 11:40:27.630

zeitstempel

Datum und Uhrzeit im ISO-8601 Format

2012-02-02T00:02:50.000Z

prefix

Präfix des Logeintrags.

Beispiel: jvm 1

level

Log-Level analog zu analog zu Entitäten

Beispiel: INFO

3.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:

Tabelle 9. Informationen für Apache access-log und error-log
Bestandteil Beschreibung Format / Beispiel

zeitstempelroh

Datum und Uhrzeit, des ursprünglichen Felds zeitstempel des Logeintrags.

12/Feb/2012:00:02:50 +0000

zeitstempel

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).

3.7. Mailserver-log

Die Logs des Mailservers stellen neben der Lognachricht, die folgenden Informationen bereit:

Tabelle 10. Informationen für Mailserver-log
Bestandteil Beschreibung Format / Beispiel

zeitstempelroh

Datum und Uhrzeit im Original des Logeintrags

Dec 12 10:03:28

mailserver

Identifikation des Mailservers

mailserver01

3.8. logstash-log

Logstash stellt neben der Lognachricht, die folgenden Informationen bereit:

Tabelle 11. Informationen für logstash-log
Bestandteil Beschreibung Format / Beispiel

zeitstempelroh

Datum und Uhrzeit im Original des Logeintrags

2014-12-11T12:18:19.580000Z

zeitstempel

Datum und Uhrzeit im ISO-8601 Format

2012-02-02T00:02:50.000Z

level

Log-Level analog zu analog zu Abschnitt Kein Log-Level FATAL in den Logs

Bspw.: INFO