Plugin Analisador de logs¶
Transforme o editor em uma bancada de trabalho capaz para logs: analise arquivos de log estruturados por meio de perfis editáveis, navegue por campos analisados e marcas de tempo, mescle várias fontes em uma única linha do tempo, acompanhe uma única requisição por várias fontes e analise taxas, percentis e valores mais frequentes — tudo sem carregar o texto bruto em uma aba normal do editor.
Onde encontrá-lo¶
O plugin acrescenta três entradas ao menu Analisador de logs:
- Analisador de logs ▸ Abrir como log… — abre um único arquivo de log em uma janela dedicada de Visualização de log.
- Analisador de logs ▸ Abrir logs combinados… — escolha dois ou mais arquivos, dê a cada um o próprio perfil e veja-os intercalados em uma única linha do tempo.
- Analisador de logs ▸ Abrir o log do sistema… (somente no Windows) — consulta o Log de
Eventos do Windows pela mesma visualização, com os filtros empurrados até o
Get-WinEventdo PowerShell.
Uma página Preferências ▸ Plug-ins ▸ Analisador de logs permite definir os chips de nível padrão, o perfil de reserva para arquivos que não correspondem a nenhum glob, o limite de "avisar antes de analisar arquivos acima de N MB", o modo de filtro padrão e o intervalo de sondagem do acompanhamento do final — um único botão tanto para o temporizador do final do arquivo quanto para o fluxo do log do sistema (cada sondagem do Log de Eventos do Windows gera um processo do PowerShell, então fontes pesadas podem querer um intervalo mais lento).
Arquivos grandes são analisados em uma thread em segundo plano, com um contador de registros ao vivo, e as agregações caras (modelos de mensagem, anomalias) também são calculadas em segundo plano — a barra de status mostra "Analisando as estatísticas em segundo plano…" e os painéis se preenchem quando ficam prontos, de modo que a janela permanece responsiva o tempo todo. Em cargas muito grandes, as estatísticas agregam sobre os 150 000 registros mais recentes e a linha do tempo amostra todo o intervalo.
Visualização de log de um único arquivo¶
Abrir um log exibe a janela dedicada de Visualização de log. Ela espelha a ergonomia das próprias janelas baseadas em tabelas do editor (como a janela de Comparação de diferenças) e fica fora da faixa de abas do editor.
Layout¶
- Barra de ferramentas — chips de nível (TRACE…FATAL), modo de filtro e linha
de filtro, Próximo / Erro anterior (
F8/Shift+F8), Ir para a hora (Ctrl+G). - Faixa da linha do tempo no topo — volume de eventos agrupado em intervalos de tempo, colorido por nível. Arraste um intervalo para filtrar por tempo; clique em uma barra para levar a tabela ao primeiro registro naquele intervalo ou depois dele.
- Tabela no meio — Hora / Nível / Origem / Mensagem, virtualizada para rolar suavemente mesmo com centenas de milhares de registros.
- Painel de detalhe abaixo da tabela — mostra a entrada bruta completa, mesmo de várias linhas, da linha selecionada.
- Painel de estatísticas acoplado à direita — contagens por nível, taxa de
eventos, seletor de percentil (p50/p95/p99 sobre qualquer campo numérico,
bytespor padrão), distribuição de classes de status HTTP (1xx…5xx, oculta quando não há campostatus) e uma tabela dos N valores mais frequentes de qualquer campo (urlpor padrão, limitada a 25 linhas).
A tabela de registros e o painel de detalhe usam a fonte do editor de Preferências ▸ Geral — a mesma família e o mesmo tamanho de uma aba normal do editor, para que marcas de tempo e níveis se alinhem coluna por coluna. Alterar essa configuração vale para as visualizações de log já abertas, sem precisar reabri-las. O mesmo vale para a visualização mesclada, os painéis lado a lado dela e o diagrama de sequência. A barra de ferramentas, a linha de filtro e o painel de estatísticas mantêm a fonte da interface: eles são moldura, não conteúdo de log.
Modos de filtro¶
A linha de filtro da barra de ferramentas aceita cinco expressões diferentes; escolha o modo na caixa de combinação à esquerda dela:
| Modo | Com o que corresponde |
|---|---|
| Simples | Subcadeia sem diferenciar maiúsculas, contra a linha bruta. |
| Palavras | Itens separados por espaços; todos precisam aparecer em algum ponto da linha, em qualquer ordem. phpinfo GET corresponde a uma linha que contém tanto phpinfo quanto GET. |
| Curingas | Glob com * e ? contra a linha bruta, sem diferenciar maiúsculas. |
| Expressão regular | Padrão QRegularExpression comum, sem diferenciar maiúsculas por padrão. |
| Consulta | Gramática estruturada com predicados de campo, de nível e de tempo, além de AND/OR/NOT e parênteses. |
Exemplos para o modo Consulta:
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)
A linha de filtro aplica um atraso de 200 ms à digitação, para que a tabela não refiltre a cada tecla; pressionar Enter ou perder o foco aplica na hora, e limpar a linha também aplica de imediato. Quando uma expressão de curingas, expressão regular ou consulta não compila, a linha fica vermelha e a dica mostra o diagnóstico — o proxy mantém na tela o filtro válido anterior, para que a tabela não fique em branco enquanto você digita.
Navegação¶
- F8 / Shift+F8 — registro de erro ou fatal seguinte / anterior.
- Ctrl+G — ir para uma hora específica (UTC, com calendário em popup).
- Clique em uma barra da linha do tempo para saltar ao primeiro registro daquele intervalo.
Essas três combinações são remapeáveis pelo usuário no Mapeamento de atalhos (categoria Analisador de logs); as visualizações de log abertas aplicam um remapeamento imediatamente e as dicas da barra de ferramentas mostram a combinação atual.
Análise ao vivo e cancelamento¶
Arquivos grandes começam a exibir registros em dezenas de milissegundos; a análise
continua em segundo plano e a tabela cresce conforme os registros chegam. Filtrar,
rolar e F8 funcionam enquanto a análise ainda está em andamento. Fechar a janela
interrompe o trabalhador prontamente.
Visualização de logs mesclados¶
Analisador de logs ▸ Abrir logs combinados… permite investigar um problema que abrange várias fontes — um log de cliente mais um de servidor, um log de aplicativo mais um diário do sistema, acessos web mais erros, etc.
O seletor de perfil por arquivo¶
Depois de escolher dois ou mais arquivos, você vê uma pequena caixa de diálogo com
uma linha por arquivo e uma caixa de combinação de perfil por linha. A caixa vem
pré-selecionada comparando o nome do arquivo com os globs de nome de arquivo de
cada perfil (sem diferenciar maiúsculas). Para uma implantação típica do nginx, o
access.log escolhe automaticamente nginx — access log (default combined) e o
error.log escolhe nginx — error log. Substitua qualquer linha manualmente antes
de clicar em OK.
Layout¶
- Barra de ferramentas — chips de nível, linha de filtro com caixa de modo, controles de rastro (caixa de combinação + Acompanhar / Limpar), alternância de diagrama de sequência, alternância de lado a lado.
- Faixa da linha do tempo no topo — histograma empilhado por fonte, com uma pista por fonte, para que você veja rajadas correlacionadas visualmente.
- Faixa de rastro acima da tabela — faixa âmbar exibida apenas quando um filtro
de rastro está ativo:
Acompanhando <field> = <value> — N linhas em todas as origens. - Área principal empilhada — três páginas alternáveis pela barra de
ferramentas:
- Tabela (padrão): uma linha por registro mesclado, com as colunas Hora / Origem / Nível / Registrador / Mensagem; a cor de primeiro plano da coluna Origem é a cor da pista daquela fonte, para que você identifique a origem num relance.
- Diagrama de sequência — veja Acompanhar o rastreamento.
- Painéis lado a lado — veja Lado a lado.
- Painel de detalhe abaixo da tabela.
Filtros que se compõem¶
Na visualização mesclada, a cadeia de filtros roda nesta ordem, todos se compondo uns sobre os outros:
- Visibilidade das fontes — uma caixa de seleção na margem esquerda da linha do tempo, uma por pista, ao lado do nome e da cor da fonte. Uma pista desmarcada mantém a linha dela, esmaecida: ela precisa disso, já que aquela caixa é a única forma de voltar. Clique com o botão direito na margem para Mostrar somente esta origem / Mostrar todas as origens.
- Chips de nível — TRACE…FATAL.
- Acompanhar o rastreamento — veja abaixo.
- Filtro de texto — Simples / Palavras / Curingas / Expressão regular / Consulta (os mesmos modos e comportamento da visualização de um único arquivo, aplicados ao fluxo mesclado).
Isso significa que você pode fazer, por exemplo, level>=ERROR AND status:500 nos
logs de acesso e de erro do nginx em uma única expressão, e ainda acompanhar um
único cliente nos dois — o filtro de rastro restringe mais o conjunto sem quebrar os
filtros de nível, fonte e texto.
Acompanhar o rastreamento¶
- Escolha uma chave de correlação na caixa Rastreamento: da barra de
ferramentas. Ela vem semeada com o conjunto convencional (
trace_id/request_id/session_id/correlation_id/span_id/xRequestId) e com qualquer nome de campo distinto realmente presente nos registros carregados. Digite um nome personalizado se precisar. - Selecione uma linha na tabela.
- Clique em Acompanhar o rastreamento — ou clique com o botão direito na linha e escolha Acompanhar o rastreamento: \<field>=\<value> para qualquer chave convencional que o registro carregue (um caminho de uma etapa só, que não precisa da caixa de combinação).
A tabela filtra imediatamente para apenas os registros que compartilham aquele valor de chave em todas as fontes. Clique em Limpar o rastreamento para remover o filtro.
Diagrama de sequência¶
Uma vez que um filtro de rastro está ativo e há exatamente de 2 a 4 fontes visíveis, a alternância Diagrama de sequência da barra de ferramentas fica disponível. Ela muda a área principal para um diagrama de pistas fixas:
- Cada fonte visível é uma pista vertical rotulada no topo com uma amostra colorida.
- Uma linha por registro, com o tempo fluindo de cima para baixo. A marca de tempo real fica à esquerda, para você não perder precisão; as linhas são por classificação (altura fixa) em vez de proporcionais ao tempo, porque um rastro real tem rajadas e longas pausas, e um eixo proporcional ao tempo desperdiçaria quase toda a tela com as pausas.
- Um ponto colorido na pista da fonte proprietária, mais uma seta cinza sutil entre registros consecutivos em pistas diferentes — para que você veja literalmente o rastro quicando entre os sistemas.
- Chip de nível e texto da mensagem à direita.
Clique em qualquer linha do diagrama para rolar a tabela subjacente até aquele registro. Desligue a ação para voltar à tabela.
Com mais de 4 fontes, o diagrama é desativado e a visualização de tabela permanece.
Painéis lado a lado¶
Quando há exatamente duas fontes visíveis, a alternância Lado a lado da barra de ferramentas fica disponível. Ela divide a área principal em dois painéis de tabela — uma fonte cada — com as posições de rolagem ligadas por marca de tempo: role qualquer um dos painéis e o outro acompanha até o registro mais próximo naquela hora ou depois dela. A deriva entre os relógios dos servidores aparece naturalmente como os painéis se afastando.
As alternâncias de diagrama de sequência e de lado a lado são mutuamente exclusivas (ligar uma desliga a outra); as duas voltam à visualização de tabela quando a contagem de fontes ativas sai do intervalo suportado por elas.
Conjuntos de rotação são uma única pista¶
Escolher três arquivos de um mesmo conjunto rotacionado é escolher um único log,
então eles são carregados como uma única pista. O seletor mostra uma linha por
pista com os segmentos dela listados abaixo, do mais antigo ao mais novo, e a pista
é rotulada com o nome do arquivo mais recente e uma contagem dos mais antigos —
MxAPILog.txt (+2).
Clique com o botão direito em uma pista na linha do tempo para Mostrar cada arquivo rotacionado separadamente e, uma vez dividida, Juntar os arquivos rotacionados em uma única faixa. Dividir é um reparticionamento do que já está em memória, então nada é lido de novo — mas isso muda o que uma linha significa, então a tabela perde a seleção.
As fontes precisam declarar tempos comparáveis¶
Uma mesclagem coloca registros de várias fontes em um único eixo, o que só faz sentido se todas puderem declarar a mesma quantidade de data. Um syslog sem ano não pode ser posicionado contra um log datado sem inventar o ano, e um log de build sem marcas de tempo não pode ser posicionado de forma alguma. Misturá-los é recusado de antemão, com uma mensagem nomeando quais fontes caem em cada grupo. Mescle fontes do mesmo tipo, ou abra-as separadamente.
Restaurando¶
Uma visualização mesclada volta com a sessão. O que é salvo é o perfil escolhido para cada pista e os arquivos aos quais aquela pista se resolveu; os registros são relidos em segundo plano, então a aba aparece na hora e se preenche. Arquivos que sumiram e perfis que foram apagados são pulados e anotados no log, em vez de virarem uma pergunta na inicialização.
Logs nativos do sistema (Windows)¶
Analisador de logs ▸ Abrir o log do sistema… consulta o Log de Eventos do Windows sem
precisar de um arquivo no disco. A caixa de diálogo pede um canal (Aplicativo /
Sistema / Segurança / um nome personalizado), um nível mínimo opcional e um limite
de registros. O plugin chama o Get-WinEvent | ConvertTo-Json -Compress do
PowerShell com o filtro empurrado para baixo, e então analisa a saída NDJSON pelo
perfil incluído windows-event-log.
A ação só é registrada quando a máquina realmente tem uma fonte funcional de Log de Eventos do Windows — ela está genuinamente ausente no Linux e no macOS, em vez de esmaecida.
Fontes do log unificado do macOS e do journald do Linux estão planejadas e encaixam atrás da mesma interface interna, sem alterações de interface quando chegarem.
Perfis¶
O mecanismo não tem analisadores integrados com casos especiais. Todo formato
suportado — Apache, nginx, syslog, JSON Lines, logfmt, CSV, Log de Eventos do
Windows — é um arquivo JSON LogProfile distribuído no diretório log-profiles/
do aplicativo. Os perfis do usuário ficam na pasta log-profiles/ do diretório de
configuração do usuário e substituem os incluídos por identificador.
Cada perfil descreve:
- modelo de linha —
regex,json,logfmt,csvoudelimited. - marca de tempo — qual campo, quais formatos no estilo
strftimesão aceitos, o fuso horário de origem, as unidades de época. - nível — qual campo, mais um mapeamento dos itens brutos para a enumeração
canônica
Trace / Debug / Info / Warn / Error / Fatal. - continuação — como as linhas seguintes se colam ao registro atual (um rastreamento de pilha Java vira uma entrada, não 30).
- campos derivados — campos extras calculados por um subpadrão sobre um campo
existente. Os perfis incluídos de apache e nginx usam isso para expor um campo
client_ipuniforme, de modo que o Acompanhar o rastreamento da visualização mesclada possa correlacionar eventos de acesso e de erro web do mesmo cliente nas duas fontes. - rotação — quais arquivos formam um log lógico, e em que ordem. Veja Rotação: descrevendo um conjunto de arquivos.
Você não precisa escrever esses arquivos à mão: o editor para eles — com um coletor de campos, apelidos no estilo grok e um testador de marcas de tempo ao vivo — é descrito em Editando perfis.
As horas são exibidas com a precisão que o log declara¶
Nem todo log declara uma data completa. O syslog da RFC 3164 dá um mês, um dia e uma hora, mas nenhum ano; alguns logs embarcados e caseiros dão apenas uma hora do dia; a saída de build não dá nenhuma.
A coluna Hora mostra exatamente o que a linha dizia — 13:36:55,
Oct 10 14:32:52, ou uma marca de tempo completa com UTC — e nunca preenche uma
lacuna com um palpite. O mesmo vale para a exportação TSV e para a prévia do editor
de perfis, de modo que um ano inventado não possa sair do aplicativo e ser
confundido, mais adiante, com um real.
A ordenação, a linha do tempo e as estatísticas continuam funcionando dentro de um arquivo assim: as partes faltantes são ancoradas internamente para que os registros continuem comparáveis entre si. Elas apenas nunca vêm à tona.
Editando perfis¶
Analisador de logs ▸ Editar perfil… lista todos os perfis com um selo Integrado ou Personalizado. Selecionar um o carrega.
Perfis integrados são somente leitura, do mesmo jeito que os temas integrados: o formulário é exibido, mas desativado, e Clonar é a forma de alterar um. Um clone recebe um identificador livre, de modo que uma cópia nunca possa eclipsar silenciosamente o perfil de onde veio. Novo começa do zero, Excluir remove um dos seus, e sair de um trabalho não salvo pergunta antes.
Quando um perfil é importado e o identificador dele coincide com o de um integrado, ele é guardado sob um identificador livre em vez de substituí-lo — e o editor diz qual.
Rotação: descrevendo um conjunto de arquivos¶
Um log rotacionado é um fluxo lógico cortado em vários arquivos. Um perfil diz quais arquivos vão juntos com dois nomes — nada além disso é necessário, e como há uma única descrição, não há nada que possa se contradizer.
| Campo | Significado |
|---|---|
liveName |
O arquivo em que se está gravando neste momento. |
rotatedName |
O formato que os arquivos mais antigos assumem. |
indexOrder |
Qual extremidade da numeração é a mais nova. |
orderBy |
De onde vem a ordem. Quase sempre name. |
Marcadores¶
Os dois nomes os aceitam. Fora deles, todo caractere é literal — . é um ponto,
não "qualquer caractere", e * é um asterisco, não um curinga.
| Marcador | Significa |
|---|---|
%LIVE% |
O arquivo que o usuário abriu. Use-o quando o perfil não puder saber o nome de antemão. |
%N |
O número de rotação. Lido como um número, então _10 vem depois de _9 em vez de entre _1 e _2. |
%Y %y |
Ano, de quatro ou dois dígitos. Anos de dois dígitos usam o pivô habitual: 69–99 significam 19xx, 00–68 significam 20xx. |
%m %b %B |
Mês como número, abreviação (Jul) ou por extenso (July). |
%d %j |
Dia do mês, ou dia do ano. |
%H %M %S |
Hora, minuto, segundo — para esquemas que rotacionam mais de uma vez por dia. |
%% |
Um sinal de porcentagem literal. |
Esses são os mesmos campos strftime que os formatos de marca de tempo do
perfil usam, então não há um segundo conjunto a aprender.
Uma extensão de compressão (.gz, .zip, .bz2, .xz) é tratada
automaticamente e não deve aparecer em nenhum dos dois nomes: todo esquema a
acrescenta por último, depois do que quer que o padrão descreva.
Os três estados de liveName¶
| Valor | Use quando |
|---|---|
%LIVE% |
Um perfil de uso geral que não pode saber o nome — o conjunto é ancorado ao arquivo que foi aberto. |
Um nome literal, p. ex. access.log |
O perfil foi escrito para um aplicativo cujo arquivo ao vivo sempre tem aquele nome. |
| Vazio | Não há arquivo ao vivo sem número: todo arquivo é numerado ou datado. IIS e java.util.logging funcionam assim. |
Exemplos resolvidos¶
| Esquema | liveName |
rotatedName |
|---|---|---|
| logrotate | %LIVE% |
%LIVE%.%N |
logrotate com dateext |
%LIVE% |
%LIVE%-%Y%m%d |
| Apache / nginx | access.log |
access.log.%N |
| IIS | (vazio) | u_ex%y%m%d.log |
| log4j2 / logback, rotação padrão | %LIVE% |
app-%Y-%m-%d-%N.log |
| Rotação de hora em hora | %LIVE% |
app-%Y-%m-%d-%H.log |
java.util.logging |
(vazio) | java%N.log |
Como a ordem é decidida¶
Com orderBy: name — o padrão — a data no nome decide primeiro, o número desempata
dentro de uma data, e um arquivo sem número é o ao vivo e, portanto, o mais novo. O
indexOrder diz para que lado os números correm: higher-is-older para logrotate
e spdlog, higher-is-newer para Serilog, Boost.Log e tudo o que conta para cima
conforme avança. O nome sozinho não distingue os dois, e é por isso que o perfil
precisa fazê-lo.
Os outros valores de orderBy existem para conjuntos cujos números não são
confiáveis. A rotação cíclica reutiliza para sempre o mesmo punhado de números,
então o número é uma vaga, não uma idade; first-record-time lê a primeira marca de
tempo de cada arquivo, e mtime recorre ao sistema de arquivos.
Se name for escolhido e os nomes acabarem não trazendo data nem número, a ordem
cai para o primeiro registro, depois para mtime, depois para o nome simples — e a
barra de status diz qual, porque o mtime é reescrito ao copiar, descompactar,
restaurar um backup ou trocar de ramo.
Uma data em um nome de arquivo nunca vira a marca de tempo de um registro
Datas lidas de nomes de arquivo servem para uma coisa só: colocar os segmentos
em ordem. Registros sempre tiram as marcas de tempo da linha de que foram
analisados. Um arquivo chamado access.log-20260730 continua contendo registros
dos horários que as próprias linhas dele declaram.
Padrões que são recusados¶
Um padrão com dois %N, ou com %N colado diretamente a um campo de data, é
rejeitado quando o perfil é carregado, e a rotação é desligada para ele, com o
motivo nos diagnósticos. app_%N%Y%m%d.log contra app_1220260730.log pode ser
lido de várias formas, e escolher uma em silêncio desordenaria o conjunto sem nada
na tela para explicar. Ponha qualquer caractere literal entre eles — todo esquema do
mundo real já faz isso.
O editor de perfis valida os dois nomes enquanto você digita, então um padrão recusado aparece ali e não na hora de abrir.
Dividindo por execução do aplicativo¶
Uma execução é uma vida do aplicativo do início ao fim, e não é a mesma coisa que um arquivo: a rotação por tamanho corta uma execução em vários arquivos, e um log que só rotaciona por tamanho pode conter várias execuções em um arquivo.
Se o log imprime uma linha ao iniciar — Volluto logging system started…, Begin
file log, o cartaz de um framework —, ponha uma expressão regular que corresponda a
ela no runStartMarker do perfil. Clicar com o botão direito em uma pista na
linha do tempo então oferece Dividir por execução do aplicativo, e cada execução
vira a própria pista. A entrada só aparece quando os registros realmente contêm mais
de uma execução.
Sem um marcador, os limites só podem ser adivinhados a partir de lacunas de tempo, e esse palpite vem desligado por padrão, de propósito. Execução é um conceito dos logs de aplicativo; nginx, apache, syslog e logs de contêiner são serviços contínuos sem execuções, e uma noite tranquila seria lida, do contrário, como centenas de reinícios. Onde o palpite é usado, ele se adapta ao ritmo do próprio log e é descartado de vez se produzir execuções curtas demais para serem reais.
O tempo correndo para trás dentro de uma fonte é sempre tratado como um limite e sempre reportado — isso significa ou um reinício, ou segmentos postos na ordem errada, e vale a pena saber das duas coisas.
Temas¶
As cores por nível vêm do tema — o plugin registra uma categoria de paleta por nível canônico, o Editor de temas as expõe, e qualquer tema pode substituí-las. Trocar de tema atualiza a coluna de nível, a faixa da linha do tempo, o painel de estatísticas e o diagrama de sequência ao mesmo tempo.
Veja também¶
- Comparar / diff — a janela de Comparação de diferenças na qual as janelas do Analisador de logs são modeladas.
- Registro e diagnóstico — o próprio arquivo de log do editor (separado da visão do Analisador de logs sobre formatos de log arbitrários).