10 points par GN⁺ 2025-04-23 | 1 commentaires | Partager sur WhatsApp
  • Visionneuse TUI de logs multi-hôtes rapide et économe en ressources, permettant la collecte et l’analyse de logs distants uniquement via des connexions SSH, sans serveur central
  • Visualisation par histogramme chronologique et filtrage temporel pour comprendre facilement le flux des logs
  • Prend en charge un traitement rapide et un déploiement simple à l’aide d’une combinaison basique de awk, tail et head
  • Les requêtes sur les logs sont traitées à distance sans téléchargement local, ce qui minimise l’usage du réseau et optimise le traitement de gros volumes de logs
  • Simple par défaut, mais extensible via divers fichiers de configuration, la config SSH et les interactions UI

Présentation de Nerdlog

  • Nerdlog est une visionneuse de logs en interface texte qui fonctionne sans serveur central
  • Il permet d’analyser les logs comme Graylog/Kibana, mais constitue une alternative légère sans la charge d’installation et de maintenance
    • Le développement initial est né d’une déception face à la lenteur et à l’inefficacité de Splunk
  • Il est optimisé pour filtrer et visualiser simultanément les logs de plusieurs serveurs distants
  • Principalement conçu pour traiter les logs système (/var/log/messages, /var/log/syslog), mais prend aussi en charge d’autres formats
  • Il peut traiter rapidement de gros fichiers de logs de plus de 1 Go
  • Son objectif principal est de maximiser la vitesse et l’efficacité de la consultation de logs multi-nœuds

Caractéristiques de conception

  • Fonctionne sans serveur central, en créant une connexion SSH pour chaque nœud et en la maintenant ouverte
  • Au lieu de télécharger l’ensemble des logs, il ne transmet par requête qu’au maximum 250 messages de log et les données d’histogramme
  • Fusionne toutes les réponses pour fournir une vue unifiée
  • Utilise la compression Gzip pendant le transfert afin de réduire le coût réseau

État du projet et historique

  • Créé en 2022 lors d’un hackathon personnel comme alternative à Splunk trop lent, puis publié en open source en 2025
  • Implémenté rapidement, avec présence de spaghetti code et couverture de tests insuffisante
  • Testé en usage réel uniquement sous Linux
  • Encore au stade de proof of concept, mais déjà suffisamment rapide et stable pour une utilisation concrète

Résumé de l’utilisation

  • Au lancement de l’application, une zone de saisie de requête apparaît
  • Un logstream désigne des fichiers de logs continus sur des serveurs accessibles via SSH
  • Il est possible d’indiquer le port SSH, le chemin des fichiers de logs, etc., ou d’utiliser la config SSH et un fichier de configuration séparé
  • L’expression Select field permet de spécifier en style SQL les champs à afficher dans l’UI

Exemple :

myuser@myserver.com  
myuser@myserver.com:1234:/some/other/logfile  

Exemple de fichier de configuration (~/.config/nerdlog/logstreams.yaml) :

log_streams:  
  myhost-01:  
    hostname: actualhost1.com  
    port: 1234  
    user: myuser  
    log_files:  
      - /some/custom/logfile  

Composition de l’UI

  • Filtre de saisie de motifs Awk : prise en charge de /foo/, ( /bar/ || /baz/ ) && !/qux/, etc.
  • Bouton Edit : ouvre la fenêtre de saisie de la requête complète
  • Bouton Menu : fournit des fonctions comme retour, avance, copie de requête, etc.
  • Histogramme : visualisation de la densité des logs par période et sélection de plage temporelle possible
  • Tableau des logs : les logs les plus récents apparaissent en bas, avec défilement horizontal à droite pour voir les champs détaillés
  • Barre d’état :
    • Vert : nombre de logstreams connectés et en attente
    • Orange : nombre de logstreams actuellement en cours de requête
    • Rouge : nombre de logstreams en cours de connexion
    • Chiffres à droite : nombre total de logs correspondants / nombre de logs actuellement chargés / position du curseur
  • Ligne de commande : accessible avec la touche : et permet la saisie de commandes de style Vim

Navigation

  • Touches générales : Tab, Shift+Tab, Enter, Esc, PgUp, PgDn, etc.
  • Touches de style Vim : h, j, k, l, g, G, Ctrl+U, Ctrl+D, i, a, etc.
  • Dans les champs de saisie, l’historique peut être parcouru avec Up, Down, Ctrl+P, Ctrl+N
  • Ctrl+K, Ctrl+J : parcourent l’historique complet des requêtes

Commandes principales

  • :xc ou :xclip : copie dans le presse-papiers l’état actuel de la requête sous forme de chaîne de commande
    nerdlog --lstreams 'localhost' --time -3h --pattern '/something/'  
    
  • :back, :fwd : naviguent vers la requête précédente/suivante comme dans un navigateur
  • :edit : ouvre la fenêtre d’édition de requête
  • :write [filename] : enregistre les logs actuellement chargés dans un fichier
  • :reconnect, :disconnect : reconnexion / déconnexion des logstreams
  • :set option=valeur : modifie les paramètres (numlines, timezone, etc. pris en charge)
  • :q : quitte le programme

Prérequis

  • Un accès SSH aux hôtes distants est requis
  • Un agent SSH doit être en cours d’exécution en local
  • Les hôtes doivent avoir gawk installé ; mawk n’est pas pris en charge
  • Un service d’écriture de logs système comme rsyslog doit être en cours d’exécution pour que /var/log/syslog soit utilisable
  • Voir la section Requirements and limitations pour plus de détails

Conclusion

  • Nerdlog est un outil efficace pour consulter rapidement et visuellement des logs distants sans installation
  • Il ne nécessite pas de configuration complexe et permet une analyse en temps réel tout en économisant les ressources réseau
  • C’est un outil d’analyse de logs particulièrement idéal pour les utilisateurs de Vim ou les adeptes des outils CLI

1 commentaires

 
GN⁺ 2025-04-23
Commentaires sur Hacker News
  • Beau travail. Le TUI est vraiment propre et j’aime bien l’histogramme en haut. Je vais tester ça aujourd’hui
  • Ce que j’ai appris aujourd’hui : les motifs awk sont plus que de simples expressions régulières et peuvent être combinés avec des opérateurs booléens. J’ai déjà un peu utilisé awk, mais je ne savais pas ça
  • Vraiment un super projet. J’aime particulièrement l’histogramme de la timeline, ainsi que la simplicité de la conception orientée distant et de l’approche TUI
    • J’ai rencontré des difficultés similaires en traitant les logs de plusieurs hôtes, ce qui m’a amené à créer un outil appelé Logdy
    • Logdy est basé sur le web et se concentre sur le tail en temps réel, la recherche dans des logs structurés et le filtrage rapide sur plusieurs sources. Il ne nécessite pas de serveur central
    • Je ne cherche pas à faire une comparaison directe, mais si vous explorez cet espace, cela peut être utile comme approche complémentaire ou pour d’autres scénarios
    • Il reste du travail à faire pour ajouter des capacités de requête sur plusieurs hôtes
    • Quoi qu’il en soit, bravo à nerdlog. C’est toujours agréable de voir un outil épuré qui n’exige pas de faire tourner plusieurs services
  • Sur la landing page, journalctl n’est mentionné qu’une seule fois, ce qui laisse entendre que les logs doivent être stockés en texte brut dans l’ancien syslog
    • Je ne veux pas stocker des logs en texte brut ni utiliser de vieilles solutions comme logrotate
    • journald lui-même a des capacités intégrées pour recevoir des logs depuis des hôtes distants et les rechercher (avec --merge)
  • Je vais certainement tester ça plus tard. Les archives de logs gzippées ne sont pas prises en charge, ce qui réduit un peu l’intérêt pour mon cas d’usage personnel
    • Le fait qu’il l’ait mentionné comme une limitation à laquelle les gens feront probablement attention semble montrer qu’il y a bien réfléchi. Je me demande s’il prévoit de la prendre en charge un jour
  • Ça a l’air bien. Si vous voulez plus d’utilisateurs, vous pourriez obtenir de l’aide de la communauté pour le packager dans les principales distributions Linux
  • Très bien. Je l’ai ajouté à ma petite liste de visualiseurs de logs https://github.com/dloss/klp#alternative-tools
  • Bien. J’aurais eu besoin de ça il y a quelques années. Il n’y a pas de fichier de licence ?
  • Ça a l’air bien. Je me demande s’il existe un moyen d’utiliser le format de date/heure RFC 3339 sans modifier le code source
    • Je me demande si ça fonctionne avec runit (Void Linux)
  • Excellent. C’est le genre de chose que je cherchais
  • Je me demande si on peut consulter les logs depuis AWS CloudWatch avec ça