Zipkin,是一种分布式跟踪系统。它有助于收集解决微服务架构中的延迟问题所需的时序数据。它管理这些数据的收集和查找。 Zipkin的设计基于Google Dapper论文。
在内部它有4个模块
- Collector - 一旦任何组件将跟踪数据发送到Zipkin收集器守护程序,它就会被Zipkin收集器验证,存储和索引以供查找。
- Storage - 此模块在后端存储和索引查找数据。 支持Cassandra,ElasticSearch和MySQL。
- Search - 此模块提供了一个简单的JSON API,用于查找和检索存储在后端的跟踪。 此API的主要使用者是Web UI。
- Web UI - 用于查看跟踪的非常好的UI界面。
安装
curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar
Sleuth
Sleuth是Spring Cloud家族的一款工具。 它用于生成trace id,span id并将这些信息添加到头文件和MDC中的服务调用中,以便它可以被Zipkin和ELK等工具使用。
Zipkin 和Sleuth 集成
创建微服务
创建Spring boot 应用 添加 Web, Rest Repository, Zipkinclient 和Sleuth 依赖.
package com.jaytech.mstracing.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpMethod;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.logging.Logger;
@RestController
public class ZipkinController {
@Autowired
RestTemplate restTemplate;
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
private static final Logger LOG = Logger.getLogger(ZipkinController.class.getName());
@GetMapping(value="/zipkin")
public String zipkinService1()
{
LOG.info("Inside zipkinService 1..");
String response = (String) restTemplate.exchange("http://localhost:8082/zipkin2",
HttpMethod.GET, null, new ParameterizedTypeReference<String>() {}).getBody();
return "Hi..get response from zipkin2";
}
}
在aplication.perporties 文件中配置zipkin client 可以链接到 zipkin server,这样就可以client 就会发送监控数据到server端
spring.zipkin.baseUrl = http://192.168.148.141:9411/
spring.zipkin.locator.discovery.enabled = true
spring.zipkin.enabled = true
spring.sleuth.sampler.probability=1
spring.zipkin.sender.type=web
类似的添加zipkin2,zipkin3
调用为服务观察zipkin信息
访问http://127.0.0.1:8081/zipkin 微服务 然后打开zipkin server 可以看到跟踪信息如图: