10 Punkte von GN⁺ 2025-04-23 | 1 Kommentare | Auf WhatsApp teilen
  • 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, tail und head und 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/messages und /var/log/syslog entwickelt, 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, PgDn usw.
  • Tasten im Vim-Stil: h, j, k, l, g, G, Ctrl+U, Ctrl+D, i, a usw.
  • Innerhalb von Eingabefeldern: Verlauf mit Up, Down, Ctrl+P, Ctrl+N durchsuchen
  • Ctrl+K, Ctrl+J: durch den gesamten Abfrageverlauf blättern

Wichtige Befehle

  • :xc oder :xclip: kopiert den aktuellen Abfragezustand als Befehlszeichenfolge in die Zwischenablage
    nerdlog --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, timezone usw. 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 rsyslog muss laufen, damit /var/log/syslog verwendet 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

 
GN⁺ 2025-04-23
Hacker-News-Kommentare
  • Tolle Arbeit. Das TUI ist wirklich sauber, und mir gefällt das Histogramm oben. Ich werde heute damit herumspielen.
  • Heute gelernt: awk-Patterns sind mehr als nur einfache reguläre Ausdrücke und lassen sich mit booleschen Operatoren kombinieren. Ich habe awk schon ein wenig benutzt, wusste das aber nicht.
  • Wirklich ein tolles Projekt. Mir gefallen besonders das Timeline-Histogramm, die Einfachheit des Remote-first-Designs und der TUI-Ansatz.
    • Ich hatte beim Umgang mit Logs von mehreren Hosts ähnliche Schwierigkeiten, und daraus ist das Tool Logdy entstanden.
    • Logdy ist webbasiert und konzentriert sich auf Live-Tailing, Suche in strukturierten Logs und schnelles Filtern über mehrere Quellen hinweg. Ein zentraler Server ist nicht nötig.
    • Ich will keinen direkten Vergleich ziehen, aber wenn man diesen Bereich erkundet, könnte es als ergänzender Ansatz oder für andere Szenarien nützlich sein.
    • Es muss noch Arbeit in die Query-Funktion für mehrere Hosts gesteckt werden.
    • Jedenfalls großes Lob an nerdlog. Es ist immer schön, ein schlankes Tool zu sehen, für das man nicht mehrere Services betreiben muss.
  • Auf der Landingpage wird journalctl einmal erwähnt, und es entsteht der Eindruck, dass Logs als Klartext im altmodischen syslog gespeichert werden müssen.
    • Ich möchte keine Klartext-Logs speichern und keine alten Lösungen wie logrotate verwenden.
    • journald selbst hat eingebaute Funktionen, um Logs von Remote-Hosts zu empfangen und zu durchsuchen (mit --merge).
  • Ich werde später definitiv damit herumspielen. Dass gzippte Log-Archive nicht unterstützt werden, schränkt den Anwendungsfall für mich persönlich ein.
    • Es scheint ausreichend bedacht worden zu sein, da es als Einschränkung genannt wurde, auf die Leute wahrscheinlich achten werden. Ich frage mich, ob es dafür irgendwann Unterstützung geben soll.
  • Sieht gut aus. Wenn ihr mehr Nutzer wollt, könntet ihr Hilfe aus der Community bekommen, um Pakete für die großen Linux-Distributionen bereitzustellen.
  • Sehr gut. Habe es meiner kleinen Liste von Log-Viewern hinzugefügt: https://github.com/dloss/klp#alternative-tools
  • Gut. Ich hätte das vor ein paar Jahren gebraucht. Es gibt keine Lizenzdatei?
  • Sieht gut aus. Ich frage mich, ob es eine Möglichkeit gibt, Datums-/Zeitangaben im RFC-3339-Format zu verwenden, ohne den Quellcode zu ändern.
    • Ich frage mich, ob es mit runit (Void Linux) funktioniert.
  • Großartig. Nach so etwas habe ich gesucht.
  • Ich frage mich, ob man damit Logs in AWS CloudWatch ansehen kann.