NerdLog – Schneller Multi-Host-TUI-Log-Viewer mit Timeline-Histogramm
(github.com/dimonomid)- Schneller und ressourceneffizienter TUI-Multi-Host-Log-Viewer, der Remote-Log-Erfassung und -Analyse allein über SSH-Verbindungen ohne zentralen Server ermöglicht
- Timeline-Histogramm-Visualisierung und Zeitfilterung erleichtern das Verständnis des Log-Verlaufs
- Verwendet grundlegende Kombinationen aus
awk,tailundheadund unterstützt so hohe Verarbeitungsgeschwindigkeit und einfachen Aufbau - Log-Abfragen werden remote ohne lokalen Download verarbeitet, wodurch die Netzwerkauslastung minimiert und die Verarbeitung großer Logs optimiert wird
- Standardmäßig einfach, aber erweiterbar über verschiedene Konfigurationsdateien, SSH-Config und UI-Bedienung
Einführung in Nerdlog
- Nerdlog ist ein textbasierter UI-Log-Viewer, der ohne zentralen Server arbeitet
- Ähnlich wie Graylog/Kibana lassen sich Logs analysieren, aber es ist ein leichtgewichtiges Alternativ-Tool ohne den Aufwand für Installation und Wartung
- Der ursprüngliche Entwicklungsanlass war die Enttäuschung über das langsame und ineffiziente Splunk
- Es ist für das gleichzeitige Filtern und Visualisieren von Logs mehrerer Remote-Server optimiert
- Es wurde hauptsächlich für Systemlogs wie
/var/log/messagesund/var/log/syslogentwickelt, unterstützt aber auch andere Formate - Auch große Logs von mehr als 1 GB können schnell verarbeitet werden
- Das Kernziel ist die maximale Geschwindigkeit und Effizienz beim Abrufen von Logs über mehrere Nodes hinweg
Architekturmerkmale
- Arbeitet ohne zentralen Server und erstellt für jeden Node eine SSH-Verbindung, die offen gehalten wird
- Anstatt vollständige Logs herunterzuladen, werden pro Anfrage nur bis zu 250 Log-Meldungen plus Histogrammdaten übertragen
- Alle Antworten werden zusammengeführt und zu einer einheitlichen Ansicht kombiniert
- Bei der Übertragung wird Gzip-Komprimierung verwendet, um Netzwerkkosten zu senken
Projektstatus und Historie
- Wurde 2022 in einem persönlichen Hackathon als Ersatz für das langsame Splunk entwickelt und 2025 als Open Source veröffentlicht
- Wurde schnell implementiert, daher gibt es Spaghetti-Code und eine geringe Testabdeckung
- Wurde in der Praxis nur unter Linux getestet
- Noch im Proof-of-Concept-Stadium, aber schnell und stabil genug für den praktischen Einsatz
Kurze Nutzungsübersicht
- Beim Start der App erscheint ein Eingabefeld für Abfragen
- Ein Log-Stream bezeichnet fortlaufende Log-Dateien auf Servern, die per SSH erreichbar sind
- SSH-Port, Pfade zu Log-Dateien usw. können direkt angegeben werden; alternativ lassen sich SSH-Config und separate Konfigurationsdateien verwenden
- Mit Select field expression werden die in der UI angezeigten Felder im SQL-Stil festgelegt
Beispiel:
myuser@myserver.com
myuser@myserver.com:1234:/some/other/logfile
Beispiel-Konfigurationsdatei (~/.config/nerdlog/logstreams.yaml):
log_streams:
myhost-01:
hostname: actualhost1.com
port: 1234
user: myuser
log_files:
- /some/custom/logfile
Aufbau der UI
- Awk-Pattern-Eingabefilter: unterstützt
/foo/,( /bar/ || /baz/ ) && !/qux/usw. - Edit-Button: öffnet das Eingabefenster für die vollständige Abfrage
- Menu-Button: bietet Funktionen wie Zurück, Vorwärts, Abfrage kopieren usw.
- Histogramm: visualisiert die Log-Dichte nach Zeit und erlaubt die Auswahl eines Zeitbereichs
- Log-Tabelle: neueste Logs befinden sich unten; per horizontalem Scrollen lassen sich Detailfelder ansehen
- Statusleiste:
- Grün: Anzahl der verbundenen und wartenden Log-Streams
- Orange: Anzahl der aktuell abgefragten Log-Streams
- Rot: Anzahl der Log-Streams im Verbindungsaufbau
- Zahlen rechts: Gesamtzahl passender Logs / aktuell geladene Logs / Cursor-Position
- Befehlszeile: über die Taste
:erreichbar, erlaubt Befehle im Vim-Stil
Navigation
- Allgemeine Tasten:
Tab,Shift+Tab,Enter,Esc,PgUp,PgDnusw. - Tasten im Vim-Stil:
h,j,k,l,g,G,Ctrl+U,Ctrl+D,i,ausw. - Innerhalb von Eingabefeldern: Verlauf mit
Up,Down,Ctrl+P,Ctrl+Ndurchsuchen Ctrl+K,Ctrl+J: durch den gesamten Abfrageverlauf blättern
Wichtige Befehle
:xcoder:xclip: kopiert den aktuellen Abfragezustand als Befehlszeichenfolge in die Zwischenablagenerdlog --lstreams 'localhost' --time -3h --pattern '/something/':back,:fwd: wie im Browser zur vorherigen/nächsten Abfrage wechseln:edit: öffnet das Fenster zum Bearbeiten der Abfrage:write [filename]: speichert die aktuell geladenen Logs in einer Datei:reconnect,:disconnect: Log-Streams erneut verbinden / Verbindung trennen:set Option=Wert: Einstellungen ändern (numlines,timezoneusw. werden unterstützt):q: Programm beenden
Voraussetzungen
- SSH-Zugriff auf die Remote-Hosts ist erforderlich
- Lokal muss ein SSH-Agent laufen
- Auf den Hosts muss gawk installiert sein; mawk wird nicht unterstützt
- Ein Systemdienst zur Log-Erfassung wie
rsyslogmuss laufen, damit/var/log/syslogverwendet werden kann - Details siehe Requirements and limitations
Fazit
- Nerdlog ist ein effizientes Tool, um Remote-Logs auch ohne Installation schnell und visuell zu prüfen
- Es benötigt keine komplexe Konfiguration und ermöglicht Echtzeit-Analyse bei gleichzeitig sparsamem Umgang mit Netzwerkressourcen
- Besonders für Vim-Nutzer oder Fans von CLI-Tools ist es ein ideales Werkzeug zur Log-Analyse
1 Kommentare
Hacker-News-Kommentare
awk-Patterns sind mehr als nur einfache reguläre Ausdrücke und lassen sich mit booleschen Operatoren kombinieren. Ich habeawkschon ein wenig benutzt, wusste das aber nicht.journalctleinmal erwähnt, und es entsteht der Eindruck, dass Logs als Klartext im altmodischensysloggespeichert werden müssen.logrotateverwenden.journaldselbst hat eingebaute Funktionen, um Logs von Remote-Hosts zu empfangen und zu durchsuchen (mit--merge).runit(Void Linux) funktioniert.