使用Zipkin和Sleuth进行SpringBoot微服务跟踪

在本文中,我们将了解使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

log4j性能 slf4j_Log4j 2:性能接近疯狂

log4j性能 slf4j最近&#xff0c;Apache社区中一位受人尊敬的成员尝试了Log4j 2并在Twitter上写道&#xff1a; TheASF &#xff03;log4j2摇摇欲坠 &#xff01; 性能接近疯狂^^ http://t.co/04K6F4Xkaa — Mark Struberg&#xff08;struberg&#xff09; 2013年5月7日 &a…

java 输入人名_Java 读取控制台输入

Java 提供了我们两种读取控制台输入的方法&#xff1a;一、传统方法public class ReadConsoleOld {public static void main(String[] args) throws IOException {BufferedReader reader new BufferedReader(new InputStreamReader(System.in));while(true){String line read…

JVM体系结构:JVM和JVM体系结构概述

各位读者好&#xff01; 在本教程中&#xff0c;我们将了解和学习Java虚拟机&#xff08;JVM&#xff09;及其体系结构。 本教程将帮助您正确回答以下问题&#xff1a; Java中的JVM是什么&#xff1f; JVM的不同组件 JVM&#xff0c;JRE和JDK之间的区别 1.简介 Java虚拟机&…

计算机二级web题目(7.1)--综合选择题1

(1)程序流程图中带有箭头的线段表示的是&#xff08;C&#xff09;。 A、图元关系 B、数据流 C、控制流 D、调用关系 解析&#xff1a;①长方形表示要处理执行的步骤。②菱形表示条件判断。③平行四边形表示输入或输出。 (2)结构化程序设计的基本原则不包括&#xff08;A&#…

java8 javafx_Java 8的新增功能(第1部分– JavaFX)

java8 javafx免责声明&#xff1a;我不为Oracle工作&#xff0c;也不以任何方式代表Oracle。 此功能列表不是官方的。 作为“局外人”&#xff0c;这只是我研究的一部分。 Java 8已在大约两个月前完成了功能&#xff0c;并且开发者预览版即将到来&#xff08;两周后&#xff0…

Java简单内存解析

堆&#xff08;Heap&#xff09;&#xff0c;此内存区域的唯一目的就是存放对象实例&#xff0c;几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是&#xff1a;所有的对象实例以及数组都要在堆上分配。 通常所说的栈&#xff08;Stack&#xff09;&…

servlet3异步_Servlet 3的异步Servlet功能

servlet3异步在深入了解什么是异步Servlet之前&#xff0c;让我们尝试了解为什么需要它。 假设我们有一个Servlet&#xff0c;处理时间很长&#xff0c;如下所示。 LongRunningServlet.java package com.journaldev.servlet;import java.io.IOException; import java.io.Prin…

计算机二级web题目(7.2)--基本操作题1

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 1、在考生文件夫下的Web1目录中&#xff0c;存有1.htm和label2.htm文件&#xff…

计算机二级web题目(7.3)--简单应用题1

说明&#xff1a;如有不清楚的地方&#xff0c;可以评论区留言&#xff0c;及时回复。 1、在考生文件夹下的Web3目录中&#xff0c;存有3.htm文件&#xff0c;该文件不完整&#xff0c;请在标有********Found******字符串的注释行下一语句的下划线处填入正确内容&#xff0c;然…

使用Spring Security 5.0和OIDC轻松构建身份验证

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 Spring Security不仅是一个功能强大且可高度自定义的身份验证和访问控制框架&#xf…

计算机二级web题目(7.4)--综合应用题1

说明&#xff1a;如有不清楚的地方&#xff0c;可以评论留言&#xff0c;及时回复。 1、在考生文件夹下的Web5目录中&#xff0c;存有5.htm文件&#xff0c;该文件不完整&#xff0c;请在标有 *********Foun********字符串的往释行 下一-语句的下划线处填入正确内容&#xff0c…

(1.2)HarmonyOS鸿蒙config.json

跟应用相关的所有信息&#xff0c;都会在config.json文件中进行配置。 项目的配置&#xff08;app&#xff09; 比如&#xff1a;厂商信息&#xff0c;项目的版本等 应用在设备上的配置信息&#xff08;deviceConfig&#xff09; 比如&#xff1a;应用运行时进程名&#xff0c…

Arquillian变色龙。 简化您的Arquillian测试

Arquillian Chameleon的诞生是为了简化Arquillian测试的配置。 我很自豪地宣布&#xff0c;使用1.0.0.CR2版本&#xff0c;我们不仅简化了Arquillian测试的配置方式&#xff0c;而且简化了编写方式。 在此新版本中&#xff0c;添加了三个新的简化&#xff1a; 您只需要使用1个…

为什么要学习鸿蒙,HarmonyOS不只是操作系统

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 前言 对于IT行业&#xff0c;头部力量或者已经形成生态的东西…

mysql 视图树查询_TreeView (树视图)遍历数据库的方法

多数从事数据库编程人员都经历过&#xff0c;对新接触的数据库技术无论是低版本Foxbase、Access97-2000还是支持网络环境高版本的Sql Server2000和 Oracel等系统&#xff0c;都经过一个循循渐进、吃苦耐劳学习过程&#xff0c;达到知识技术从量变到质变的过程&#xff0c;才能把…

(1.3)HarmonyOS鸿蒙启动程序运行流程

程序启动运行流程&#xff1a; ①解析config.json文件 ②初始化 ③获取入口Ability的全类名&#xff08;config.json里的module里的mainAbility&#xff09; ④找到Ability并运行 ⑤运行Ability中的子界面 ⑥加载xml文件&#xff0c;展示内容&#xff08;xml在resources里面&am…

arraylist内存溢出_ArrayList使用内存映射文件

arraylist内存溢出介绍 内存中的计算由于负担得起的硬件而开始兴起&#xff0c;大多数数据保留在RAM中以满足延迟和吞吐量的目标&#xff0c;但是将数据保留在RAM中会增加垃圾收集器的开销&#xff0c;尤其是在您不预先分配内存的情况下。 因此&#xff0c;有效地我们需要一种无…

【vtkWidgetRepresentation】第十八期 vtkHoverWidget

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享vtkHoverWidget,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. vtkHoverWidget vtkHoverWidget用于在呈现窗口中…

Java面向对象(2)--类的成员属性

基本格式&#xff1a;修饰符 数据类型 属性名 初始化值 ; 说明1: 修饰符 ①常用的权限修饰符&#xff1a;private、缺省、protected、public ②其他修饰符&#xff1a;static、final 说明2&#xff1a;数据类型 任何基本数据类型和任何引用数据类型。 说明3&#xff1a;属性…