Zipkin下载和启动
有三种安装方法:
Zipkin的使用比较简单,官网有说明几种方式:
1、容器 Docker Zipkin
项目能够建立docker
镜像,提供脚本和docker-compose.yml
来启动预构建的图像。最快的开始是直接运行最新镜像:
docker run -d -p 9411:9411 openzipkin/zipkin
2、下载jar
如果你有java 8或更高版本,上手最快的方法是把新版本作为一个独立的可执行jar,Zipkin使用springboot来构建的:
curl -sSL https://zipkin.io/quickstart.sh | bash -s java -jar zipkin.jar
3、下载源代码运行 Zipkin
可以从源运行,如果你正在开发新的功能。要实现这一点,需要获取Zipkin的源代码并构建它。
# 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
启动 查看运行效果
java -jar zipkin.jar
详细参考:https://zipkin.io/pages/quick…
六、入门示例
追踪服务包含下面几个服务:
1、注册中心 Eureka Server(可选的,只用于服务生产者和调用者注册)
2、Zipkin服务器
3、服务的生产者及服务的调用者:
1)服务的生产者、调用者是相对的,两者之间可以互相调用,即可以同时作为生产者和调用者,两者都是Eureka Client;
2)两者都要注册到注册中心上,这样才可以相互可见,才能通过服务名来调用指定服务,才能使用Feign或RestTemplate+Ribbon来达到负载均衡
3)两者都要注册到Zipkin服务器上,这样Zipkin才能追踪服务的调用链路
构建工程
一、Zipkin服务器
代码地址(码云):ZipkinServer: Zipkin服务器
1、新建一个普通的Spring Boot项目,工程取名为server-zipkin,在其pom引入依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dxz.serverzipkin</groupId>
<artifactId>serverzipkin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>server-zipkin</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.5.RELEASE</version> <!--配合spring cloud版本 -->
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<!--设置字符编码及java版本 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--增加zipkin的依赖 -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>
<!--用于测试的,本例可省略 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--依赖管理,用于管理spring-cloud的依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Brixton.SR3</version> <!--官网为Angel.SR4版本,但是我使用的时候总是报错 -->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<!--使用该插件打包 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2在其程序入口类, 加上注解@EnableZipkinServer,开启ZipkinServer的功能:
package com.dxz.serverzipkin;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import zipkin.server.EnableZipkinServer;
@EnableZipkinServer
@SpringBootApplication
public class ServerZipkinApplication {
public static void main(String[] args) {
SpringApplication.run(ServerZipkinApplication.class, args);
}
}
3在配置文件application.yml指定,配置Zipkin服务端口、名称等:
server.port=9411 spring.application.name=my-zipkin-server
启动后打开http://localhost:9411/可以看到 如下图,什么内容都没有,因为还没有任何服务注册到Zipkin,一旦有服务注册到Zipkin便在Service Name下拉列表中可以看到服务名字,当有服务被调用,则可以在Span Name中看到被调用的接口名字.
这里为了测试方便,我们可以将数据保存到内存中,但是生产环境还是需要将数据持久化的,原生支持了很多产品,例如ES、数据库等。
二服务生成者调用者
这两者配置是一样的此处简化,直接修改compute-server和feign-consumer两个服务,修改有两点:
1、pom增加
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
2、在其配置文件application.yml指定zipkin server的地址,头通过配置“spring.zipkin.base-url”指定:
spring.zipkin.base-url=http://localhost:9411
至此,可以开始测试Zipkin追踪服务了
三启动工程,演示追踪
启动顺序:注册中心(可选)->配置中心(可选)->Zipkin服务器->服务生产者及调用者
我们可以尝试调用生产者或调用者的接口,然后刷新Zipkin服务器页面,可以看到如下结果:
依次启动上面的三个工程,打开浏览器访问:http://localhost:9411/,会出现以下界面:
再打开http://localhost:9411/的界面,点击Dependencies,可以发现服务的依赖关系:
点击find traces,可以看到具体服务相互调用的数据:
可以看到,调用消费者(ribbon-consumer)耗时83ms,其中消费者调用生产者占了5ms,占比6%。
#sleuth采样率,默认为0.1,值越大收集越及时,但性能影响也越大
spring.sleuth.sampler.percentage=1
文章参考: