Qu'est-ce que lnav ?
lnav, le Logfile Navigator, est un visualiseur de logs pour le terminal qui fusionne des fichiers de logs de nombreuses sources en une seule vue ordonnée par horodatage. Donnez-lui quelques fichiers, un répertoire ou une archive compressée et il reconnaît seul les formats (syslog, le journal systemd, les logs d'accès Apache et nginx, JSON Lines et bien d'autres), entrelace les messages dans l'ordre chronologique, colore les erreurs et les avertissements pour qu'ils sautent aux yeux, et continue de suivre les fichiers à mesure qu'ils grossissent. À partir de là, vous filtrez, cherchez, sautez d'une erreur à l'autre, et quand une question demande plus qu'une recherche, vous interrogez les messages de log en SQL. Il ouvre les logs distants via ssh aussi facilement que les logs locaux. lnav est écrit en C++ par Tim Stack et distribué sous licence BSD-2-Clause.
apt upgrade.
⚡ Fonctionnalités clés de lnav
🔀 Une seule chronologie fusionnée
Ouvrez ensemble le syslog, un log applicatif et un log de serveur web : lnav entrelace leurs lignes par horodatage, et vous lisez ce qui s'est passé dans tout le système dans l'ordre où c'est arrivé.
🔍 Détection automatique des formats
syslog, JSON de journald, logs d'accès Apache et nginx, JSON Lines, logfmt et des dizaines d'autres sont reconnus sans configuration ; niveaux, horodatages et champs sont analysés, erreurs et avertissements mis en évidence.
🗄️ Du SQL sur vos logs
Chaque format reconnu est une table. Appuyez sur ; et lancez des requêtes SELECT sur les messages : compter les erreurs par hôte, trouver les requêtes les plus lentes, regrouper les codes de statut, avec le résultat affiché dans la même fenêtre.
🌐 Logs distants via ssh
lnav user@host:/var/log/syslog ouvre un log sur une autre machine à travers votre configuration ssh et vos clés habituelles, sans agent à installer sur le serveur.
📦 Fichiers compressés et archives
Les logs rotés en .gz et .bz2 s'ouvrent directement, tout comme les archives .zip et .tar : un bundle de support se lit sans le décompresser d'abord.
👀 Suivre, filtrer et chercher
Les fichiers sont suivis à mesure qu'ils grossissent, les filtres masquent ou gardent des lignes selon un motif, les recherches surlignent chaque occurrence, et une seule touche saute à l'erreur ou à l'avertissement suivant, pour que rien d'important ne défile sans être vu.
apt upgrade vous maintient sur la dernière version.
📦 Installation depuis deb.griffo.io
Étape 1 : ajouter le dépôt
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(. /etc/os-release; echo ${DEBIAN_CODENAME:-${UBUNTU_CODENAME:-$VERSION_CODENAME}}) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 Il existe un miroir gratuit pour toujours. deb-free.griffo.io distribue des paquets gratuitement pour toujours — sans compte, sans abonnement, au plus 2 mois derrière l'upstream, correctifs de sécurité immédiats. Il contient aujourd'hui cliamp, Ghostty, lazydocker, Oh My Posh, Uncloud et Zed ; lnav n'en fait pas partie, le dépôt ci-dessus reste donc le seul moyen de l'installer — demandez-le et il pourra y être ajouté.
🧩 À propos de l'option extrepo. extrepo est l'outil de Debian pour les dépôts externes : il écrit le fichier de sources et installe la clé de signature à votre place, après l'avoir vérifiée face à des métadonnées signées. Ce dépôt y est enregistré sous le nom griffo, et le miroir gratuit à vie sous griffo-free ; sur Debian (bookworm, trixie, forky et sid), les commandes ci-dessus constituent donc toute l'installation.
extrepo ne met en place que le fichier de sources et la clé : les identifiants d'un abonnement vont toujours dans /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu n'est pas couvert, car extrepo ne publie de métadonnées que pour les suites Debian : utilisez-y les commandes avec sudo ou en root.
Étape 2 : installer lnav
# Installer la dernière version de lnav (remplace sur place le lnav plus ancien de la distribution)
sudo apt install lnav
# Vérifier l'installation
dpkg -s lnav | grep Version# Installer la dernière version de lnav (remplace sur place le lnav plus ancien de la distribution)
apt install lnav
# Vérifier l'installation
dpkg -s lnav | grep VersionÉtape 3 : premier lancement
# Les logs de /var/log sont lisibles par root et le groupe adm
sudo lnav /var/log
# Pas de rsyslog (le choix par défaut de Debian) ? Lire le journal systemd en JSON
journalctl -o json | lnav
# Vos propres logs n'ont pas besoin de sudo ; les formats sont détectés
lnav ~/app/logs/
# Dans lnav, ? affiche l'aide intégrée et q quitte# Les logs de /var/log sont lisibles par root et le groupe adm
lnav /var/log
# Pas de rsyslog (le choix par défaut de Debian) ? Lire le journal systemd en JSON
journalctl -o json | lnav
# Vos propres logs n'ont pas besoin de ; les formats sont détectés
lnav ~/app/logs/
# Dans lnav, ? affiche l'aide intégrée et q quitte🎯 Exemples d'utilisation de base
Lire et suivre des logs :
# Les logs rotés et compressés s'ouvrent directement, les archives aussi
lnav /var/log/nginx/access.log.2.gz support-bundle.tar.gz
# Plusieurs sources, fusionnées en une seule chronologie par horodatage
lnav /var/log/nginx/ ~/app/logs/app.log
# Un log sur une autre machine, via votre configuration ssh habituelle
lnav user@host:/var/log/syslogFiltres et SQL :
# Dans lnav : e / E saute à l'erreur suivante / précédente, w / W aux avertissements
# :filter-in error garder seulement les lignes qui correspondent
# :filter-out healthcheck masquer les lignes qui correspondent
# ;SELECT c_ip, count(*) AS hits FROM access_log GROUP BY c_ip ORDER BY hits DESC
# La même requête sans interface, pour les scripts
lnav -n -c ';SELECT sc_status, count(*) FROM access_log GROUP BY sc_status' /var/log/nginx/access.logRester à jour :
# lnav se met à jour avec le reste du système
sudo apt update && sudo apt upgrade
# Quelle version est installée, et quelle est la plus récente disponible
apt policy lnav
# Le désinstaller
sudo apt remove lnav# lnav se met à jour avec le reste du système
apt update && apt upgrade
# Quelle version est installée, et quelle est la plus récente disponible
apt policy lnav
# Le désinstaller
apt remove lnav🔧 Intégrations
lnav lit tout ce qui produit du texte, depuis des fichiers, des pipes et d'autres machines :
- ssh : les chemins distants comme
user@host:/var/log/syslogpassent par votre configuration ssh et vos clés existantes ; le paquet recommandeopenssh-clientpour cela - Journal systemd : envoyez
journalctl -o json(ajoutez-fpour suivre) dans lnav et chaque champ du journal devient consultable et interrogeable - Conteneurs :
docker logs -f app 2>&1 | lnavoukubectl logs -f pod | lnavdonne à la sortie des conteneurs la même coloration et le même SQL - Presse-papiers : marquez des lignes et appuyez sur
cpour les copier ; le paquet suggèrewl-clipboardouxclippour Wayland et X11 - Formats personnalisés : décrivez un format de log maison dans un fichier JSON et installez-le avec
lnav -i myformat.json; il obtient alors la détection, la coloration et sa propre table SQL - Scripts et CI :
lnav -n -cexécute commandes et requêtes sans interface, si bien que le SQL qui répond à une question en interactif peut tourner dans une tâche cron ou un pipeline - Documentation : la page de manuel est fournie avec le paquet (
man lnav), et le manuel complet se trouve sur docs.lnav.org
🚀 Pourquoi choisir deb.griffo.io ?
- Debian officiel : fournit lnav 0.12.4 dans trixie et la 0.11.1 dans Bookworm, chacune figée pour toute la durée de vie de sa release
- Téléchargements upstream : un zip contenant un binaire statique sur la page des releases GitHub, copié à la main dans votre PATH, sans la page de manuel, et à récupérer de nouveau à chaque version
- Compiler depuis les sources : une toolchain C++ plus les paquets de développement de SQLite, PCRE2, ncurses, libarchive et libcurl, et une longue compilation
- deb.griffo.io: dernière version avec mises à jour automatiques
- ✅ Le même nom de paquet que Debian : le paquet s'appelle
lnav, exactement comme dans l'archive Debian, ce dépôt met donc à jour le lnav d'origine sur place lors d'unapt upgrade, et unapt removeultérieur ne laisse rien derrière lui - ✅ Le build statique officiel : le binaire statique musl d'upstream, sans aucune dépendance à l'exécution et au comportement identique sur chaque version
- ✅ Paquet complet : le binaire
lnavet sa page de manuel, avecopenssh-clientrecommandé pour les logs distants etwl-clipboardouxclipsuggérés pour copier des lignes - ✅ Mises à jour automatiques : les paquets sont mis à jour quelques heures après chaque version upstream
- ✅ Deux architectures : amd64 et arm64 sur chaque version, le même lnav tourne donc sur les serveurs, les portables et les cartes ARM comme le Raspberry Pi
- ✅ Multi-distribution : fonctionne sur Bookworm, Trixie, Forky et Sid
- ✅ Maintenance simple : des mises à jour avec les commandes apt habituelles
📦 Dépôt de construction du paquet
Les paquets Debian sont construits et maintenus automatiquement dans ce dépôt GitHub :
- 🪵 lnav-debian - Constructions des dernières versions
🔗 Paquets associés
Également disponibles sur deb.griffo.io :
- lazydocker - Une interface terminal pour Docker, pour trouver le conteneur dont vous voulez les logs
- k9s - Une interface terminal pour les clusters Kubernetes et leurs pods
- ripgrep - Une recherche récursive rapide, pour fouiller toute une arborescence de logs d'un coup
- bottom - Un moniteur système pour le terminal, pour ce que les logs ne disent pas
- fzf - Un fuzzy finder pour choisir le fichier de log à ouvrir