1 分布式追踪系统

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

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

三者相互交织重叠如下:

技术栈上的成熟框架有,

Logging:Log4j、ELK等,

Metrics:Prometheus、InfluxDB、Grafana等

Tracing:Jaeger和Zipkin等。

分布式追踪系统在Google发表一篇文章后快速发展。Tracing系统一般核心步骤有三个:代码埋点、数据存储、查询展示。想学习交流HashMap,nginx、dubbo、Spring MVC,分布式、高性能高可用、MySQL,redis、jvm、多线程、netty、kafka、的加尉xin(同英):1253431195 扩列获取资料学习,无工作经验不要加哦!

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

2 OpenTracing

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

OpenTracing的优势:

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

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

2.1 相关概念

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

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

Tag:一组由键值对构成的标签集合,键值类型必须为字符串。它可以带上许多有用信息,如请求方法、请求URL、返回状态码等。想学习交流HashMap,nginx、dubbo、Spring MVC,分布式、高性能高可用、MySQL,redis、jvm、多线程、netty、kafka、的加尉xin(同英):1253431195 扩列获取资料学习,无工作经验不要加哦!

Log:一组Span的日志集合。

2.2 OpenTracing的实现

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

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

3 实战整合

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

3.1 Springboot项目准备

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

@RestController
public class TracingController {@Autowiredprivate 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

以上端口的信息如下:

3.2.3 运行与访问UI

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

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

选择一条Trace点进去后,可以看到详细信息,非常有利于我们分析,具体如下:想学习交流HashMap,nginx、dubbo、Spring MVC,分布式、高性能高可用、MySQL,redis、jvm、多线程、netty、kafka、的加尉xin(同英):1253431195 扩列获取资料学习,无工作经验不要加哦!

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后,访问服务:

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

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

4 总结

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

参考链接:

OpenTracing概念:

Jaeger架构图:

Zipkip架构图:

Jaeger Docker信息:

Zipkin Docker信息:

Jaeger Spring整合项目:

Zipkin Spring整合项目:

[资源分享] 【Springboot】实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)相关推荐

  1. 微服务链路追踪_.NET Core微服务:分布式链路追踪系统分享

    (给DotNet加星标,提升.Net技能) 转自:另一个老李 cnblogs.com/SteveLee/p/10463200.html 对于普通系统或者服务来说,一般通过打日志来进行埋点,然后再通过e ...

  2. NET Core微服务之路:SkyWalking+SkyApm-dotnet分布式链路追踪系统的分享

    对于普通系统或者服务来说,一般通过打日志来进行埋点,然后再通过elk或splunk进行定位及分析问题,更有甚者直接远程服务器,直接操作查看日志,那么,随着业务越来越复杂,企业应用也进入了分布式服务化的 ...

  3. redis序列化_实例讲解Springboot以Template方式整合Redis及序列化问题

    1 简介 之前讲过如何通过Docker安装Redis,也讲了Springboot以Repository方式整合Redis,建议阅读后再看本文效果更佳: (1) Docker安装Redis并介绍漂亮的可 ...

  4. core 实例化接口_实例讲解Springboot整合MongoDB进行CRUD操作的两种方式

    1 简介 Springboot是最简单的使用Spring的方式,而MongoDB是最流行的NoSQL数据库.两者在分布式.微服务架构中使用率极高,本文将用实例介绍如何在Springboot中整合Mon ...

  5. 继承redis spring_实例讲解Springboot以Repository方式整合Redis

    1 简介 Redis是高性能的NoSQL数据库,经常作为缓存流行于各大互联网架构中.本文将介绍如何在Springboot中整合Spring Data Redis,使用Repository的方式操作. ...

  6. Springboot starter开发之traceId请求日志链路追踪

    一.请求链路追踪是什么? 能标识一次请求的完整流程,包括日志打印.响应标识等,以便于出现问题可以快速定位并解决问题. 二.使用步骤 1. 相关知识点 ThreadLocal:一种保证一种规避多线程访问 ...

  7. SpringBoot开发案例之整合Dubbo分布式服务

    前言 在 SpringBoot很火热的时候,阿里巴巴的分布式框架 Dubbo 不知是处于什么考虑,在停更N年之后终于进行维护了.在之前的微服务中,使用的是当当维护的版本 Dubbox,整合方式也是使用 ...

  8. 实例讲解spark在京东智能供应链预测系统的应用

    问题导读: 1. 京东的供应链是什么样的呢? 2. 预测技术在京东的供应链起着什么样的作用呢? 3. 京东整个预测系统的架构是什么样的呢? 4. 预测系统不同层面的技术选型分别为什么? 5. 预测系统 ...

  9. skywalking(1) 基于opentracing规范的APM系统

    skywalking是: 基于opentracing规范的APM系统 skywalking解决了什么问题? skywalking解决微服务架构下,多服务直接复杂的调用关系 了解dapper,分布式链路 ...

最新文章

  1. bzoj 5216 [Lydsy2017省队十连测]公路建设 线段树维护 最小生成树
  2. MySQL 中事务详解
  3. Eigen入门之密集矩阵 6 - Reductions, visitors and broadcasting
  4. mysql 图片 格式_mysql存储图片 用什么格式
  5. 开源虎墩同名电影《小虎墩大英雄》定档大年初一
  6. Android--pendingIntent Intent
  7. (操作系统题目题型总结)第五章:设备管理
  8. 使用JAVASCRIPT实现弹出框,过一段时间自动消失
  9. 【elasticsearch】Elasticsearch 空值处理实战
  10. 1.6 语言模型和序列生成
  11. 通过计算机名访问linux
  12. java.lang.IllegalArgumentException: node to traverse cannot be null! HQL语法问题
  13. Linux的基础命令和配置文件
  14. 关于OpenGL源码下载说明
  15. 2021:Python的下载安装教程(很详细,初学者也能懂)
  16. Blocking Queue三种加入队列方法对比
  17. gopher对mysql的利用_[题目]记一次利用gopher的内网mysql盲注
  18. liang-barsky_C和C ++中的Liang Barsky线裁剪算法
  19. DRILLNET 2.0------第二十四章 井涌模拟分析模型
  20. 深入浅出!二叉树详解,包含C语言代码

热门文章

  1. AdoptOpenJDK下载
  2. 经典算法和OJ网站(开发者必备)
  3. Linux PEX网络装机:No bootable device
  4. 浅谈社交网络中的用户心理
  5. 工业相机视野及焦距的计算公式
  6. iOS- NSTimeInterval获取时间间隔
  7. 2016-2017-2 《Java程序设计》预备作业2总结
  8. 如何使用 Wireshark 分析 TCP 吞吐瓶颈
  9. krb5安装包 linux_【RedHat Linux】kerberos 客户端配置
  10. 【Vue】脚手架搭建