Introdução
No ambiente de microsserviço, uma solicitação pode causar dezenas ou centenas de chamadas entre os serviços do lado do servidor. No momento, quando há um problema, há algumas questões que devemos considerar:
- Como localizar rapidamente o problema?
- Quais serviços estão envolvidos no problema?
- Qual serviço está com problema?
No momento, o rastreamento de link distribuído (Spring Cloud Sleuth) pode nos ajudar a resolver o problema.
Diagrama esquemático do site oficial:
diagrama esquemático simples:
Glossário:
- Trace: um conjunto de Span semelhante a uma estrutura de árvore, que representa um link de chamada e tem um identificador exclusivo
- span: indica a origem do link de chamada. Um entendimento popular de span é uma solicitação de informações.
Simples de usar
Primeiro crie um projeto e introduza as seguintes dependências:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
Configure um nome para o serviço atual para facilitar o teste:
spring.application.name=sleuth-hello
Crie um testeHelloController
@RestController
public class HelloController {
public static final Logger logger = LoggerFactory.getLogger(HelloController.class);
@GetMapping("/hello")
public void hello1(){
logger.info("hello spring cloud sleuth");
}
}
Em seguida, inicie o /hello
teste de interface de chamada do projeto e você poderá ver o seguinte log no console: O
último false
significa: se a informação deve ser enviada para serviços como o Zipkin para coleta e exibição.
Defina mais duas interfaces e hello2
ligue para hello3
formar uma cadeia de chamadas:
@GetMapping("/hello2")
public String hello2() throws InterruptedException {
logger.info("hello2");
Thread.sleep(500);
return restTemplate.getForObject("http://localhost:8080/hello3",String.class);
}
@GetMapping("/hello3")
public String hello3() throws InterruptedException {
logger.info("hello3");
Thread.sleep(500);
return "hello3";
}
Reinicie e chame a interface hello2
Um rastreamento é composto de vários spans, um rastreamento é equivalente a uma cadeia de chamadas e um intervalo é cada processo de chamada nesta cadeia.
Integração com Zipkin
O Zipkin é um sistema de rastreamento distribuído de código aberto, com código aberto do Twitter, dedicado a coletar dados de tempo de serviço para resolver o problema de atraso na arquitetura de microsserviço, incluindo coleta, armazenamento, pesquisa e exibição de dados.
Prepare o ambiente
Após a versão Spring Cloud H, não há necessidade de instalar Elasticsearch, Zipkin e outros pacotes tão pesados quanto antes. Só precisa baixar um pacote jar para começar. Endereço para download https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
Comece após fazer o download do
servidor View http: // localhost: 9411 /
Integração
Adicionar dependência:
<!--包含了sleuth+zipkin-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
Adicionar arquivo de configuração:
# zipkin/sleuth 地址
spring.zipkin.base-url=http://localhost:9411
# 配置采样比例 默认0.1
spring.sleuth.sampler.rate=1
Reinicie o projeto, chame a /hello2
interface e verifique o rastreamento da chamada em http: // localhost: 9411 /