# springcloud-zipkin **Repository Path**: ziyinjava/springcloud-zipkin ## Basic Information - **Project Name**: springcloud-zipkin - **Description**: 基于zipkin实现服务链路追踪监控 - **Primary Language**: Java - **License**: AFL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-10-11 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **Zipkin链路追踪与监控** --- - **文章目录** * [1\. 分布式链路监控与追踪产生背景](#1-%E5%88%86%E5%B8%83%E5%BC%8F%E9%93%BE%E8%B7%AF%E7%9B%91%E6%8E%A7%E4%B8%8E%E8%BF%BD%E8%B8%AA%E4%BA%A7%E7%94%9F%E8%83%8C%E6%99%AF) * [2\. zipkin框架介绍](#2-zipkin%E6%A1%86%E6%9E%B6%E4%BB%8B%E7%BB%8D) * [3\. zipkin部署](#3-zipkin%E9%83%A8%E7%BD%B2) * [3\.1 docker](#31-docker) * [3\.2 jar包运行](#32-jar%E5%8C%85%E8%BF%90%E8%A1%8C) * [3\.3 源码编译](#33-%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91) * [4\. 项目构建](#4-%E9%A1%B9%E7%9B%AE%E6%9E%84%E5%BB%BA) * [4\.1 zipkinp\-server](#41-zipkinp-server) * [4\.2 zipkin\-comsumber](#42-zipkin-comsumber) * [4\.3 zipkin\-provider](#43-zipkin-provider) * [4\.4 启动部署](#44-%E5%90%AF%E5%8A%A8%E9%83%A8%E7%BD%B2) # 1. 分布式链路监控与追踪产生背景 > 在微服务系统中,随着业务的发展,系统会变得越来越大,那么各个服务之间的调用关系也就变得越来越复杂。一个 HTTP 请求会调用多个不同的微服务来处理返回最后的结果,在这个调用过程中,可能会因为某个服务出现网络延迟过高或发送错误导致请求失败,这个时候,对请求调用的监控就显得尤为重要了。Spring Cloud Sleuth 提供了分布式服务链路监控的解决方案。 # 2. zipkin框架介绍 ![](http://image.focusprogram.top/20200506154252.png) > [zipkin](https://zipkin.io/)是 Twitter 的一个开源项目,它基于 Google Dapper 实现的。我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的 REST API 接口来辅助查询跟踪数据以实现对分布式系统的监控程序,从而及时发现系统中出现的延迟过高问题。除了面向开发的 API 接口之外,它还提供了方便的 UI 组件来帮助我们直观地搜索跟踪信息和分析请求链路明细,比如可以查询某段时间内各用户请求的处理时间等。 > > Zipkin 和 Config 结构类似,分为服务端 Server,客户端 Client,客户端就是各个微服务应用。 # 3. zipkin部署 ## 3.1 docker 以下两种部署方式均可: ``` $ docker run -d -p 9411:9411 openzipkin/zipkin ``` ``` $ vim docker-compose.yml version: '3' services: web: image: openzipkin/zipkin hostname: zipkin container_name: zipkin ports: - 9400:9411 environment: - STORAGE_TYPE=mysql - MYSQL_DB=zipkin - MYSQL_USER=root - MYSQL_PASS=root - MYSQL_HOST=114.55.34.44 - MYSQL_TCP_PORT=3306 - SET_CONTAINER_TIMEZONE=true - CONTAINER_TIMEZONE=Asia/Shanghai volumes: - /etc/localtime:/etc/localtime - /etc/timezone:/etc/timezone networks: default: ipv4_address: 172.18.0.11 restart: always networks: default: external: name: mynetwork $ docker-compose up -d ``` ## 3.2 jar包运行 ``` $ curl -sSL https://zipkin.io/quickstart.sh | bash -s $ java -jar zipkin.jar ``` ## 3.3 源码编译 ``` # get the latest source $ git clone https://github.com/openzipkin/zipkin $ cd zipkin # Build the server and also make its dependencies $ ./mvnw -DskipTests --also-make -pl zipkin-server clean install # Run the server $ java -jar ./zipkin-server/target/zipkin-server-*exec.jar ``` # 4. 项目构建 - **项目模块分为** - zipkin-server zipkin 服务监控 - zipkin-consumer 服务消费者 - zipkin-provider 服务提供者 ## 4.1 zipkinp-server 引入maven依赖 ``` org.springframework.boot spring-boot-starter-parent 1.5.2.RELEASE org.springframework.cloud spring-cloud-dependencies Camden.SR6 pom import org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web io.zipkin.java zipkin-server io.zipkin.java zipkin-autoconfigure-ui ``` 编辑配置文件application.yml ``` server: port: 9411 ``` 编辑启动主类ZipkinServerApplication ``` @SpringBootApplication @EnableZipkinServer public class ZipkinServerApplication { public static void main(String[] args) { SpringApplication.run(ZipkinServerApplication.class, args); } } ``` ## 4.2 zipkin-comsumber 引入maven依赖 ``` org.springframework.cloud spring-cloud-starter-zipkin ``` 编辑配置文件 ``` server: port: 9100 spring: application: name: zipkin-consumer # 指定zipkin的地址 zipkin: base-url: http://114.55.34.44:9400 #base-url: http://localhost:9411 # 默认sleuth收集信息的比率是0.1 sleuth: sampler: percentage: 1 ``` 编辑启动主类ZipkinConsumerApplication ``` @SpringBootApplication public class ZipkinConsumerApplication { public static void main(String[] args) { SpringApplication.run(ZipkinConsumerApplication.class, args); } @Bean public RestTemplate getRestTemplate() { return new RestTemplate(); } // 指定sleuth收集比率,解决sleuth收集问题 // @Bean // public AlwaysSampler defaultSampler(){ // return new AlwaysSampler(); // } } ``` 编辑ConsumerController ``` @RestController public class ConsumerController { private static final Logger LOG = Logger.getLogger(ConsumerController.class.getName()); @Autowired private RestTemplate restTemplate; @RequestMapping("/consumer") public String callHome() { LOG.log(Level.INFO, "请求 service-consumer"); LOG.log(Level.INFO, "远程调用:http://localhost:9200/provider"); return restTemplate.getForObject("http://localhost:9200/provider", String.class); } @RequestMapping("/consumerInfo") public String info() { LOG.log(Level.INFO, "请求 service-consumer"); return "i'm service-consumer"; } } ``` ## 4.3 zipkin-provider 引入maven依赖 ``` org.springframework.cloud spring-cloud-starter-zipkin ``` 编辑配置文件 ``` server: port: 9200 spring: application: name: zipkin-consumer # 指定zipkin的地址 zipkin: base-url: http://114.55.34.44:9400 #base-url: http://localhost:9411 # 默认sleuth收集信息的比率是0.1 sleuth: sampler: percentage: 1 ``` 编辑主启动类ZipkinProviderApplication ``` @SpringBootApplication public class ZipkinProviderApplication { public static void main(String[] args) { SpringApplication.run(ZipkinProviderApplication.class, args); } @Bean public RestTemplate getRestTemplate() { return new RestTemplate(); } } ``` 编辑ProviderController ``` @RestController public class ProviderController { private static final Logger LOG = Logger.getLogger(ProviderController.class.getName()); @Autowired private RestTemplate restTemplate; @RequestMapping("/provider") public String callHome() { LOG.log(Level.INFO, "请求 service-provider"); LOG.log(Level.INFO, "远程调用:http://localhost:9100/consumerInfo"); return restTemplate.getForObject("http://localhost:9100/consumerInfo", String.class); } @RequestMapping("/providerInfo") public String info() { LOG.log(Level.INFO, "请求 service-provider "); return "i'm service-provider"; } } ``` ## 4.4 启动部署 分别依次启动三个项目,然后访问 ``` $ curl http://localhost:9100/consumer ``` ![](http://image.focusprogram.top/20200506160018.png) 访问zipkin服务监控地址 [https://www.focusprogram.top/zipkin](https://www.focusprogram.top/zipkin) ![](http://image.focusprogram.top/20200506160218.png) ![](http://image.focusprogram.top/20200506160257.png)