Skip to content

feat: navegação por correlação e leitura de tracing OpenTelemetry/Seq - #13

Merged
afernandes merged 1 commit into
mainfrom
feat/correlacao-observabilidade
Aug 8, 2026
Merged

feat: navegação por correlação e leitura de tracing OpenTelemetry/Seq#13
afernandes merged 1 commit into
mainfrom
feat/correlacao-observabilidade

Conversation

@afernandes

Copy link
Copy Markdown
Owner

Por quê

Um erro raramente se explica sozinho — o que interessa é a sequência que levou até ele. Até aqui o app só reconhecia X-Correlation-Id, e a única forma de seguir o rastro era filtrar a consulta, perdendo o contexto anterior. Logs produzidos por Serilog + OpenTelemetry (ou enviados ao Seq) já trazem trace/span, mas o ClefExplorer os tratava como propriedades comuns.

O que entra

Parser e exportação — campos reservados de tracing do CLEF
@tr, @sp, @ps e @st viram TraceId / SpanId / ParentSpanId / SpanStart em ClefEvent, fora de Properties para não virarem colunas dinâmicas comuns. @sk, @sc e @ra chegam em MetadadosClefObservabilidade. A exportação CLEF grava esses campos de volta, então exportar o conjunto filtrado e reabrir preserva a navegação.

NavegacaoCorrelacao
Monta a sequência de eventos que compartilham identificador com o evento de origem — sem tocar nos filtros da consulta atual. TraceId, SpanId, RequestId e CorrelationId são contratos próprios e valem sempre; outros nomes entram por alias configurável.

AnaliseTemporalCorrelacao
Classifica durações, intervalos entre eventos e a hierarquia pai/filho dos spans. Regra deliberada: duração só é duração quando o evento a declara (@st, campo OTLP, ou alias cujo valor traz unidade). Número solto nunca é convertido por inferência — senão a linha do tempo passaria a exibir um dado que ninguém publicou.

UI

  • Botão Correlação no detalhe do evento, quando há chave navegável.
  • Painel "Eventos correlacionados" com abas Sequência e Linha do tempo, e um popover explicando por qual campo/valor cada evento entrou.
  • Metadados de span no detalhe (operação, serviço, tipo, início, duração — com a origem da duração indicada).
  • Linhas correlacionadas destacadas na lista e na tabela.
  • Layout: à direita os painéis empilham (evita dois painéis estreitos); com o detalhe abaixo da lista, ficam lado a lado.

Configurações
Duas seções recolhíveis para aliases de correlação e de observabilidade (nome da operação, serviço, tipo do span, duração). Os campos padrão Seq/CLEF e OTLP continuam reconhecidos sem configuração alguma — o alias existe só para quem usa nomes próprios.

Testes

576 testes passando (dotnet test -c Release), incluindo três suítes novas: NavegacaoCorrelacaoTests, AnaliseTemporalCorrelacaoTests e LeituraMetadadosObservabilidadeTests.

🤖 Generated with Claude Code

Um erro raramente se explica sozinho: o que interessa é a sequência que levou
até ele. Até aqui só o "X-Correlation-Id" era clicável, e ainda assim o caminho
era filtrar a consulta — perdendo o contexto anterior.

O que entra:

- Campos reservados de tracing do CLEF no parser e na exportação: @tr, @sp, @ps
  e @st viram TraceId/SpanId/ParentSpanId/SpanStart em ClefEvent, fora de
  Properties para não virarem colunas dinâmicas. @sk, @sc e @ra chegam em
  MetadadosClefObservabilidade. Exportar e reabrir preserva a navegação.
- NavegacaoCorrelacao monta a sequência de eventos que compartilham
  identificador com o evento de origem, sem tocar nos filtros da consulta.
  TraceId, SpanId, RequestId e CorrelationId valem sempre; outros nomes entram
  por alias configurável.
- AnaliseTemporalCorrelacao classifica durações, intervalos e a hierarquia
  pai/filho. Duração só é duração quando o evento a declara (@st, campo OTLP ou
  alias com unidade) — número solto nunca é convertido por inferência, senão a
  linha do tempo passaria a mostrar um dado que ninguém publicou.
- UI: painel "Eventos correlacionados" com sequência e linha do tempo, spans no
  detalhe do evento e destaque das linhas correlacionadas na lista/tabela. À
  direita os painéis empilham; com o detalhe abaixo, ficam lado a lado.
- Configurações: aliases de correlação e de observabilidade, com os campos
  padrão reconhecidos sem configuração alguma.

576 testes passando.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings August 8, 2026 04:26

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Esta PR adiciona suporte completo a navegação por correlação e leitura/propagação de metadados de tracing (OpenTelemetry/Seq) no ClefExplorer, preservando campos reservados CLEF fora de Properties e habilitando UI dedicada para sequência e linha do tempo.

Changes:

  • Leitura e exportação de campos reservados de tracing do CLEF (@tr, @sp, @ps, @st) e extensões Seq (@sk, @sc, @ra) no modelo ClefEvent.
  • Implementação de navegação por correlação e análise temporal (sequência + hierarquia de spans + linha do tempo).
  • UI/Configurações: botão “Correlação”, painel “Eventos correlacionados”, destaque visual, e editor de aliases para correlação/observabilidade.

Reviewed changes

Copilot reviewed 31 out of 31 changed files in this pull request and generated no comments.

Show a summary per file
File Description
test/ClefExplorer.Tests/PersistenceTests.cs Testa persistência e normalização das novas configurações de aliases.
test/ClefExplorer.Tests/NavegacaoCorrelacaoTests.cs Testa extração e localização de eventos correlacionados (trace/span/request/correlation).
test/ClefExplorer.Tests/LogExporterTests.cs Garante exportação e roundtrip dos novos campos reservados CLEF/Seq.
test/ClefExplorer.Tests/LeituraMetadadosObservabilidadeTests.cs Valida extração de metadados OTLP/Seq e aliases configurados.
test/ClefExplorer.Tests/LeitorClefTests.cs Amplia validações do leitor para novos campos reservados e preservação fora de Properties.
test/ClefExplorer.Tests/AnaliseTemporalCorrelacaoTests.cs Testa cálculo de intervalos/durações e construção de hierarquia de spans.
src/wwwroot/css/app.css Estilos para destaques correlacionados, painel de correlação, linha do tempo e editor de aliases.
src/Services/SettingsService.cs Normaliza settings no save/load para deduplicar/limpar aliases.
src/Services/NavegacaoCorrelacao.cs Serviço de navegação por correlação (extração/normalização de identificadores e busca na amostra).
src/Services/LogExporter.cs Exporta trace/span e extensões Seq como campos reservados no CLEF.
src/Services/LeituraMetadadosObservabilidade.cs Converte Seq/CLEF + OTLP conhecidos + aliases em metadados unificados para UI.
src/Services/LeitorClef.cs Passa a ler/validar @tr/@sp/@ps/@st e @sk/@sc/@ra para o modelo.
src/Services/AnaliseTemporalCorrelacao.cs Classifica itens temporais e monta árvore pai/filho de spans + anexação de logs.
src/Program.cs Registra os novos serviços no DI container.
src/Models/Settings.cs Adiciona seções Correlacao e Observabilidade + normalização.
src/Models/ResultadoNavegacaoCorrelacao.cs Modelos para resultado de correlação (identificadores e eventos com correspondências).
src/Models/ResultadoAnaliseTemporalCorrelacao.cs Modelos para resultado temporal (itens, janela e flags de tipos de medida).
src/Models/NoHierarquiaSpan.cs Modelo de nó imutável para a hierarquia do trace.
src/Models/MetadadosObservabilidadeEvento.cs Modelo normalizado de metadados de observabilidade (origem de duração + início/fim).
src/Models/MetadadosClefObservabilidade.cs Modelo para extensões reservadas Seq/CLEF (@sk/@sc/@ra).
src/Models/ClefEvent.cs Inclui propriedades de trace/span e observabilidade fora de Properties.
src/Helpers/FormatacaoTempo.cs Formatação compacta de intervalos (usada na UI da linha do tempo).
src/Components/SettingsDialog.razor Adiciona seções recolhíveis para aliases de correlação e observabilidade.
src/Components/ObservabilityAliasEditor.razor Novo componente para editar listas de aliases (add/remove).
src/Components/LogViewer.razor Integra o fluxo de busca/cancelamento de correlação + painel “Eventos correlacionados”.
src/Components/LogList.razor Destaca itens correlacionados e inclui indicação no rótulo acessível.
src/Components/LogGrid.razor Destaca linhas correlacionadas na tabela.
src/Components/LogDetails.razor Botão “Correlação”, exibição de metadados de span e chips para correlação/OTel.
src/Components/LogCorrelationTiming.razor Novo componente de linha do tempo/hierarquia (tree) para correlação.
src/Components/LogCorrelationNavigator.razor Novo painel com abas de sequência e tempos + popover de critérios.
README.md Documenta navegação por correlação, linha do tempo de spans e aliases.
Suppressed comments (1)

src/Components/LogDetails.razor:146

  • A UI agora divide por vírgula qualquer campo reconhecido como CorrelationId (via EhCampoCorrelacao). Isso contradiz a regra implementada em NavegacaoCorrelacao (apenas X-Correlation-Id é cabeçalho concatenado) e pode quebrar IDs válidos que contenham vírgulas.
                                    else if (Navegacao.EhCampoCorrelacao(p.Key) && p.Value is ScalarValue svCorr && svCorr.Value is string sCorr)
                                    {
                                        var ids = sCorr.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
                                        <div class="clef-chips">
                                            @foreach (var id in ids)

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@afernandes
afernandes merged commit e40beb5 into main Aug 8, 2026
2 checks passed
@afernandes
afernandes deleted the feat/correlacao-observabilidade branch August 8, 2026 04:30
afernandes added a commit that referenced this pull request Aug 8, 2026
Navegação por correlação e leitura de tracing OpenTelemetry/Seq (PR #13):
trace/span deixam de ser propriedade comum e passam a montar a sequência de
eventos de uma requisição, com linha do tempo e hierarquia pai/filho.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants