在本文中,我们将了解使用Zipkin和Spring cloud sleuth框架的微服务分布式跟踪。

尽管微服务具有自身的挑战,但微服务是出色的架构。 复杂的微服务架构具有与其他微服务的下游和上游依存关系,并且一切都是相互联系的。 在大多数情况下,各个团队只是专注于自己的服务,因此在微服务​​分布式环境中,很难找到任何延迟或在运行时跟踪实际问题。

1.分布式跟踪

随着微服务架构的复杂性增加,跨服务和服务器实例的统一可观察性变得至关重要。 每个服务请求都经过多个服务层,使用传统的调试技术来识别延迟或任何运行时问题变得越来越困难。 分布式跟踪提供了对通过多种服务传输的请求的整体视图,从而可以立即识别问题。

1.1分布式跟踪词汇

  • 跨度 –跨度是一项单独的操作。
  • 跟踪 –跟踪是一个由跨度组成的端到端延迟图。
  • 示踪 -示踪剂记录跨度和传递需要方面将它们连接到跟踪。

2. Zipkin

Zipkin是一个开放源代码的分布式系统,它提供了用于发送,接收,存储和可视化跟踪详细信息的机制。 这有助于团队将服务器实例之间的活动关联起来,并对我们的服务中发生的事情有更深入的了解。 Zipkin提供UI界面来分析服务之间的跟踪和调用图详细信息。

2.1 Zipkin安装

可以使用三种不同的方式安装zipkin服务器。

  • Java –我们可以执行以下wget命令来下载最新的zipkin服务器。 如果没有安装wget ,只需复制以下URL并粘贴到浏览器中,即可下载最新的zipkin服务器。
wget -O zipkin.jar 'https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec'
  • Zipkin源代码–我们可以从github url下面下载zipkin源代码,并在本地计算机上运行zipkin应用程序: https : //github.com/openzipkin/zipkin
  • Docker –我们可以从https://github.com/openzipkin/docker-zipkin下载docker-zipkin容​​器

对于此示例应用程序,我已经使用Java方法安装了Zipkin服务器。

2.2 Zipkin用户界面

Zipkin UI提供以下功能来分析跨服务的分布式跟踪详细信息:

  • 按服务名称,跨度名称等搜索跟踪
  • 跟踪依赖关系图显示了跨服务的跟踪请求流
  • 提供每个跨度的总跟踪时间的详细信息

通过分析Zipkin UI提供的详细信息,可以更加轻松地发现互连微服务体系结构之间的延迟或任何特定服务问题。

3.春云侦探

Spring cloud sleuth将跟踪和跨度ID添加到Slf4j MDC (映射诊断上下文),以从给定的跟踪或跨度提取日志。 Sleuth在常见的分布式跟踪数据模型(例如跟踪,跨度,注释,键值注释)上提供了抽象。 Sleuth会检测Spring应用程序中的公共入口和出口点( servlet filter, rest template, scheduled actions, message channels, zuul filters, feign client )。

3.1 SpringBoot上的Sleuth和Zipkin配置

在Springboot pom.xml中添加以下依赖项,以将zipkin和spring cloud sleuth添加到SpringBoot应用程序中。

pom.xml

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

4.样品申请

对于本文,我创建了一个示例应用程序,该应用程序由三个不同的微服务组成,分别称为UserGreetingServiceUserNameServiceUserAddressService

UserGreetingService实习生调用UserNameServiceUserAddressService服务,以为用户构造完整的问候消息以及名称和地址详细信息。

UserGreetingService.java

@SpringBootApplication
@RestController
@CrossOrigin
public class UserGreetingService {@RequestMapping("/api/user/greet")public String greet() {String greetingMsg = "Hello";String userName = restTemplate().getForObject("http://localhost:3001/api/user/name", String.class);String userAddress = restTemplate().getForObject("http://localhost:3002/api/user/address", String.class);return greetingMsg + " " + userName + "!\n\n" + userAddress;}@BeanRestTemplate restTemplate() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(UserGreetingService.class,"--spring.application.name=user-greeting-service","--server.port=3000");}
}

为了介绍服务延迟,我有意向UserNameServiceUserAddressService服务添加了Thread.sleep(1000)Thread.sleep(2000)

您可以从github链接下载示例代码– https://github.com/VishSinha/springbootzipkindemo

4.1启动Zipkin服务器

要在本地环境中启动zipkin服务器,请转至我们下载zipkin服务器的目录,然后打开命令提示符或终端并执行以下命令:

java -jar zipkin-server-2.5.0-exec.jar

一旦启动zipkin服务器,就可以使用URL浏览Zipkin UI – http:// localhost:9411 / zipkin /

4.2运行样本

从github下载示例代码后,使用您最喜欢的IDE(例如eclipse,Intellij)或使用命令提示符启动所有三个微服务。

一旦所有三个springboot微服务都启动,请使用浏览器或邮递员UserGreetingService端点URL http:// localhost:3000 / api / user / greet 。

总体而言,您会注意到问候服务花费了3秒钟以上的时间才能做出响应。 现在,让我们打开Zipkin UI来分析后台发生的情况以及为什么总响应时间超过3秒。

打开浏览器窗口,并使用默认URL – http:// localhost:9411 / zipkin呈现Zipkin UI。 这将呈现zipkin默认搜索页面。

Zipkin用户界面

让我们从服务名称中选择user-greeting-service,然后单击Find Traces按钮。

您将看到问候服务的总共3个跨度以及总的响应时间。

Zipkin UI查找跟踪

单击“ 3 spans”链接,这将呈现每个服务响应时间的详细信息以及以下其他详细信息。

Zipkin UI Spans信息

此外,通过单击每个服务跨度,我们可以获得每个服务请求的跟踪ID,跨度ID,父跟踪ID,服务器实例信息和其他跟踪详细信息。 这可以轻松地帮助我们排除任何故障的微服务或延迟问题。

Zipkin UI跨度信息

打开Zipkin UI的“依赖关系”部分后,这将在整个服务中呈现服务依赖关系图,如下所示:

Zipkin UI依赖图

5.结论

总体zipkin非常易于集成基于云的微服务应用程序,这为整个服务提供了很多见解和信息,以分析服务的整体运行状况。 使用Zipkin,我们可以轻松识别任何故障服务,并可以采取纠正措施。

6.参考

  • https://zipkin.io
  • https://github.com/openzipkin/zipkin

翻译自: https://www.javacodegeeks.com/2018/03/springboot-microservices-tracing-with-zipkin-and-sleuth.html

使用Zipkin和Sleuth进行SpringBoot微服务跟踪相关推荐

  1. springboot 搭建分布式_爱了!阿里巴巴内部出品“SpringBoot+微服务指南”,理论与实战...

    爱了爱了,Alibaba出品"Springboot+微服务架构指南",理论与实战结合,双管齐下! 有幸从一位朋友那里得到Alibaba内部出品强推的"SpringBoot ...

  2. Docker Compose配置springboot微服务项目

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  3. 3万字《SpringBoot微服务开发——Shiro(安全)》

    SpringBoot微服务开发--Shiro(安全) 文章目录 SpringBoot微服务开发--Shiro(安全) Shiro(安全) 1.Shiro简介 2.Shiro有哪些功能? 3.Shiro ...

  4. Springboot+MySQL+VUE实现的在线教育网站源码+视频教程(Springboot微服务架构)

    下载地址:https://download.csdn.net/download/BSDKT/85347133?spm=1001.2014.3001.5503 项目介绍: Springboot+MySQ ...

  5. docker入门,镜像,容器,数据卷,dockerfile,docker网络,springboot微服务打包docker镜像[狂神yyds]

    docker学习大纲 docker概述 docker安装 docker命令 镜像命令 容器命令 操作命令 - docker镜像 容器数据卷 dockerfile docker网络原理 IDEA整合do ...

  6. SpringBoot微服务架构下的MVC模型总结

    SpringBoot微服务架构下的MVC模型产生的原因: 微服务概念改变着软件开发领域,传统的开源框架结构开发,由于其繁琐的配置流程 , 复杂的设置行为,为项目的开发增加了繁重的工作量,微服务致力于解 ...

  7. SpringBoot微服务框架概述

    SpringBoot微服务框架 2. Spring Boot 微服务框架的特点 3. Spring Boot 应用场景 4. SpringBoot的第一个应用 5. Springboot引导类的mai ...

  8. ssh改造springboot微服务系统改造升级步骤及注意事项(一)

    ssh改造springboot微服务系统改造升级步骤及注意事项(一) 本次系统改造是以目前市场较为前沿.主流的技术为标准进行改造.为了达到系统性能的提升.实现高并发.高可用以及增强系统可扩展性等目的. ...

  9. 疯狂Spring Cloud连载(29)微服务跟踪概述

    本文节选自<疯狂Spring Cloud微服务架构实战> 京东购买地址::https://item.jd.com/12256011.html 当当网购买地址::http://product ...

最新文章

  1. P1515 旅行(简单搜索)
  2. 系列篇|编写一个翻转事件极性的package
  3. FPGA之道(72)提高设计的综合性能(四)提高设计的移植性与保密性
  4. MVC与Validate验证提示的样式修改
  5. 父div高度和宽度的应用
  6. HDU 1247 Hat’s Words 字典树(Trie树)
  7. python怎么创建子类_Python:如何在创建时使用父类注册所有子类
  8. jQueryUI modal dialog does not show close button (x) JQueryUI和BootStrap混用时候,右上角关闭按钮显示不出图标的解决办法...
  9. iPhone 13或将配备更大容量电池 售价与iPhone 12基本相当
  10. 方格取数 (Standard IO)
  11. c#类似跑马灯抽签小程序
  12. 电子书格式转换 azw3 to epub (软件calibre的简单使用)
  13. Java类型转换简单运用
  14. 产品线管理:学习笔记
  15. jQuery实用网页元素颜色修改插件
  16. ASP.NET程序设计复习题
  17. flappy+bird+android源代码,Flappy Bird(安卓版)逆向分析(一)
  18. 常见的数据埋点方式介绍
  19. Gearman vs Beanstalkd
  20. 1-10 Burpsuite 暴力破解用户密码

热门文章

  1. HDU5985 Lucky Conins 概率题
  2. 二元运算 FFT+分治
  3. Java自动化邮件中发送图表(二)之JFreeChart
  4. Java IO: RandomAccessFile
  5. Oracle入门(十四.22)之创建DDL和数据库事件触发器
  6. 接口 DataInput
  7. 相比学习好的学生,老师最喜欢努力认真学习的学生
  8. 数据库的实现【笔记】
  9. json vs obj
  10. springboot创建项目 编写dao serviece 和controller 持久层用mybatis