Aller au contenu

Extension Analyseur de journaux

Transformez l'éditeur en véritable atelier de journaux : analysez des fichiers de journaux structurés via des profils modifiables, naviguez par champs analysés et horodatages, fusionnez plusieurs sources sur une même chronologie, suivez une requête unique à travers les sources et analysez débits / percentiles / valeurs top-N — le tout sans charger le texte brut dans un onglet d'éditeur normal.

Où la trouver

L'extension ajoute trois entrées au menu Fichier :

  • Fichier ▸ Ouvrir comme journal… — ouvre un fichier de journal unique dans une fenêtre dédiée Vue du journal.
  • Fichier ▸ Ouvrir des journaux fusionnés… — choisissez deux fichiers ou plus, donnez à chacun son profil et voyez-les entrelacés sur une même chronologie.
  • Fichier ▸ Ouvrir le journal système… (Windows uniquement) — interrogez le journal d'événements Windows dans la même vue, avec des filtres poussés vers Get-WinEvent de PowerShell.

Une page Préférences ▸ Extensions ▸ Analyseur de journaux permet de régler les puces de niveau par défaut, le profil de repli pour les fichiers sans correspondance de glob, le seuil « avertir avant d'analyser les fichiers au-delà de N Mo », le mode de filtre par défaut et l'intervalle d'interrogation du suivi de fin — un seul réglage pour le minuteur de suivi de fichier et le flux du journal système (chaque interrogation du journal d'événements Windows lance un processus PowerShell, les sources lourdes préféreront donc plus lent).

Les gros fichiers s'analysent dans un fil d'arrière-plan avec un compteur d'enregistrements en direct, et les agrégations coûteuses (modèles de messages, anomalies) se calculent aussi en arrière-plan — la barre d'état affiche « Analyse des statistiques en arrière-plan… » et les panneaux se remplissent une fois prêts : la fenêtre reste réactive de bout en bout. Sur de très gros chargements, les statistiques agrègent les 150 000 enregistrements les plus récents et la chronologie échantillonne toute la plage.

Vue du journal (fichier unique)

Ouvrir un journal affiche la fenêtre dédiée Vue du journal. Elle reprend l'ergonomie des fenêtres à tableau de l'éditeur (comme la fenêtre de comparaison) et reste à l'écart de la barre d'onglets de l'éditeur.

Disposition

  • Barre d'outils — puces de niveau (TRACE…FATAL), mode de filtre + ligne de filtre, Erreur suivante / précédente (F8 / Shift+F8), Aller à l'heure (Ctrl+G).
  • Bande chronologique en haut — volume d'événements par intervalles, coloré par niveau. Tirez une plage pour filtrer par temps ; cliquez une barre pour amener le tableau au premier enregistrement à partir de cet intervalle.
  • Tableau au centre — Heure / Niveau / Source / Message, virtualisé pour défiler sans à-coups même avec des centaines de milliers d'enregistrements.
  • Volet de détail sous le tableau — l'entrée brute multiligne complète de la ligne sélectionnée.
  • Panneau de statistiques ancré à droite — compteurs par niveau, débit d'événements, sélecteur de percentiles (p50/p95/p99 sur tout champ numérique, bytes par défaut), répartition des classes de statut HTTP (1xx…5xx, masquée sans champ status) et tableau top-N sur tout champ (url par défaut, plafonné à 25 lignes).

Modes de filtre

La ligne de filtre accepte cinq types d'expressions ; choisissez le mode dans la liste à sa gauche :

Mode Ce qu'il fait correspondre
Simple Sous-chaîne insensible à la casse sur la ligne brute.
Mots Jetons séparés par des espaces ; chaque jeton doit apparaître quelque part dans la ligne, dans n'importe quel ordre. phpinfo GET correspond à une ligne contenant phpinfo et GET.
Jokers Glob * et ? sur la ligne brute, insensible à la casse.
Regex Motif QRegularExpression, insensible à la casse par défaut.
Requête Grammaire structurée avec prédicats de champ, de niveau et de temps plus AND/OR/NOT et parenthèses.

Exemples du mode Requête :

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)

La ligne de filtre temporise la frappe de 200 ms pour ne pas refiltrer le tableau à chaque touche ; Entrée ou la perte de focus applique immédiatement, vider la ligne aussi. Quand une expression Jokers / Regex / Requête ne compile pas, la ligne devient rouge et l'infobulle montre le diagnostic — le proxy conserve à l'écran le dernier filtre valide, le tableau ne se vide donc pas pendant la frappe.

  • F8 / Shift+F8 — enregistrement d'erreur ou fatal suivant / précédent.
  • Ctrl+G — aller à une heure précise (UTC, popup calendrier).
  • Cliquer une barre de la chronologie saute au premier enregistrement de l'intervalle.

Ces trois raccourcis sont réassignables dans le mappage des raccourcis (catégorie Log Analyzer) ; les Vues du journal ouvertes appliquent la réassignation immédiatement et les infobulles de la barre d'outils montrent le raccourci courant.

Analyse en direct + annulation

Les gros fichiers montrent des enregistrements en quelques dizaines de millisecondes ; l'analyse continue en arrière-plan et le tableau grandit au fil des arrivées. Filtrage, défilement et F8 fonctionnent pendant que l'analyse tourne encore. Fermer la fenêtre arrête promptement le worker.

Vue des journaux fusionnés

Fichier ▸ Ouvrir des journaux fusionnés… permet d'enquêter sur un problème réparti sur plusieurs sources — journal client plus journal serveur, journal applicatif plus journal système, accès web plus erreurs, etc.

Le choix de profil par fichier

Après avoir choisi deux fichiers ou plus, un petit dialogue montre une ligne par fichier avec une liste de profils par ligne. La liste est présélectionnée en faisant correspondre le nom du fichier aux globs de chaque profil (insensible à la casse). Pour un déploiement nginx typique, access.log choisit nginx — access log (default combined) et error.log choisit nginx — error log. Remplacez n'importe quelle ligne à la main avant OK.

Disposition

  • Barre d'outils — cases de visibilité par source (chaque étiquette dans la couleur de voie de la source), puces de niveau, ligne de filtre avec liste de modes, contrôles de trace (liste + Suivre / Effacer), bascule Diagramme de séquence, bascule Côte à côte.
  • Bande chronologique en haut — histogramme empilé par source avec une voie par source : les rafales corrélées se voient à l'œil.
  • Bannière de trace au-dessus du tableau — bande ambre visible seulement quand un filtre de trace est actif : Following <champ> = <valeur> — N lignes toutes sources confondues.
  • Zone principale empilée — trois pages basculables depuis la barre d'outils :
    • Tableau (par défaut) : une ligne par enregistrement fusionné avec les colonnes Heure / Src / Niveau / Logger / Message ; la couleur du texte de la colonne Src est la couleur de voie de la source, on repère donc la source d'un coup d'œil.
    • Diagramme de séquence — voir Suivre une trace.
    • Volets côte à côte — voir Côte à côte.
  • Volet de détail sous le tableau.

Des filtres qui se composent

Dans la vue fusionnée, la chaîne de filtres s'exécute dans cet ordre, chacun se composant avec les autres :

  1. Visibilité des sources — les cases par source de la barre d'outils.
  2. Puces de niveau — TRACE…FATAL.
  3. Suivi de trace — voir plus bas.
  4. Filtre textuel — Simple / Mots / Jokers / Regex / Requête (mêmes modes et même comportement que la vue à fichier unique, appliqués au flux fusionné).

Vous pouvez donc, par exemple, exécuter level>=ERROR AND status:500 sur les journaux access et error de nginx en une seule expression, et suivre un client unique à travers les deux — le filtre de trace resserre l'ensemble sans casser les filtres de niveau / source / texte.

Suivre une trace

  1. Choisissez une clé de corrélation dans la liste Trace: de la barre d'outils. Elle est amorcée avec l'ensemble conventionnel (trace_id / request_id / session_id / correlation_id / span_id / xRequestId) et tout nom de champ distinct réellement présent dans les enregistrements chargés. Tapez un nom personnalisé si besoin.
  2. Sélectionnez une ligne du tableau.
  3. Cliquez Follow trace — ou faites un clic droit sur la ligne et choisissez Follow trace : \<champ>=\<valeur> pour toute clé conventionnelle que porte l'enregistrement (un raccourci qui évite l'étape de la liste).

Le tableau se filtre immédiatement sur les seuls enregistrements partageant la valeur de cette clé à travers toutes les sources. Cliquez Clear trace pour retirer le filtre.

Diagramme de séquence

Quand un filtre de trace est actif et qu'exactement 2 à 4 sources sont visibles, la bascule Diagramme de séquence devient disponible. Elle commute la zone principale en diagramme à voies fixes :

  • Chaque source visible est une voie verticale étiquetée en haut d'une pastille colorée.
  • Une ligne par enregistrement, le temps coulant de haut en bas. L'horodatage réel est à gauche pour ne pas perdre en précision ; les lignes sont par rang (hauteur fixe) plutôt que proportionnelles au temps, car une vraie trace a des rafales et de longues pauses — un axe proportionnel gaspillerait l'essentiel de l'écran sur les pauses.
  • Un point coloré sur la voie de la source propriétaire, plus une flèche grise discrète entre enregistrements consécutifs sur des voies différentes — on voit littéralement la trace rebondir entre systèmes.
  • Puce de niveau et texte du message à droite.

Cliquez une ligne du diagramme pour faire défiler le tableau sous-jacent jusqu'à cet enregistrement. Désactivez la bascule pour revenir au tableau.

Au-delà de 4 sources, le diagramme est désactivé et la vue tableau demeure.

Volets côte à côte

Quand exactement deux sources sont visibles, la bascule Côte à côte devient disponible. Elle scinde la zone principale en deux volets de tableau — une source chacun — aux positions de défilement liées par horodatage : faites défiler un volet et l'autre suit vers l'enregistrement le plus proche à partir de cette heure. La dérive entre horloges de serveurs apparaît naturellement comme un écartement des volets.

Les bascules Diagramme de séquence et Côte à côte s'excluent mutuellement (activer l'une désactive l'autre) ; toutes deux reviennent à la vue tableau quand le nombre de sources actives sort de leur plage prise en charge.

Journaux système natifs (Windows)

Fichier ▸ Ouvrir le journal système… interroge le journal d'événements Windows sans fichier sur disque. Le dialogue demande un canal (Application / System / Security / un nom personnalisé), un niveau minimal facultatif et un plafond d'enregistrements. L'extension appelle Get-WinEvent | ConvertTo-Json -Compress de PowerShell avec le filtre poussé, puis analyse la sortie NDJSON via le profil livré windows-event-log.

L'action n'est enregistrée que si l'hôte dispose vraiment d'une source de journal d'événements Windows opérationnelle — elle est réellement absente sous Linux et macOS, pas grisée.

Les sources du journal unifié macOS et de journald Linux sont prévues et se brancheront derrière la même interface interne, sans changement d'interface quand elles arriveront.

Profils

Le moteur n'a aucun analyseur câblé en dur. Chaque format pris en charge — Apache, nginx, syslog, JSON Lines, logfmt, CSV, journal d'événements Windows — est un fichier JSON LogProfile livré dans le dossier log-profiles/ de l'application. Les profils utilisateur vivent dans le dossier log-profiles/ du répertoire de configuration utilisateur et remplacent les profils livrés par id.

Chaque profil décrit :

  • le modèle de ligneregex, json, logfmt, csv ou delimited ;
  • l'horodatage — quel champ, les formats de style strftime acceptés, le fuseau source, les unités d'époque ;
  • le niveau — quel champ plus une correspondance des jetons bruts vers l'énumération canonique Trace / Debug / Info / Warn / Error / Fatal ;
  • la continuation — comment les lignes suivantes se collent à l'enregistrement courant (une pile Java devient une entrée, pas 30) ;
  • les champs dérivés — des champs supplémentaires calculés par un sous-motif sur un champ existant. Les profils apache + nginx livrés s'en servent pour exposer un champ uniforme client_ip, afin que Follow trace de la vue fusionnée corrèle les événements access et error du même client à travers les deux sources ;
  • la rotation — le glob qui découvre les fichiers frères tournés de la source, la règle d'ordre (numeric-suffix, embedded-date, first-record-time, mtime), plus la décompression transparente facultative des segments .gz et .zip.

Un éditeur de profils avec attrapeur de champs, alias de style grok et testeur d'horodatage en direct est prévu dans une suite.

Thèmes

Les couleurs par niveau viennent du thème — l'extension enregistre une catégorie de palette par niveau canonique, l'Éditeur de thèmes les expose, et tout thème peut les remplacer. Changer de thème met à jour la colonne de niveau, la bande chronologique, le panneau de statistiques et le diagramme de séquence d'un même mouvement.

Voir aussi

  • Comparaison / diff — la fenêtre de comparaison dont les fenêtres de l'Analyseur de journaux s'inspirent.
  • Journalisation & diagnostics — le fichier journal propre de l'éditeur (distinct de la vue de l'Analyseur sur des formats de journaux arbitraires).