Was ist Strukturierte, Unstrukturierte und Halbstrukturierte Protokollierung?

Arfan Sharif - April 6, 2023

Die strukturierte, halbstrukturierte und unstrukturierte Protokollierung kommt in vielen Situationen zum Einsatz und bringt jeweils spezielle Vorteile und Herausforderungen mit sich. Unstrukturierte und halbstrukturierte Protokolle können vom Menschen gut gelesen, vom Computer aber nur schwer extrahiert werden, während strukturierte Protokolle in Ihrem Log-Management-System leicht geparst, aber ohne Log-Management-Tool nur schwer verwendet werden können.

Was ist strukturierte Protokollierung?

Bei der strukturierten Protokollierung werden Daten so formatiert, dass sie einfach durchsucht, gefiltert und verarbeitet werden können, um komplexere Analysen zu ermöglichen. Das Standardformat für die strukturierte Protokollierung ist JSON, doch auch andere Formate sind möglich. Die Best Practice besteht darin, ein Logging-Framework zu verwenden, das eine strukturierte Protokollierung erlaubt und mit einer Log-Management-Lösung integriert werden kann, die benutzerdefinierte Felder akzeptiert.

Unterschiede zwischen strukturierten, unstrukturierten und halbstrukturierten Protokollen

Unstrukturierte Protokolle sind riesige Textdateien mit Strings, die geordnete, vom Menschen lesbare Zeichenfolgen darstellen. In Protokollen enthalten diese Strings Variablen. Dabei handelt es sich um Platzhalter für an anderer Stelle definierte Elemente. Manchmal ist die Variable eine Wildcard, d. h. ein Platzhalter für ein unbekanntes Elemente, ähnlich wie beim Poker.

unstructured_data = ["Unstructured message","Hello Python World",str(datetime.now(timezone("EST")).isoformat())]

Menschen können Variablen problemlos erkennen, auf Computer trifft das nicht immer zu. Sie können nicht in jedem Fall zwischen einer Variable in einem String und einer ähnlichen Zeichenfolge an anderer Stelle in der Log-Datei unterscheiden. Dies kann zu verwirrenden Ergebnissen und in der Folge zu verringerter Produktivität, einer höheren Fehlerrate sowie zu vergeudeter Arbeitszeit und unnötigen Verarbeitungszyklen führen.

Strukturierte Protokolle bestehen aus Objekten statt Strings. Ein Objekt kann Variablen, Datenstrukturen, Methoden und Funktionen enthalten. So könnte beispielsweise ein Objekt, das Teil einer Log-Meldung ist, Informationen über eine Anwendung oder Plattform enthalten. Das Unternehmen kann die in das Objekt aufzunehmenden Kriterien so definieren, dass die Protokolle die einzigartigen Anforderungen des Unternehmens so gut wie möglich erfüllen.

Dies ist ein Beispiel für die „Struktur“ in einem strukturierten Protokoll:

structured_data = [
 {
          "tags": {
               "host": "str(ip)",
               "host_name": "str(host)",
               "filename": "str(caller.filename)",
               "line": "str(caller.lineno)",
               "error_level": "INFO"
          },
          "events": [
               {
                    "timestamp": str(datetime.now(timezone("EST")).isoformat()), #.strftime("%Y-%m-%d %H:%M:%S %Z"),
                    "attributes": {
                         "message": "Structured message",
                    }
               }
          ]
     }
 ]

Da strukturierte Protokolle darauf ausgelegt sind, von Computern gelesen zu werden, können Computer sie schneller durchsuchen, eine sauberere Ausgabe erzeugen und plattformübergreifende Konsistenz sicherstellen. Auch Menschen können strukturierte Protokolle lesen. Sie sind jedoch nicht die primäre Zielgruppe der eigentlichen Protokolle, sondern der Ausgabe, d. h. der Daten, die Computer nach der Verarbeitung der Daten zur Verfügung stellen.

Halbstrukturierte Protokolle unterstützen Computer und Menschen. Sie bestehen aus Strings und Objekten. Diese Protokolle müssen in der Regel in Tabellen geparst werden, bevor sie ordnungsgemäß analysiert werden können. Für diese halbstrukturierten Protokolle wurde bisher noch keine Standardisierung gefunden, sodass verschiedene Programme und Systeme Schwierigkeiten haben, sie zu identifizieren und kategorisieren. Zum Beispiel sind die Quoting-Regeln für den Wert eines Leerzeichens nicht universell definiert. CrowdStrike Falcon LogScale hat Schritte in die richtige Richtung unternommen und kann sich an halbstrukturierte Protokolle in Ihrer Umgebung anpassen.

Welche Vorteile bietet die strukturierte Protokollierung?

Die Suche nach einem Ereignis in einem unstrukturierten Protokoll kann sich schwierig gestalten, wenn eine einfache Abfrage viel mehr Informationen als gewünscht und nicht die tatsächlich gewünschten Informationen zurückgibt. Wenn ein Entwickler beispielsweise nach einem Log-Ereignis sucht, das generiert wird, sobald eine bestimmte Anwendung das Datenträgerkontingent um einen bestimmten Betrag überschreitet, erhält er unter Umständen alle von allen Anwendungen erstellten Datenträgerkontingent-Ereignisse. In einer Unternehmensumgebung führt dies zu einer riesigen Datei.

Um das richtige Ereignis zu finden, müsste der Entwickler diese Suche mit einem komplizierten regulären Ausdruck definieren – und je spezifischer das Ereignis, desto komplexer der Ausdruck. Dieser Ansatz ist extrem rechenintensiv, weil die im match-Ausdruck definierten Bedingungen mit jedem Zeilenwert im Log-Datensatz verglichen werden müssen. Mit Wildcards wird es noch rechenintensiver. Und wenn sich die Log-Daten ändern, funktioniert der match-Ausdruck nicht wie vorgesehen.

In einigen Unternehmen schreiben die Entwickler Code in Form von Strings, während Operations-Teams Code schreiben, der diese Strings zu strukturierten Daten parst. Diese Vorgehensweise dauert länger und ist rechenintensiver. Wenn ein Entwickler oder ein Operations-Teammitglied einen Fehler macht, stockt der Logging-Prozess und es geht weitere Zeit für die Suche nach der Ursache des Fehlers verloren.

Bei der strukturierten Protokollierung entfällt dieses Problem, weil die Daten schon während ihrer Generierung strukturiert werden. Das Unternehmen kann das Format wählen, das für seine Zwecke am besten funktioniert: eine feste Spalte, Schlüssel-Wert-Paare, JSON usw. Die meisten Unternehmen entscheiden sich heute für das JSON-Format, weil es sich gut mit Automatisierungssystemen (einschließlich Alarmierungssystemen) integrieren lässt.

Textprotokolle haben weiterhin ihren Platz im Unternehmen, weil die strukturierte Protokollierung einige Nachteile hat. Strukturierte Protokolle definieren Daten bereits bei ihrer Erstellung. Deshalb können die Daten nur für Zwecke genutzt werden, die von dieser Definition gedeckt sind. Wenn die strukturierten Daten lokal oder in einem Data Warehouse mit starrem Datenschema gespeichert werden, müssen sie bei Änderungen am Schema aktualisiert werden. Das ist ein enormes und kostspieliges Unterfangen. Bei der Entscheidung für eine Logging-Strategie sollten Unternehmen berücksichtigen, wer die Daten verwenden wird, welche Art von Daten erfasst wird, wo und wie die Daten gespeichert werden und ob die Daten schon vor dem Speichern oder erst bei Verwendung vorbereitet werden müssen.

CrowdStrike Falcon LogScale unterstützt strukturierte, halbstrukturierte und unstrukturierte Protokolle

Die Vorteile der strukturierten Protokollierung können Sie nur mit einem flexiblen, skalierbaren Log-Management-System erschließen, das Ihre Entwicklungs-, Compliance- und Sicherheitsanforderungen erfüllt.

CrowdStrike Falcon LogScale verarbeitet alle unstrukturierten, halbstrukturierten und strukturierten Meldungen, funktioniert mit jedem Datenformat und ist mit den führenden quelloffenen Data Shippern kompatibel. Angepasste Parser erleichtern die Unterstützung beliebiger Textformate und damit die einfache und schnelle Integration von Falcon LogScale.

Die meisten Benutzer senden strukturierte Daten als JSON-Objekte an Falcon LogScale. Sie müssen kein spezielles Format haben, sondern nur gültig sein. Zeitstempel können als Teil des Log-Eintrags gesendet werden. Falcon LogScale verwendet ihren Zeitstempel, statt ihn durch einen eigenen zu ersetzen. Wenn Sie unstrukturierte Daten senden, werden Zeitstempel bei der Erfassung als lange kommagetrennte Strings generiert, die mit dem Erfassungszeitstempel nicht im Konflikt stehen.

Vollständige Protokollierung und Einblicke – kostenlos

Falcon LogScale Community Edition (ehemals Humio) ist eine kostenlose moderne Log-Management-Plattform für die Cloud. Durch die Erfassung von Streaming-Daten erhalten Sie einen sofortigen Überblick über verteilte Systeme und können Zwischenfälle verhindern bzw. beheben.

Falcon LogScale Community Edition ist sofort kostenlos verfügbar und bietet folgende Vorteile:

  • Erfassung von bis zu 16 GB pro Tag
  • Speicherung bis zu 7 Tage
  • Keine Kreditkarte erforderlich
  • Unbegrenzter Zugriff ohne Testzeitraum
  • Indexlose Protokollierung, Echtzeit-Warnungen und Live-Dashboards
  • Zugriff auf unseren Marktplatz und zugehörige Pakete, einschließlich Leitfäden zur Entwicklung neuer Pakete
  • Lernen und Kooperation in einer aktiven Gemeinschaft

Kostenlos testen

INFORMATIONEN ZUM AUTOR

Arfan Sharif ist Product Marketing Lead für das Observability-Portfolio bei CrowdStrike. Er verfügt über mehr als 15 Jahre Erfahrung bei der Umsetzung von Lösungen für Log-Management, ITOps, Beobachtbarkeit, Sicherheit und Benutzerunterstützung für Unternehmen wie Splunk, Genesys und Quest Software. Arfan Sharif hat einen Abschluss in Informatik bei der Buckinghamshire New University und blickt auf eine Karriere in den Bereichen Produktmarketing und Sales Engineering zurück.