- Modo de distribuição (sempre ativo): quando não há nenhuma seleção no heatmap, a distribuição de valores de cada atributo é exibida para a população atual de spans. Útil para identificar valores dominantes ou incomumente raros (outliers de cardinalidade).
- Modo de comparação: arraste um retângulo no heatmap para comparar os spans dentro da seleção (Selection) com tudo o que está fora dela (Background). Útil para isolar desvios.
- Drill-down iterativo: clique em qualquer barra para filtrar (ou excluir) esse valor. O heatmap é renderizado novamente com base na população filtrada, para que você possa continuar refinando até que a causa fique óbvia.
Pré-requisitos
Primeiros passos
- No menu suspenso Fonte de dados, selecione uma fonte que contenha traces. Os nomes das fontes são arbitrários; o que importa é que a fonte esteja configurada como do tipo Trace. A aba Event deltas só fica habilitada para essas fontes.
- Na seção Modo de análise, clique na aba Event deltas.
O heatmap
- Eixo X: tempo
- Eixo Y: um valor numérico, que por padrão é a duração do span em milissegundos (escala logarítmica)
Modo de distribuição: valores atípicos de cardinalidade
- Altas: quais serviços, endpoints, códigos de status ou hosts dominam sua população de spans? Muitas vezes, isso revela um único tenant, versão ou rota concentrando a maior parte do tráfego.
- Baixas: valores que ocorrem, mas raramente. Um código de status que aparece em apenas
0.5%dos spans, ou um host que mal aparece, pode ser o sinal mais interessante. É na cauda longa que regressões e agentes maliciosos se escondem.
Modo de comparação: desvios em relação ao normal
Caso de uso 1: antes vs. depois de uma regressão
SpanKind, SpanName e ScopeName mostram, cada um, uma divisão nítida em laranja vs. verde entre a Selection lenta e o Background saudável. Em conjunto, eles mostram a assinatura do que mudou no ponto de inflexão.
Esse é o formato certo quando você quer perguntar “o que mudou?”. Uma variante mais específica usa o mesmo fluxo de trabalho: quando um pequeno grupo de spans lentos aparece em uma faixa que, fora isso, está estável (um breve surto na borda direita, um agrupamento no meio de um período estável), desenhe uma pequena caixa apenas ao redor desse agrupamento. O formato muda a pergunta: uma faixa vertical pergunta o que mudou ao longo do tempo; uma pequena caixa focada pergunta o que há de especial neste agrupamento.
Caso de uso 2: Lento versus rápido
Drill-down iterativo
- Filter: manter apenas spans com este valor
- Exclude: remover spans com este valor
- Copy: copiar o valor para a área de transferência
Buckets agregados Other (N) que agrupam valores de baixa frequência não são clicáveis. Para filtrar um valor específico dentro desse bucket, use a barra de busca diretamente.
Personalize o heatmap
| Parâmetro | Padrão | Descrição |
|---|---|---|
| Scale | Log | Log lida bem com faixas amplas de latência; Linear é melhor para distribuições estreitas e uniformes. |
| Value | (Duration)/1e6 | Qualquer expression numérica: tamanho da resposta, taxa de erro ou um attribute personalizado do span. |
| Count | count() | aggregation usada para a cor. Mude para avg(), sum(), p95() ou expressions como countDistinct(field). |
- Mude Scale para Linear quando a faixa de latência for estreita (por exemplo, um service cujos spans ficam todos entre 5 e 50 ms). A escala Log desperdiça espaço vertical na parte superior, onde não há dados.
- Plote algo diferente de Duration no eixo Y. Definir Value como
SpanAttributes.http.response.sizepermite investigar respostas grandes lentas; uma expression comoif(StatusCode = 'Error', 1, 0)plota a frequência de erro ao longo do tempo entre services. - Use cor com base em algo diferente de count. Definir Count como
p95(Duration)colore cada bucket pela tail latency em vez do volume, destacando bolsões raros, mas lentos, que uma visualização baseada em contagem acaba ocultando.countDistinct(TraceId)distingue o volume de traces do volume de spans quando um trace produz muitos spans.
Dicas para uso eficaz
- Primeiro, filtre para um único serviço. A latência varia bastante entre serviços, e misturá-los acaba mascarando o sinal. Use a barra de busca para restringir a um
ServiceName(ou a um endpoint) antes de começar, para que o heatmap e as distribuições reflitam uma população comparável. - Escolha seleções com contraste visual nítido. O modo de comparação funciona melhor quando a faixa de Selection é visivelmente distinta do Background, por exemplo, um período degradado que começa em um momento facilmente reconhecível ou uma cauda lenta claramente separada da maior parte dos dados. Seleções que se sobrepõem demais ao restante dos dados tendem a destacar ruído, e não o desvio real.
- Repita: filtro, heatmap, filtro. Uma única seleção raramente identifica a causa. Trate a primeira comparação como uma hipótese, aplique um filtro ao valor mais divergente e reavalie o novo heatmap e as distribuições. Duas ou três iterações normalmente reduzem uma regressão a um ou dois atributos.
- Use o modo de distribuição sem uma seleção quando ainda não houver contraste visível (você sabe que há um problema, mas o heatmap parece uniforme). Aplique um filtro baseado em uma hipótese, como apenas spans com erro, apenas spans de cliente ou apenas um endpoint, e deixe que as distribuições de atributos indiquem os valores de maior impacto antes de desenhar qualquer retângulo.