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
Você pode selecionar o cluster que deseja operar no campo Cluster:, localizado no canto superior direito da tela.
  • Para visualizar a listagem de itens de rastreamento, é necessário que seu usuário tenha ao menos a permissão List Tracing ativada no Sensedia Access Control.

  • Para visualizar os spans das chamadas, é necessário possuir a permissão Read 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 chamadas e filtros de busca

A tela Tracing mostra uma listagem de chamadas 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.

  • Tags: possibilita filtrar os itens utilizando tags mapeadas pelo Jaeger. Informe cada tag como um par chave=valor e pressione ENTER. Valores contendo espaços devem ser informados entre aspas. Ex.: error=true, db.statement="select * from User", http.status_code=200, http.method=GET

  • Min span duration: filtrar os itens por duração mínima de span (em milissegundos).

  • Max span duration: filtrar os itens por duração máxima de span (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 as seguintes informações (colunas):

  • RECEIVED AT: a data e o horário em que a chamada foi recebida;

  • OPERATION: se uma operação tiver sido selecionada no campo de filtragem correspondente, essa coluna a indicará;

  • SPANS: a quantidade de spans que forma o rastreamento total para a chamada;

  • SERVICES: os serviços envolvidos na chamada;

  • DURATION: a duração total do rastreamento (em milissegundos).

Por padrão, as chamadas são listadas em ordem decrescente de acordo com a data e o horário em que foram recebidas (isto é, as chamadas mais recentes são exibidas no topo da lista).

Você pode ordená-las de forma crescente/decrescente de acordo com a data e o horário de recebimento clicando no cabeçalho da coluna RECEIVED AT ou de forma crescente/decrescente de acordo com a duração total do rastreamento clicando no cabeçalho da coluna DURATION.

tracing ordering

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

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.

  • Trace Start: data e horário do início do rastreamento.

  • 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

Share your suggestions with us!
Click here and then [+ Submit idea]