Tracing

A tela Tracing oferece dados de rastreamento dos serviços de um mesh, no nível do serviço como um todo ou de uma operação específica.

tracing

Rastreamento distribuído

Quando uma aplicação é composta de microsserviços, é comum que uma requisição passe por inúmeros serviços desde sua entrada em um service mesh até sua conclusão. Junte-se a isso o fato de que você pode contar com versões diferentes de um mesmo serviço em produção — na forma de uma Canary Release, por exemplo — ou sendo testadas, e temos um grande sistema distribuído em que pontos diferentes podem falhar e essa falha pode ser propagada para outros componentes.

Nesse caso, precisamos de um rastreamento também distribuído, capaz de nos mostrar a latência na comunicação entre os diversos componentes de um mesh e apontar os locais em que há um problema. Quando observamos toda a cadeia de requisições internas, conseguimos identificar como uma falha em um serviço A poderá afetar um serviço B e, assim, tomar medidas para melhorar a performance de todo o nosso sistema.

Funcionamento

Mas como esse rastreamento distribuído funciona?

A solução de rastreamento do Sensedia Mesh foi construída em cima do Jaeger, tendo como base a especificação OpenTracing.

De forma geral, o rastreamento ocorre dessa forma:

Quando um serviço A tem que chamar um serviço B, o sidecar do serviço A embute as informações do contexto ao payload na forma de um header HTTP e as envia ao serviço B. Por sua vez, o serviço B propaga esses headers — adicionando informações de contexto — ao serviço C e assim por diante. As informações de rastreamento são armazenadas em uma estrutura de dados que se chama span. O rastreamento de uma chamada é composto de vários spans, cada um representando uma comunicação interna. E quando você acessa as informações de um serviço na tela Tracing, consegue observar cada span gerado quando uma requisição passou por aquele serviço. Juntando os spans de uma chamada (ou seja, as diversas operações entre serviços internos), é possível identificar todos os passos, e a latência de cada passo, desde o recebimento da requisição até a finalização da chamada.

As proxies do Istio conseguem enviar os headers HTTP de rastreamento automaticamente. Entretanto, para que as informações de rastreamento sejam geradas de forma unificada, mostrando todo o caminho de uma requisição de serviço em serviço, é necessário que as suas aplicações consigam receber e propagar os headers. Veja mais sobre essa configuração do Istio aqui.

Listagem de spans e filtros de busca

A tela Tracing mostra uma listagem de spans a partir de filtros de busca.

filters

Se você escolher um mesh e um serviço, já visualizará a listagem de itens de rastreamento. Esses itens se referirão às chamadas que passaram pelo serviço escolhido no período de tempo considerado e incluirão os vários spans gerados na comunicação entre os serviços. Entretanto, você pode customizar a lista retornada com base nos outros campos.

  • Mesh:campo obrigatório para selecionar um mesh como base.

  • Service: campo obrigatório para selecionar o serviço que se deseja observar.

  • Operations: você pode selecionar uma operação específica para visualizar os spans. Caso você deixe esse campo em branco, visualizará as informações referentes a todas as operações do serviço.

  • Lookback: você pode inserir aqui um período específico de tempo para filtrar as informações. Opções: último minuto, últimos 5, 10 ou 30 minutos, última hora, últimas 3 ou 6 horas. O tempo padrão, caso nenhuma opção seja escolhida, são as últimas 48 horas.

  • Min Duration: filtrar os itens por duração mínima da chamada total (em milissegundos).

  • Max Duration: filtrar os itens por duração máxima da chamada total (em milissegundos).

  • Limit: campo obrigatório para digitar o número máximo de itens a serem retornados na lista. Por padrão, o campo conterá o valor 20, mas você pode alterá-lo. Note, contudo, que um valor muito alto poderá acarretar em demora para efetuar a busca.

A lista de itens mostra a data em que a chamada foi recebida, a quantidade de spans que forma rastreamento total para a chamada, os serviços envolvidos na chamada e a duração total do rastreamento (em milissegundos). Se uma operação tiver sido selecionada, a coluna OPERATION a indicará.

Ao clicar no ícone icon tracing da coluna OVERVIEW, você será redirecionado à visualização dos spans para a chamada selecionada.

Visualizando spans

A tela de visualização de spans mostra duas seções de informações: dados básicos a respeito do rastreamento e a linha do tempo contendo spans que fazem referência uns aos outros, contando a história completa da chamada.

spans

Os dados básicos contêm:

  • Mesh: identifica o mesh ao qual o serviço faz parte.

  • Service: identifica o serviço que foi selecionado para filtrar as chamadas.

  • Operation: se houver sido selecionada na tela de listagem, identifica a operação escolhida.

  • Services: exibe a quantidade de serviços envolvidos na chamada em questão.

  • Total Spans: exibe o número total de spans que forma o rastreamento da chamada como um todo.

  • Duration: duração total do rastreamento.

A linha do tempo mostra o tempo total de rastreamento e pode ser expandida para exibir cada span, com seu tempo de duração e exibição de detalhes.

Vídeo: expandindo a linha do tempo

Veja o vídeo abaixo para ver as informações da linha de tempo.

Thanks for your feedback!
EDIT
How useful was this article to you?