Plugin Analizzatore di log¶
Trasforma l'editor in un banco di lavoro per i log all'altezza del compito: analizza file di log strutturati tramite profili modificabili, naviga per campi analizzati e marche temporali, fonde più sorgenti su un'unica linea del tempo, segue una singola richiesta attraverso le sorgenti e analizza frequenze / percentili / valori più frequenti — il tutto senza caricare il testo grezzo in una normale scheda dell'editor.
Dove trovarlo¶
Il plugin aggiunge tre voci nel menu Analizzatore di log:
- Analizzatore di log ▸ Apri come log… — apre un singolo file di log in una finestra dedicata Vista di log.
- Analizzatore di log ▸ Apri log uniti… — scegli due o più file, dai a ciascuno il proprio profilo e vedili intercalati su un'unica linea del tempo.
- Analizzatore di log ▸ Apri il log di sistema… (solo Windows) — interroga il registro eventi
di Windows attraverso la stessa vista, con i filtri spinti giù fino a
Get-WinEventdi PowerShell.
Una pagina Preferenze ▸ Estensioni ▸ Analizzatore di log ti permette di impostare le pastiglie dei livelli predefinite, il profilo di ripiego per i file che non corrispondono ad alcun glob, la soglia «avvisa prima di analizzare file sopra gli N MB», la modalità di filtro predefinita e l'intervallo di interrogazione del seguimento della coda — una sola manopola sia per il timer di coda dei file sia per il flusso del log di sistema (ogni interrogazione del registro eventi di Windows avvia un processo PowerShell, quindi per le sorgenti pesanti può convenire rallentarla).
I file grandi vengono analizzati su un thread in background con un contatore dei record dal vivo, e anche le aggregazioni costose (modelli di messaggio, anomalie) si calcolano in background: la barra di stato mostra «Analisi delle statistiche in background…» e i pannelli si riempiono quando sono pronti, così la finestra resta reattiva per tutto il tempo. Sui caricamenti molto grandi le statistiche aggregano i 150 000 record più recenti e la linea del tempo campiona l'intero intervallo.
Vista di log a file singolo¶
Aprire un log mostra la finestra dedicata Vista di log. Rispecchia l'ergonomia delle finestre a tabella dell'editor (come la finestra Confronto diff) e resta fuori dalla striscia delle schede dell'editor.
Disposizione¶
- Barra degli strumenti — pastiglie dei livelli (TRACE…FATAL), modalità di
filtro + riga del filtro, Errore successivo / precedente (
F8/Shift+F8), Vai all'orario (Ctrl+G). - Striscia della linea del tempo in alto — volume degli eventi raggruppato nel tempo, colorato per livello. Trascina un intervallo per filtrare per tempo; clicca una barra per portare la tabella al primo record a partire da quel intervallo.
- Tabella al centro — Orario / Livello / Sorgente / Messaggio, virtualizzata così da scorrere in modo fluido anche con centinaia di migliaia di record.
- Riquadro dei dettagli sotto la tabella — mostra l'intera voce grezza su più righe per la riga selezionata.
- Pannello delle statistiche ancorato a destra — conteggi per livello,
frequenza degli eventi, selettore di percentili (p50/p95/p99 su un qualsiasi
campo numerico, predefinito
bytes), distribuzione delle classi di stato HTTP (1xx…5xx, nascosta quando non è presente alcun campostatus) e una tabella dei valori più frequenti su un qualsiasi campo (predefinitourl, con un limite di 25 righe).
La tabella dei record e il riquadro dei dettagli usano il carattere dell'editor da Preferenze ▸ Generale — lo stesso tipo e la stessa dimensione di una normale scheda dell'editor, così che marche temporali e livelli si allineino colonna per colonna. Cambiare quell'impostazione si applica alle viste di log già aperte, senza bisogno di riaprirle. Lo stesso vale per la vista unita, i suoi riquadri affiancati e il diagramma di sequenza. La barra degli strumenti, la riga del filtro e il pannello delle statistiche mantengono il carattere dell'interfaccia: sono cornice, non contenuto del log.
Modalità di filtro¶
La riga del filtro nella barra degli strumenti accetta cinque espressioni diverse; scegli la modalità dall'elenco a discesa alla sua sinistra:
| Modalità | Che cosa corrisponde |
|---|---|
| Semplice | Sottostringa senza distinzione tra maiuscole e minuscole contro la riga grezza. |
| Parole | Testimoni separati da spazi; ogni testimone deve comparire da qualche parte nella riga, in qualsiasi ordine. phpinfo GET corrisponde a una riga che contiene sia phpinfo sia GET. |
| Caratteri jolly | Glob * e ? contro la riga grezza, senza distinzione tra maiuscole e minuscole. |
| Espressione regolare | Semplice modello QRegularExpression, per impostazione predefinita senza distinzione tra maiuscole e minuscole. |
| Query | Grammatica strutturata con predicati su campo, livello e tempo, più AND/OR/NOT e parentesi. |
Esempi per la modalità Query:
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 riga del filtro attenua la digitazione con un ritardo di 200 ms, così che la tabella non rifiltri a ogni battuta; premere Invio o perdere il fuoco applica subito, e anche svuotare la riga applica subito. Quando un'espressione con caratteri jolly / espressione regolare / interrogazione non si compila, la riga diventa rossa e il suggerimento mostra la diagnostica: il proxy mantiene sullo schermo il filtro valido precedente, così che la tabella non si svuoti mentre digiti.
Navigazione¶
- F8 / Shift+F8 — record di errore o fatale successivo / precedente.
- Ctrl+G — vai a un orario specifico (UTC, finestra con calendario).
- Clicca una barra della linea del tempo per saltare al primo record di quel intervallo.
Questi tre accordi sono riassegnabili dall'utente nella Mappatura delle scorciatoie (categoria Log Analyzer); le viste di log aperte applicano subito una riassegnazione e i suggerimenti della barra degli strumenti mostrano l'accordo corrente.
Analisi dal vivo + annullamento¶
I file grandi cominciano a mostrare record entro decine di millisecondi;
l'analisi prosegue in background e la tabella cresce man mano che i record
arrivano. Filtrare, scorrere e F8 funzionano mentre l'analisi è ancora in
corso. Chiudere la finestra ferma prontamente il worker.
Vista di log unita¶
Analizzatore di log ▸ Apri log uniti… ti permette di indagare un problema che abbraccia più sorgenti: un log del client più un log del server, un log dell'applicazione più un diario di sistema, accessi web più errori, e così via.
Il selettore di profilo per file¶
Dopo aver scelto due o più file vedi una piccola finestra con una riga per file e
un elenco a discesa dei profili per riga. L'elenco è preselezionato confrontando
il nome del file con i glob di nome file di ciascun profilo (senza distinzione tra
maiuscole e minuscole). Per una tipica installazione nginx, access.log sceglie
automaticamente nginx — access log (default combined) ed error.log sceglie
automaticamente nginx — error log. Puoi scavalcare manualmente qualsiasi riga
prima di cliccare OK.
Disposizione¶
- Barra degli strumenti — pastiglie dei livelli, riga del filtro con elenco a discesa delle modalità, controlli di traccia (elenco a discesa + Segui / Cancella), interruttore del diagramma di sequenza, interruttore Affiancati.
- Striscia della linea del tempo in alto — istogramma impilato per sorgente con una corsia per sorgente, così da vedere visivamente le raffiche correlate.
- Banda della traccia sopra la tabella — striscia ambrata mostrata solo quando
è attivo un filtro di traccia:
Seguendo <field> = <value> — N righe in tutte le origini. - Area principale impilata — tre pagine commutabili dalla barra degli
strumenti:
- Tabella (predefinita): una riga per record unito con le colonne Orario /
Srg / Livello / Registratore / Messaggio; il colore di primo piano della
colonna
Srgè quello della corsia della sorgente, così da cogliere a colpo d'occhio l'identità della sorgente. - Diagramma di sequenza — vedi Segui la traccia.
- Riquadri affiancati — vedi Affiancati.
- Tabella (predefinita): una riga per record unito con le colonne Orario /
Srg / Livello / Registratore / Messaggio; il colore di primo piano della
colonna
- Riquadro dei dettagli sotto la tabella.
Filtri che si compongono¶
Nella vista unita la catena dei filtri gira in quest'ordine, e tutti si compongono l'uno sull'altro:
- Visibilità della sorgente — una casella di spunta nel margine sinistro della linea del tempo, una per corsia, accanto al nome e al colore della sorgente. Una corsia non spuntata mantiene la sua riga, attenuata: deve farlo, visto che quella casella è l'unico modo per tornare indietro. Clicca con il tasto destro sul margine per Mostra solo questa origine / Mostra tutte le origini.
- Pastiglie dei livelli — TRACE…FATAL.
- Segui la traccia — vedi sotto.
- Filtro di testo — Semplice / Parole / Caratteri jolly / Espressione regolare / Query (stesse modalità e stesso comportamento della vista a file singolo, applicati al flusso unito).
Significa che puoi fare, per esempio, level>=ERROR AND status:500 attraverso i
log di accesso e di errore di nginx in un'unica espressione, e seguire un
singolo client attraverso entrambi: il filtro di traccia restringe ulteriormente
l'insieme senza infrangere i filtri di livello / sorgente / testo.
Segui la traccia¶
- Scegli una chiave di correlazione nell'elenco a discesa Traccia: della
barra degli strumenti. È precaricato con l'insieme convenzionale (
trace_id/request_id/session_id/correlation_id/span_id/xRequestId) e con qualsiasi nome di campo distinto effettivamente presente nei record caricati. Se serve, digita un nome personalizzato. - Seleziona una riga nella tabella.
- Clicca Segui la traccia — oppure clicca con il tasto destro sulla riga e scegli Segui la traccia: \<field>=\<value> per una qualsiasi chiave convenzionale che il record porti con sé (una strada a colpo singolo che non richiede il passaggio dall'elenco a discesa).
La tabella si filtra immediatamente ai soli record che condividono il valore di quella chiave su tutte le sorgenti. Clicca Cancella la traccia per rimuovere il filtro.
Diagramma di sequenza¶
Una volta che un filtro di traccia è attivo e sono visibili esattamente 2–4 sorgenti, l'interruttore Diagramma di sequenza della barra degli strumenti diventa disponibile. Commuta l'area principale su un diagramma a corsie fisse:
- Ogni sorgente visibile è una corsia verticale etichettata in cima con un campione di colore.
- Una riga per record, con il tempo che scorre dall'alto verso il basso. La marca temporale effettiva è a sinistra, così da non perdere precisione; le righe sono basate sul rango (altezza fissa) anziché proporzionali al tempo, perché una traccia del mondo reale ha raffiche più lunghe pause, e un asse proporzionale al tempo sprecherebbe sulle pause la maggior parte dello schermo.
- Un punto colorato sulla corsia della sorgente proprietaria, più una discreta freccia grigia tra record consecutivi su corsie diverse: così puoi letteralmente vedere la traccia rimbalzare tra i sistemi.
- Pastiglia del livello e testo del messaggio a destra.
Clicca una riga qualsiasi del diagramma per far scorrere la tabella sottostante fino a quel record. Disattiva l'azione per tornare alla tabella.
Con più di 4 sorgenti il diagramma è disabilitato e resta la vista a tabella.
Riquadri affiancati¶
Quando sono visibili esattamente due sorgenti, l'interruttore Affiancato della barra degli strumenti diventa disponibile. Divide l'area principale in due riquadri a tabella — una sorgente ciascuno — con le posizioni di scorrimento legate dalla marca temporale: scorri uno dei due riquadri e l'altro si porta al record più vicino a partire da quel momento. Lo scarto tra gli orologi dei server emerge naturalmente come un allontanarsi dei riquadri.
Gli interruttori Diagramma di sequenza e Affiancati si escludono a vicenda (accendere l'uno spegne di scatto l'altro); entrambi tornano alla vista a tabella quando il numero di sorgenti attive esce dall'intervallo che supportano.
Gli insiemi di rotazione sono un'unica corsia¶
Scegliere tre file da un unico insieme ruotato significa scegliere un solo log,
quindi si caricano come un'unica corsia. Il selettore mostra una riga per
corsia con i suoi segmenti elencati sotto, dal più vecchio, e la corsia è
etichettata con il nome del suo file più recente e un conteggio di quelli più
vecchi — MxAPILog.txt (+2).
Clicca con il tasto destro su una corsia nella linea del tempo per Mostra separatamente ogni file ruotato e, una volta divisa, Unisci i file ruotati in un'unica corsia. La divisione è una ripartizione di ciò che è già in memoria, quindi non viene letto nulla di nuovo — ma cambia il significato di una riga, quindi la tabella perde la selezione.
Le sorgenti devono dichiarare tempi confrontabili¶
Un'unione colloca record di più sorgenti su un unico asse, il che ha senso solo se tutte possono dichiarare la stessa quantità di data. Un syslog senza anno non può essere posizionato rispetto a un log datato senza inventare l'anno, e un log di compilazione senza marche temporali non può essere posizionato affatto. Mescolarli viene rifiutato in partenza, con un messaggio che indica quali sorgenti cadono in quale gruppo. Unisci sorgenti dello stesso tipo, oppure aprile separatamente.
Ripristino¶
Una vista unita torna con la sessione. Ciò che viene salvato è il profilo scelto per ciascuna corsia e i file a cui quella corsia si è risolta; i record vengono riletti in background, quindi la scheda compare subito e poi si riempie. I file scomparsi e i profili eliminati vengono saltati e annotati nel log invece di diventare una domanda all'avvio.
Log di sistema nativi (Windows)¶
Analizzatore di log ▸ Apri il log di sistema… interroga il registro eventi di Windows senza aver
bisogno di un file su disco. La finestra chiede un canale
(Application / System / Security / un nome personalizzato), un livello minimo
facoltativo e un limite di record. Il plugin si appoggia a
Get-WinEvent | ConvertTo-Json -Compress di PowerShell con il filtro spinto giù,
e poi analizza l'output NDJSON attraverso il profilo incluso
windows-event-log.
L'azione viene registrata solo quando l'host ha davvero una sorgente funzionante per il registro eventi di Windows: su Linux e macOS è genuinamente assente anziché disattivata.
Le sorgenti del log unificato di macOS e di journald su Linux sono pianificate e si inseriscono dietro la stessa interfaccia interna, senza modifiche all'interfaccia quando arriveranno.
Profili¶
Il motore non ha analizzatori integrati con casi speciali. Ogni formato
supportato — Apache, nginx, syslog, JSON Lines, logfmt, CSV, registro eventi di
Windows — è un file JSON LogProfile distribuito nella cartella log-profiles/
dell'applicazione. I profili dell'utente vivono nella cartella log-profiles/
della cartella di configurazione dell'utente e scavalcano quelli inclusi per id.
Ogni profilo descrive:
- modello di riga —
regex,json,logfmt,csvodelimited. - marca temporale — quale campo, i formati in stile
strftimeaccettati, il fuso orario di origine, le unità dell'epoca. - livello — quale campo, più una mappatura dei testimoni grezzi sull'enum
canonico
Trace / Debug / Info / Warn / Error / Fatal. - continuazione — come le righe successive si incollano al record corrente (le tracce di stack Java diventano una voce sola, non 30).
- campi derivati — campi aggiuntivi calcolati da un sotto-modello su un campo
esistente. I profili apache + nginx inclusi usano questo meccanismo per esporre
un campo
client_ipuniforme, così che Segui la traccia della vista unita possa correlare eventi di accesso web e di errore per lo stesso client su entrambe le sorgenti. - rotazione — quali file formano un unico log logico, e in quale ordine. Vedi Rotazione: descrivere un insieme di file.
Non devi scrivere questi file a mano: l'editor apposito — con un raccoglitore di campi, alias in stile grok e un banco di prova dal vivo per le marche temporali — è descritto in Modificare i profili.
I tempi sono mostrati con la precisione che il log dichiara¶
Non tutti i log dichiarano una data completa. Il syslog RFC 3164 dà un mese, un giorno e un orario ma nessun anno; alcuni log embedded e interni danno solo un orario del giorno; l'output di compilazione non ne dà affatto.
La colonna Orario mostra esattamente ciò che la riga diceva — 13:36:55,
Oct 10 14:32:52, oppure una marca temporale completa con UTC — e non riempie
mai un vuoto con un'ipotesi. Lo stesso vale per l'esportazione TSV e per
l'anteprima dell'editor dei profili, così che un anno inventato non possa uscire
dall'applicazione ed essere scambiato a valle per uno reale.
L'ordinamento, la linea del tempo e le statistiche continuano a funzionare dentro un file simile: le parti mancanti sono ancorate internamente così che i record restino confrontabili tra loro. Semplicemente non affiorano mai.
Modificare i profili¶
Analizzatore di log ▸ Modifica profilo… elenca ogni profilo con un distintivo Integrato o Personalizzato. Selezionarne uno lo carica.
I profili integrati sono di sola lettura, come lo sono i temi integrati: il modulo viene mostrato ma disabilitato, e Clona è il modo per cambiarne uno. Un clone prende un id libero, così una copia non può mai mettere in ombra in silenzio il profilo da cui proviene. Nuovo parte da zero, Elimina rimuove uno dei tuoi, e allontanarsi da un lavoro non salvato chiede prima conferma.
Quando viene importato un profilo il cui id coincide con quello di uno integrato, viene memorizzato sotto un id libero invece di sostituirlo — e l'editor dice quale.
Rotazione: descrivere un insieme di file¶
Un log ruotato è un unico flusso logico tagliato in più file. Un profilo dice quali file stanno insieme con due nomi: non serve altro, e poiché la descrizione è una sola non c'è nulla che possa contraddirsi.
| Campo | Significato |
|---|---|
liveName |
Il file su cui si sta scrivendo adesso. |
rotatedName |
La forma che assumono i file più vecchi. |
indexOrder |
Quale estremo della numerazione è il più recente. |
orderBy |
Da dove viene l'ordine. Quasi sempre name. |
Segnaposto¶
Entrambi i nomi li accettano. Al di fuori di essi, ogni carattere è letterale: .
è un punto, non «un carattere qualsiasi», e * è un asterisco, non un carattere
jolly.
| Segnaposto | Significa |
|---|---|
%LIVE% |
Il file che l'utente ha aperto. Usalo quando il profilo non può conoscere il nome in anticipo. |
%N |
Il numero di rotazione. Letto come numero, quindi _10 si ordina dopo _9 anziché tra _1 e _2. |
%Y %y |
Anno, a quattro o a due cifre. Gli anni a due cifre usano il consueto perno: 69–99 significano 19xx, 00–68 significano 20xx. |
%m %b %B |
Mese come numero, come abbreviazione (Jul) o per esteso (July). |
%d %j |
Giorno del mese, o giorno dell'anno. |
%H %M %S |
Ora, minuto, secondo — per gli schemi che ruotano più di una volta al giorno. |
%% |
Un segno di percentuale letterale. |
Sono gli stessi campi strftime che usano i formati di marca temporale del
profilo, quindi non c'è un secondo insieme da imparare.
Un'estensione di compressione (.gz, .zip, .bz2, .xz) è gestita
automaticamente e non deve comparire in nessuno dei due nomi: ogni schema la
accoda per ultima, dopo qualunque cosa il modello descriva.
I tre stati di liveName¶
| Valore | Da usare quando |
|---|---|
%LIVE% |
Un profilo di uso generale che non può conoscere il nome: l'insieme è ancorato a qualunque file sia stato aperto. |
Un nome letterale, per esempio access.log |
Il profilo è scritto per una sola applicazione il cui file attivo ha sempre quel nome. |
| Vuoto | Non c'è alcun file attivo senza numero: ogni file è numerato o datato. IIS e java.util.logging funzionano così. |
Esempi svolti¶
| Schema | liveName |
rotatedName |
|---|---|---|
| logrotate | %LIVE% |
%LIVE%.%N |
logrotate con dateext |
%LIVE% |
%LIVE%-%Y%m%d |
| Apache / nginx | access.log |
access.log.%N |
| IIS | (vuoto) | u_ex%y%m%d.log |
| log4j2 / logback, rotazione predefinita | %LIVE% |
app-%Y-%m-%d-%N.log |
| Rotazione oraria | %LIVE% |
app-%Y-%m-%d-%H.log |
java.util.logging |
(vuoto) | java%N.log |
Come viene deciso l'ordine¶
Con orderBy: name — il valore predefinito — decide per prima la data nel nome,
il numero scioglie i pari merito all'interno di una data, e un file senza numero è
quello attivo e quindi il più recente. indexOrder dice in che verso corrono i
numeri: higher-is-older per logrotate e spdlog, higher-is-newer per Serilog,
Boost.Log e qualsiasi cosa che conti in avanti man mano che procede. Il nome da
solo non sa distinguere i due casi, ed è per questo che deve farlo il profilo.
Gli altri valori di orderBy esistono per gli insiemi i cui numeri non sono
affidabili. La rotazione ciclica riusa per sempre la stessa manciata di
numeri, quindi il numero è una casella, non un'età; first-record-time legge
invece la prima marca temporale di ciascun file, e mtime ripiega sul filesystem.
Se viene scelto name e risulta che i nomi non portano né una data né un numero,
l'ordine ricade sul primo record, poi su mtime, poi sul semplice nome — e la
barra di stato dice su quale, perché mtime viene riscritto dalla copia, dalla
decompressione, dal ripristino di una copia di sicurezza o dal passaggio a un
altro ramo.
Una data nel nome di un file non diventa mai la marca temporale di un record
Le date lette dai nomi dei file servono a una cosa sola: mettere in ordine i
segmenti. I record prendono sempre le proprie marche temporali dalla riga da
cui sono stati analizzati. Un file chiamato access.log-20260730 contiene
comunque record degli orari che le sue stesse righe dichiarano.
Modelli che vengono rifiutati¶
Un modello con due %N, o con %N attaccato direttamente a un campo di data,
viene respinto al caricamento del profilo e per esso la rotazione viene
disattivata, con la ragione nella diagnostica. app_%N%Y%m%d.log contro
app_1220260730.log si può leggere in più modi, e sceglierne uno in silenzio
metterebbe l'insieme in un ordine sbagliato senza nulla sullo schermo che lo
spieghi. Metti un qualsiasi carattere letterale tra i due: ogni schema del mondo
reale lo fa già.
L'editor dei profili valida entrambi i nomi mentre digiti, così un modello rifiutato salta fuori lì anziché al momento dell'apertura.
Dividere per esecuzione dell'applicazione¶
Un'esecuzione è una vita dell'applicazione dall'avvio all'arresto, e non è la stessa cosa di un file: la rotazione per dimensione taglia un'esecuzione su più file, e un log che ruota solo per dimensione può contenere più esecuzioni in un unico file.
Se il log stampa una riga quando parte — Volluto logging system started…,
Begin file log, un'insegna di framework — metti nel runStartMarker del
profilo un'espressione regolare che le corrisponda. Cliccare con il tasto destro
su una corsia nella linea del tempo offre allora Dividi per esecuzione
dell'applicazione, e ogni esecuzione diventa una corsia a sé. La voce compare
solo quando i record contengono davvero più di un'esecuzione.
Senza un marcatore i confini possono solo essere indovinati dai vuoti nel tempo, e quell'ipotesi è disattivata per impostazione predefinita, di proposito. L'esecuzione è un concetto dei log di applicazione; nginx, apache, syslog e i log dei container sono servizi continui senza alcuna esecuzione, e una notte tranquilla verrebbe altrimenti letta come centinaia di riavvii. Dove l'ipotesi viene usata si adatta al ritmo del log stesso e viene scartata del tutto se produce esecuzioni troppo brevi per essere reali.
Il tempo che torna indietro dentro una sorgente viene sempre trattato come un confine e sempre segnalato: significa o un riavvio o segmenti messi nell'ordine sbagliato, e vale la pena sapere entrambe le cose.
Temi¶
I colori per livello vengono dal tema: il plugin registra una categoria di tavolozza per ciascun livello canonico, l'Editor dei temi le fa affiorare e qualsiasi tema può scavalcarle. Cambiare tema aggiorna in sincrono la colonna del livello, la striscia della linea del tempo, il pannello delle statistiche e il diagramma di sequenza.
Vedi anche¶
- Confronto / diff — la finestra Confronto diff su cui sono modellate le finestre dell'Analizzatore di log.
- Registrazione e diagnostica — il file di log dell'editor stesso (distinto dalla vista che l'Analizzatore di log offre su formati di log arbitrari).