Spring Cloud Sleuth: Uma bênção para depurar o aplicativo.

Vaibhav Dubey Blocked Unblock Seguir Seguindo 26 de dezembro de 2018

Olá a todos,
Neste artigo, compartilharei detalhes sobre o framework Spring-cloud-sleuth e como ele resolve o problema de depuração para os desenvolvedores. Em vez de usar o aplicativo sleuth, que pode ser seguido na documentação https://cloud.spring.io/spring-cloud-sleuth/single/spring-cloud-sleuth.html , este artigo ajudará você a entender como o sleuth funciona internamente.

Investigar:
O Spring-cloud-sleuth é usado para rastrear a propagação de solicitações nos micro-serviços. É usado junto com os logs para rastrear a solicitação. Nisto nós criamos o id do traço e o id da extensão que são adicionados com o log que é usado no debugging do fluxo.

Componentes Principais:
Span – A unidade básica de trabalho. Para cada processo, um novo span-id é criado.
trace – Um conjunto de vãos formando uma estrutura semelhante a uma árvore. trace-id é um id atribuído a um único pedido, job ou thread de ação específico.

Declaração do problema:

Nós temos um problema que existem múltiplos micro-serviços que estão sendo usados pelo sistema. E esses sistemas irão interagir entre si para dar resultado ou solução. Mas quando existe tal sistema, a depuração se torna muito difícil para o desenvolvedor.
Outro problema é se a aplicação ou alguns micro-serviços estão operando de forma assíncrona, então, detectar qual a solicitação que está sendo executada e que causou a saída a seguir é extremamente desafiadora.

Solução:

O que o Sleuth faz é criar um ID de rastreamento que seja exclusivo e comum para o fluxo de solicitação. Outro span-id é criado, o que é diferente para cada unidade de trabalho. Então, enquanto Logging, nós adicionamos esses id de span e id de rastreio às instruções de log. Também em caso de micro-serviços, passamos esses ids e nossa chave personalizada (se necessário) em cada salto de micro-serviço para micro-serviço.
Agora que todas as instruções de log possuem esses rastreio-id (único e comum para o fluxo) e span-id. Nós fazemos o grep do Logs para este trace-id e depois rastreamos o fluxo de requisição específico. Isso torna a depuração mais fácil para os desenvolvedores que usam logs.

Como funciona internamente:

Como dito anteriormente, Ele cria uma estrutura parecida com uma árvore, com cada nó tendo ids de span diferentes com id de rastreio comum, que por acaso é id de span do nó raiz (isto é, ponto inicial do fluxo de solicitação).

Árvore como estrutura de detetive para rastreamento.

No diagrama acima, suponha que a árvore acima seja uma lista de processos ou micro-serviços.

Aqui, nosso usuário interage com o micro-serviço A. Um de cada vez interage com outros micro-serviços que, por sua vez, interagem com os outros. Suponha também que tudo está acontecendo de forma assíncrona e a cada minuto centenas de solicitações estão chegando. Agora, para rastrear o erro e fluir para ele é a nossa declaração de problema.

Suponhamos que ocorreu um erro para uma solicitação específica no nó F. Nas instruções de log, obtemos erro e a razão do erro, mas precisamos filtrar o fluxo de saída para isso. Para isso, usamos o comando grep para filtrar os logs para obter o ID de rastreio "a" e obtemos todos os logs relacionados a esse fluxo de solicitação específico. Assim, torna o nosso lote de filtragem / depuração mais fácil.

Como o Sleuth consegue isso é criar uma estrutura parecida com uma árvore, com cada nó tendo um span-id único e o root passando o id único (para o fluxo de requisição) enquanto se comunica com outros micro-serviços em cada hop. Esse id exclusivo é armazenado como atributo trace-id no MDC em instruções de log, que é finalmente usado para filtrar o fluxo de solicitação.

O diagrama abaixo está sendo adicionado a partir da página docs, que é auto-explicativa, e mostra a arquitetura de micro-serviço onde o detetive é usado para identificar o fluxo de solicitação como trace-id e span-id são criados.

Traçando usando o detetive. Diagrama tirado da documentação do spring-cloud-sleuth.

Este artigo dá uma breve compreensão de como o detetive trabalha internamente. Para entrar em mais profundidade, recomendo a documentação.