【Springboot】实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)

栏目: IT技术 · 发布时间: 4年前

内容简介:随着大量公司把单体应用重构为微服务,对于运维人员的责任就更加重大了。架构更复杂、应用更多,要从中快速诊断出问题、找到性能瓶颈,并不是一件容易的事。因此,也随着诞生了一系列面向三者相互交织重叠如下:

1 分布式追踪系统

随着大量公司把单体应用重构为微服务,对于运维人员的责任就更加重大了。架构更复杂、应用更多,要从中快速诊断出问题、找到性能瓶颈,并不是一件容易的事。因此,也随着诞生了一系列面向 DevOps 的诊断与分析系统,主要是以下三个系统:

  • 集中式日志系统(Logging)
  • 集中式度量系统(Metrics)
  • 分布式追踪系统(Tracing)

三者相互交织重叠如下:

【Springboot】实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)

技术栈上的成熟框架有,

Logging:Log4j、ELK等,

Metrics:Prometheus、InfluxDB、Grafana等

Tracing:Jaeger和Zipkin等。

分布式追踪系统在Google发表一篇文章 Dapper, a Large-Scale Distributed Systems Tracing Infrastructure 后快速发展。Tracing系统一般核心步骤有三个:代码埋点、数据存储、查询展示。

历史洪流滚滚向前,大浪淘沙,现在比较流行的有 JaegerZipkin

2 OpenTracing

由于 Tracing 的技术发展迅速,为了解决兼容性问题,有了 OpenTracing 规范。它是一个轻量级的标准化层,连接应用、类库和追踪系统。

【Springboot】实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)

OpenTracing的优势:

(1)OpenTracing已经进入 CNCF (云原生计算基金会,口号是坚持和整合开源技术来编排容器作为微服务架构的一部分),正在为全球的分布式追踪,提供统一的概念和数据标准。

(2)OpenTracing通过提供平台无关、厂商无关的 API ,使得开发人员能够方便添加和更换追踪系统的实现。

2.1 相关概念

Trace :贯穿一个分布式系统的事务追踪描述,其实就是由许多个 Span 组成的有向无环图。

Span :被命名的与记录时间的调用操作,如一个Http GET请求; Span 有嵌套关系,如果一个请求会调用其它服务,就会生成子 Span

Tag :一组由键值对构成的标签集合,键值类型必须为字符串。它可以带上许多有用信息,如请求方法、请求URL、返回状态码等。

Log :一组 Span 的日志集合。

2.2 OpenTracing的实现

JaegerUber 推出的一款开源分布式追踪系统,兼容 OpenTracing API 。架构如下:

【Springboot】实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)

Zipkin 是由 Twitter 推出的开源的分布式追踪系统,架构图如下:

【Springboot】实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)

3 实战整合

本文以Springboot为Web项目,分别整合 JaegerZipkin

3.1 Springboot项目准备

项目中的 Controller ,提供了两个Endpoint, tracingopen ;在访问 open 时,代码会调用 tracing

@RestController
public class TracingController {
    @Autowired
    private RestTemplate restTemplate;

    @Value("${server.port}")
    private int port;

    @RequestMapping("/tracing")
    public String tracing() throws InterruptedException {
        Thread.sleep(100);
        return "tracing";
    }

    @RequestMapping("/open")
    public String open() throws InterruptedException {
        ResponseEntity<String> response = 
          restTemplate.getForEntity("http://localhost:" + port + "/tracing", 
                                    String.class);
        Thread.sleep(200);
        return "open " + response.getBody();
    }
}

为了能够方便看出调用时长信息,特别在代码中增加了延时 Thread.sleep()

配置Web应用的端口和服务名字:

server.port=80
spring.application.name=opentracing-demo

3.2 整合Jaeger

3.2.1 Springboot整合

引用依赖:

<dependency>
  <groupId>io.opentracing.contrib</groupId>
  <artifactId>opentracing-spring-jaeger-web-starter</artifactId>
  <version>3.1.1</version>
</dependency>

配置连接属性:

opentracing.jaeger.enabled=true
opentracing.jaeger.udp-sender.host=localhost
opentracing.jaeger.udp-sender.port=6831

3.2.2 Docker 运行Jaeger

为了方便,使用 docker 来运行 Jaeger

# 拉取jaeger镜像
docker pull jaegertracing/all-in-one:1.17
# 运行jaeger实例,
docker run -d --name jaeger \
  -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
  -p 5775:5775/udp \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 14268:14268 \
  -p 14250:14250 \
  -p 9411:9411 \
  jaegertracing/all-in-one:1.17

以上端口的信息如下:

【Springboot】实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)

3.2.3 运行与访问UI

启动Web应用和Jaeger后,访问服务:

http://localhost/open

http://localhost/tracing

访问Jaeger UI界面 http://localhost :16686/,设置好查询条件后点击 Find Traces ,就能查看到Trace信息了,具体如下:

【Springboot】实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)

选择一条Trace点进去后,可以看到详细信息,非常有利于我们分析,具体如下:

【Springboot】实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)

3.3 Zipkin

3.3.1 Springboot整合

引用相关依赖:

<dependency>
  <groupId>io.opentracing.contrib</groupId>
  <artifactId>opentracing-spring-zipkin-web-starter</artifactId>
  <version>0.1.4</version>
</dependency>

配置相关连接信息:

opentracing.zipkin.enabled=true
opentracing.zipkin.http-sender.base-url=http://localhost:9412/

3.3.2 Docker运行Zipkin

通过Docker运行Zipkin实例:

# 拉取Zipkin镜像
docker pull openzipkin/zipkin:2.21
# 运行Zipkin实例
docker run -d -p 9412:9411 openzipkin/zipkin:2.21

因为本机的端口9411已经被Jaeger的docker实例占用,所以改为9412。

3.3.3 运行与访问UI

启动Web应用和Zipkin后,访问服务:

http://localhost/open

http://localhost/tracing

访问Zipkin UI界面 http://localhost :9412/zipkin/,设置好查询条件后点击查询,就能查看到Trace信息了,具体如下:

【Springboot】实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)

选择一条Trace点击进去,同样可以看到许多详细信息,这里不在展示。

4 总结

本文通过代码案例详细讲解了Springboot整合OpenTracing的两个实现( JaegerZipkin ),demo的代码可关注公众号后台回复” OpenTracing “获取。

参考链接:

OpenTracing概念: https://opentracing.io/docs/o...

Jaeger架构图: https://www.jaegertracing.io/...

Zipkip架构图: https://zipkin.io/pages/archi...

Jaeger Docker信息: https://www.jaegertracing.io/...

Zipkin Docker信息: https://hub.docker.com/r/open...

Jaeger Spring整合项目: https://github.com/opentracin...

Zipkin Spring整合项目: https://github.com/opentracin...

欢迎关注公众号< 南瓜慢说 >,将持续为你更新...

【Springboot】实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)

多读书,多分享;多写作,多整理。


以上所述就是小编给大家介绍的《【Springboot】实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java多线程编程实战指南(设计模式篇)

Java多线程编程实战指南(设计模式篇)

黄文海 / 电子工业出版社 / 2015-10 / 59.00

随着CPU 多核时代的到来,多线程编程在充分利用计算资源、提高软件服务质量方面扮演了越来越重要的角色。而 解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案。然而,多线程编程相关的设计模式书籍多采用C++作为描述语言,且书中所举的例子多与应用开发人员的实际工作相去甚远。《Java多线程编程实战指南(设计模式篇)》采用Java(JDK1.6)语言和UML 为描述语言,并结合作者多......一起来看看 《Java多线程编程实战指南(设计模式篇)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码