Sleuth整合Zipkin 服务

1 Zipkin服务SpringBoot 应用搭建

Zipkin日志分析可视化的分析展现,让开发者更快速地掌握生产环境的实时状态收集分布式系统中的时间数据,并进行跟踪,微服务架构下一个用来监控微服务效能.GitHub 中获取,地址为https://github . com/openzipkin/zipkin

Zipkin 主要涉及以下4 个组件。

• collector :数据来集组件,用来收集Sleuth 所生成的跟踪数据。
• storage :数据存储组件,将来集的数据进行存储以便后续进行分析。
• search : 数据查询组件,对采集到的数据处理后,就可以通过查询组件进行过滤、
分析等处理。
• UI :数据展示组件。

Zipkin 在数据存储上提供了可插拔式数据存储方案,支持以下4 种方式。

• In-Memo可:将来集到的数据保存在内存中。如果是测试环境中推荐这种方式,使
用和配置都比较简单,但是在生产环境中最好还是不要使用该方式,因为一旦服务
关闭,所有数据都会丢失。
• MySQL :将采集到数据保存到MySQL 数据库中。
• Cassandra :是一个使用非常广泛的关系型开源数据库。
• Elasticsearch :前面在做ELK 整合时己经介绍过,在生产环境中个人推荐使用该存
储,这样就能和之前的日志聚合进行统一。

构建一个单独的Zipkin 服务器。该服务器也是一个标准的SpringBoot 应用,构建步骤如下。

  1. 首先需要编写Zipkin 项目的Maven 脚本文件,同样也是继承自Parent 项目
    〈!一依赖Zipkin 服务器所需要核心JAR 包一〉

< dependency>
< groupid>io.zipkin.java< /groupid>
< art ifactid>zipkin- server< /artifactid>
< /dependency>
< dependency>
< groupid>io.zipkin.java< /groupid>
< artifactid>zipkin - autoconfigure - ui</ artifactId>
< scope>runtime< /scope>
< /dependency>

  1. 编写引导类
    //通过@ EnableZipkinServer 就可以开启一个Zipkin 服务器
@EnablezipkinServer
@SpringBootApplication
public class Application {
	public static void main(String[] args) {
		SpringApplication. run ( Application . class , args) ;
	}
}
  1. 编写应用配置文件,内容如下:
    //将服务端口设置为8240
    server.port=8240
    spring.application.name=ZIPKIN -SERVER

http://localhost:8240

2 整合微服务

在其他各微服务中进行整合。首先需要在项目依赖中增加如下依赖:

< dependency>
< groupid>org.springframework.cloud< /groupid>
< artifactid>spring-cloud-starter-zipkin< /artifactid>
< /dependency>

将Zipkin 服务器地址指向前面所创建的服务器,
spring.zipkin.base-url=http://localhost:8240
spring.sleuth.sampler.percentage=1.0

3 本次请求的Traceld (用于请求跟踪查询)

1通过Zuul 的Post 过滤器,Zuul 服务器增加Sleuth 的环境依赖

< dependency>
< groupid>org.springframework.cloud< /groupid>
< artifactid>spring-cloud-starter-sleuth< /artifactId>
< /dependency>

实现一个Zuul 的POST 过滤器

@Component
public class TraceidFilter extends ZuulFilter {
	private static final int FILTER_ORDER = l;
	private stat 工c final boolean SHOULD FILTER=true ;
	//自动注入Sleuth 的Tracer 对象
	@Autowired
	private Tracer tracer;
	
	@Override
	public String filterType () { return ” post "; }
	@Override
	public int filterOrder () { return  FILTER_ORDER; }
	@Override
	public boolean shouldFilter() { return SHOULD_ FILTER ; }
	@Override
	public Object run() {
	    //可以通过下面的代码获取Tracerid ,并将其设置到返回信息中
		RequestContext ctx = RequestContext . getCurrentContext();
		//Traceld 可以通过tracer.getCurrentSpan().traceidString()获取。
		ctx.getResponse() .addHeader (” scdtrace-id",this.tracer.getCurrentSpan().traceidString ());
		return null ;
	}
}

在这里插入图片描述POST 过滤器中并没有判断当前服务器是否是生产环境。如果想在
自己的项目中使用,可以自行将是否是生产环境的判断加上。只有在非生产环境
下才将Traceld 设直到scd - trace - id 中。

我们就可以根据所获取的Traceld 在Zipkin 服务器中进行查询,

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐