Zum Inhalt

Log-Analysator-Plugin

Macht den Editor zu einer vollwertigen Log-Werkbank: strukturierte Protokolldateien über editierbare Profile parsen, nach geparsten Feldern und Zeitstempeln navigieren, mehrere Quellen auf einer Zeitachse zusammenführen, eine einzelne Anfrage über Quellen hinweg verfolgen und Raten / Perzentile / Top-N-Werte analysieren — alles, ohne den Rohtext in einen normalen Editor-Tab zu laden.

Wo Sie es finden

Das Plugin fügt dem Menü Datei drei Einträge hinzu:

  • Datei ▸ Als Log öffnen… — eine einzelne Protokolldatei in einem dedizierten Log-Ansichtsfenster öffnen.
  • Datei ▸ Zusammengeführte Logs öffnen… — zwei oder mehr Dateien wählen, jeder ihr Profil geben und sie verschränkt auf einer Zeitachse sehen.
  • Datei ▸ Systemprotokoll öffnen… (nur Windows) — das Windows-Ereignisprotokoll in derselben Ansicht abfragen, mit Filtern, die an PowerShells Get-WinEvent durchgereicht werden.

Eine Seite Einstellungen ▸ Plugins ▸ Log-Analysator erlaubt die Standard-Level-Chips, das Fallback-Profil für Dateien ohne Glob-Treffer, die Schwelle „vor dem Parsen von Dateien über N MB warnen“, den Standard-Filtermodus und das Follow-Tail-Abfrageintervall — ein Regler für den Datei-Tail-Timer und den Systemlog-Strom (jede Abfrage des Windows-Ereignisprotokolls startet einen PowerShell-Prozess, schwere Quellen mögen es also langsamer).

Große Dateien parsen in einem Hintergrund-Thread mit Live-Datensatzzähler, und die teuren Aggregationen (Nachrichten-Vorlagen, Anomalien) rechnen ebenfalls im Hintergrund — die Statusleiste zeigt „Analysiere Statistiken im Hintergrund…“, und die Panels füllen sich, sobald fertig; das Fenster bleibt durchgehend reaktionsfähig. Bei sehr großen Ladungen aggregieren die Statistiken über die neuesten 150 000 Datensätze, und die Zeitachse tastet die gesamte Spanne ab.

Einzeldatei-Log-Ansicht

Das Öffnen eines Logs zeigt das dedizierte Fenster Log-Ansicht. Es spiegelt die Ergonomie der tabellenbasierten Fenster des Editors (wie das Vergleichsfenster) und bleibt der Tab-Leiste des Editors fern.

Aufbau

  • Werkzeugleiste — Level-Chips (TRACE…FATAL), Filtermodus + Filterzeile, Nächster / Vorheriger Fehler (F8 / Shift+F8), Gehe zu Zeit (Ctrl+G).
  • Zeitachsen-Streifen oben — Ereignisvolumen in Zeit-Eimern, nach Level gefärbt. Einen Bereich ziehen filtert nach Zeit; ein Klick auf einen Balken springt in der Tabelle zum ersten Datensatz ab diesem Eimer.
  • Tabelle in der Mitte — Zeit / Level / Quelle / Nachricht, virtualisiert, scrollt also auch bei Hunderttausenden Datensätzen flüssig.
  • Detailbereich unter der Tabelle — der vollständige rohe mehrzeilige Eintrag der gewählten Zeile.
  • Statistik-Panel rechts angedockt — Zähler pro Level, Ereignisrate, Perzentil-Auswahl (p50/p95/p99 über ein beliebiges numerisches Feld, Standard bytes), Verteilung der HTTP-Statusklassen (1xx…5xx, verborgen ohne status-Feld) und eine Top-N-Tabelle über ein beliebiges Feld (Standard url, gedeckelt bei 25 Zeilen).

Filtermodi

Die Filterzeile akzeptiert fünf Ausdrucksarten; den Modus wählen Sie in der Combo links daneben:

Modus Was er matcht
Einfach Teilzeichenkette ohne Groß-/Kleinschreibung gegen die Rohzeile.
Wörter Leerraum-getrennte Tokens; jedes Token muss irgendwo in der Zeile vorkommen, in beliebiger Reihenfolge. phpinfo GET trifft eine Zeile mit phpinfo und GET.
Platzhalter *- und ?-Glob gegen die Rohzeile, ohne Groß-/Kleinschreibung.
Regex Ein QRegularExpression-Muster, standardmäßig ohne Groß-/Kleinschreibung.
Abfrage Strukturierte Grammatik mit Feld-, Level- und Zeit-Prädikaten plus AND/OR/NOT und Klammern.

Beispiele für den Abfrage-Modus:

level>=WARN
status:500 AND method:POST
message~/timeout|refused/ AND @time in [09:00..09:05]
NOT (source:nginx OR source:apache)
level>=ERROR OR (status:5\d\d AND method:POST)

Die Filterzeile entprellt die Eingabe um 200 ms, damit die Tabelle nicht bei jedem Tastendruck neu filtert; Enter oder Fokusverlust wendet sofort an, das Leeren der Zeile ebenfalls. Kompiliert ein Platzhalter-/Regex-/Abfrage-Ausdruck nicht, färbt sich die Zeile rot und der Tooltip zeigt die Diagnose — der Proxy behält den letzten gültigen Filter auf dem Schirm, die Tabelle leert sich also nicht während des Tippens.

  • F8 / Shift+F8 — nächster / vorheriger Fehler- oder Fatal-Datensatz.
  • Ctrl+G — zu einer bestimmten Zeit gehen (UTC, Kalender-Popup).
  • Ein Klick auf einen Zeitachsen-Balken springt zum ersten Datensatz des Eimers.

Diese drei Kürzel sind im Tastenkürzel-Zuordner neu belegbar (Kategorie Log Analyzer); offene Log-Ansichten übernehmen eine Neubelegung sofort, und die Tooltips der Werkzeugleiste zeigen das aktuelle Kürzel.

Live-Parsen + Abbrechen

Große Dateien zeigen Datensätze binnen Dutzenden Millisekunden; das Parsen läuft im Hintergrund weiter, und die Tabelle wächst mit eintreffenden Datensätzen. Filtern, Scrollen und F8 funktionieren, während das Parsen noch läuft. Das Schließen des Fensters stoppt den Worker zügig.

Zusammengeführte Log-Ansicht

Datei ▸ Zusammengeführte Logs öffnen… dient der Untersuchung eines Problems über mehrere Quellen — Client- plus Server-Log, App-Log plus Systemjournal, Web-Access plus -Error usw.

Die Profilwahl pro Datei

Nach der Wahl von zwei oder mehr Dateien erscheint ein kleiner Dialog mit einer Zeile pro Datei und einer Profil-Combo pro Zeile. Die Combo ist vorbelegt durch Abgleich des Dateinamens mit den Dateinamen-Globs jedes Profils (ohne Groß-/Kleinschreibung). Für ein typisches nginx-Deployment wählt access.log automatisch nginx — access log (default combined) und error.log automatisch nginx — error log. Vor OK lässt sich jede Zeile manuell übersteuern.

Aufbau

  • Werkzeugleiste — Sichtbarkeits-Kästchen pro Quelle (jedes Label in der Spurfarbe der Quelle), Level-Chips, Filterzeile mit Modus-Combo, Trace-Bedienelemente (Combo + Verfolgen / Leeren), Umschalter Sequenzdiagramm, Umschalter Nebeneinander.
  • Zeitachsen-Streifen oben — gestapeltes Histogramm pro Quelle mit einer Spur je Quelle, korrelierte Ausbrüche sieht man also visuell.
  • Trace-Banner über der Tabelle — bernsteinfarbener Streifen nur bei aktivem Trace-Filter: Following <Feld> = <Wert> — N Zeilen über alle Quellen.
  • Gestapelter Hauptbereich — drei Seiten, umschaltbar aus der Werkzeugleiste:
    • Tabelle (Standard): eine Zeile pro zusammengeführtem Datensatz mit den Spalten Zeit / Quelle / Level / Logger / Nachricht; die Vordergrundfarbe der Quellspalte ist die Spurfarbe der Quelle, die Quellidentität erfasst man also im Vorbeigehen.
    • Sequenzdiagramm — siehe Trace verfolgen.
    • Nebeneinander-Ansichten — siehe Nebeneinander.
  • Detailbereich unter der Tabelle.

Filter, die sich kombinieren

In der zusammengeführten Ansicht läuft die Filter-Pipeline in dieser Reihenfolge, alles baut aufeinander auf:

  1. Quellsichtbarkeit — die Kästchen pro Quelle in der Werkzeugleiste.
  2. Level-Chips — TRACE…FATAL.
  3. Trace verfolgen — siehe unten.
  4. Textfilter — Einfach / Wörter / Platzhalter / Regex / Abfrage (dieselben Modi und dasselbe Verhalten wie in der Einzeldatei-Ansicht, angewendet auf den zusammengeführten Strom).

Sie können also z. B. level>=ERROR AND status:500 über nginx-Access- und -Error-Logs in einem Ausdruck ausführen und einen einzelnen Client durch beide verfolgen — der Trace-Filter engt die Menge weiter ein, ohne die Level-/Quell-/Textfilter zu brechen.

Trace verfolgen

  1. Wählen Sie einen Korrelationsschlüssel in der Trace:-Combo der Werkzeugleiste. Sie ist mit dem üblichen Satz vorbelegt (trace_id / request_id / session_id / correlation_id / span_id / xRequestId) plus jedem tatsächlich in den geladenen Datensätzen vorkommenden Feldnamen. Bei Bedarf einen eigenen Namen tippen.
  2. Eine Zeile in der Tabelle auswählen.
  3. Follow trace klicken — oder die Zeile rechtsklicken und Follow trace: \<Feld>=\<Wert> für einen der üblichen Schlüssel wählen, die der Datensatz trägt (ein Ein-Schritt-Weg ohne die Combo).

Die Tabelle filtert sofort auf die Datensätze, die den Wert dieses Schlüssels über alle Quellen teilen. Clear trace entfernt den Filter.

Sequenzdiagramm

Sobald ein Trace-Filter aktiv ist und genau 2–4 Quellen sichtbar sind, wird der Umschalter Sequenzdiagramm verfügbar. Er schaltet den Hauptbereich auf ein Diagramm mit festen Spuren:

  • Jede sichtbare Quelle ist eine vertikale Spur, oben mit farbigem Feld beschriftet.
  • Eine Zeile pro Datensatz, die Zeit fließt von oben nach unten. Der echte Zeitstempel steht links, Präzision geht also nicht verloren; die Zeilen sind rangbasiert (feste Höhe) statt zeitproportional, weil ein echter Trace Ausbrüche plus lange Pausen hat und eine zeitproportionale Achse den Großteil des Bildschirms an die Pausen verschwenden würde.
  • Ein farbiger Punkt auf der Spur der besitzenden Quelle plus ein dezenter grauer Pfeil zwischen aufeinanderfolgenden Datensätzen auf verschiedenen Spuren — man sieht den Trace buchstäblich zwischen den Systemen springen.
  • Level-Chip und Nachrichtentext rechts.

Ein Klick auf eine Diagrammzeile scrollt die zugrundeliegende Tabelle zu diesem Datensatz. Den Umschalter ausschalten führt zur Tabelle zurück.

Bei >4 Quellen ist das Diagramm deaktiviert, die Tabellenansicht bleibt.

Nebeneinander-Ansichten

Sind genau zwei Quellen sichtbar, wird der Umschalter Nebeneinander verfügbar. Er teilt den Hauptbereich in zwei Tabellenbereiche — je eine Quelle — mit über den Zeitstempel gekoppelten Scroll-Positionen: Scrollen Sie einen Bereich, folgt der andere zum nächstgelegenen Datensatz ab dieser Zeit. Drift zwischen Server-Uhren zeigt sich natürlich als Auseinanderziehen der Bereiche.

Die Umschalter Sequenzdiagramm und Nebeneinander schließen sich gegenseitig aus (das Einschalten des einen schaltet den anderen ab); beide fallen auf die Tabellenansicht zurück, wenn die Zahl der aktiven Quellen ihren unterstützten Bereich verlässt.

Native Systemprotokolle (Windows)

Datei ▸ Systemprotokoll öffnen… fragt das Windows-Ereignisprotokoll ab, ohne eine Datei auf der Festplatte zu brauchen. Der Dialog fragt nach einem Kanal (Application / System / Security / eigener Name), einem optionalen Mindest-Level und einer Datensatzobergrenze. Das Plugin ruft PowerShells Get-WinEvent | ConvertTo-Json -Compress mit durchgereichtem Filter auf und parst die NDJSON-Ausgabe mit dem mitgelieferten Profil windows-event-log.

Die Aktion wird nur registriert, wenn der Host tatsächlich eine funktionierende Windows-Ereignisprotokoll-Quelle hat — unter Linux und macOS fehlt sie wirklich, statt ausgegraut zu sein.

Quellen für das macOS Unified Log und Linux journald sind geplant und fügen sich hinter dieselbe interne Schnittstelle ein, ohne UI-Änderungen, wenn sie landen.

Profile

Die Engine hat keine eingebauten Spezialparser. Jedes unterstützte Format — Apache, nginx, syslog, JSON Lines, logfmt, CSV, Windows-Ereignisprotokoll — ist eine LogProfile-JSON-Datei im Verzeichnis log-profiles/ der Anwendung. Benutzerprofile liegen im Ordner log-profiles/ des Benutzer-Konfigurationsverzeichnisses und übersteuern mitgelieferte nach id.

Jedes Profil beschreibt:

  • Zeilenmodellregex, json, logfmt, csv oder delimited.
  • Zeitstempel — welches Feld, akzeptierte Formate im strftime-Stil, Quell-Zeitzone, Epochen-Einheiten.
  • Level — welches Feld plus eine Abbildung roher Tokens auf das kanonische Enum Trace / Debug / Info / Warn / Error / Fatal.
  • Fortsetzung — wie Folgezeilen am aktuellen Datensatz kleben (Java-Stacktraces werden ein Eintrag, nicht 30).
  • abgeleitete Felder — Zusatzfelder, die ein Untermuster über ein bestehendes Feld berechnet. Die mitgelieferten apache+nginx-Profile nutzen das, um ein einheitliches Feld client_ip bereitzustellen, damit Follow trace der zusammengeführten Ansicht Access- und Error-Ereignisse desselben Clients über beide Quellen korrelieren kann.
  • Rotation — der Glob zum Auffinden der rotierten Geschwister der Quelle, die Ordnungsregel (numeric-suffix, embedded-date, first-record-time, mtime) plus optionale transparente Dekompression von .gz- und .zip-Segmenten.

Ein Profileditor mit Feldgreifer, grok-artigen Aliassen und einem Live-Zeitstempeltester ist als Nachfolger geplant.

Themes

Die Farben pro Level kommen aus dem Theme — das Plugin registriert eine Palettenkategorie pro kanonischem Level, der Theme-Editor zeigt sie, und jedes Theme kann sie übersteuern. Ein Themewechsel aktualisiert Level-Spalte, Zeitachsen-Streifen, Statistik-Panel und Sequenzdiagramm im Gleichschritt.

Siehe auch

  • Vergleich / Diff — das Vergleichsfenster, dem die Fenster des Log-Analysators nachempfunden sind.
  • Protokollierung & Diagnose — die eigene Protokolldatei des Editors (getrennt von der Sicht des Log-Analysators auf beliebige Protokollformate).