O Que É um Span? A Unidade de um Trace Explicada
Um span é uma única operação nomeada e cronometrada dentro de um trace, o bloco de construção básico que, combinado com outros spans, forma a imagem completa de uma requisição.
Se um trace é a história de uma requisição, um span é uma frase dela. Spans são onde o tempo e o detalhe reais do tracing distribuído vivem. Entender spans é a chave para ler qualquer trace, porque tudo o que um trace lhe diz é a soma de seus spans.
O que um span captura
Um span registra o nome de uma operação, seus tempos de início e fim (e portanto sua duração), e seu status: sucesso ou erro. Ele também carrega identificadores, seu próprio span ID, o parent span ID e o trace ID compartilhado, que permitem posicioná-lo corretamente dentro da árvore do trace.
Atributos e events
Spans mantêm atributos, pares chave-valor que descrevem a operação, como o método HTTP, a instrução de banco de dados ou um nome de job. Eles também podem registrar events: pontos com timestamp dentro do span, como um retry ou um cache miss. Esses detalhes são o que transforma uma medição de tempo pura em algo diagnóstico.
Aninhamento e a árvore de spans
Spans formam uma hierarquia pai-filho. Um span de requisição pode ter spans filhos para cada chamada downstream, e esses filhos seus próprios filhos. O aninhamento codifica causalidade e tempo: você pode ver quais operações aconteceram dentro de quais, e quais rodaram em paralelo versus em sequência.
Root e child spans
O root span é aquele sem pai, representando toda a operação, a requisição de entrada ou a execução inteira do pipeline. Todo outro span descende dele. A duração do root span é o tempo total da operação, e os child spans explicam como esse tempo foi distribuído.
Spans no CI/CD
Quando você rastreia um pipeline, cada job ou passo se torna um span: a execução é o root span, jobs são seus filhos, e passos são deles. Durações e status de spans então mostram precisamente qual passo é lento ou está falhando, o equivalente de build de encontrar a chamada gargalo em um trace de requisição.
Principais conclusões
- Um span é uma operação nomeada e cronometrada dentro de um trace.
- Spans carregam atributos, events e IDs de parent/trace.
- Eles se aninham em uma árvore que codifica causalidade e tempo.
- Em um pipeline rastreado, jobs e passos mapeiam para spans.