热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringCloud学习服务追踪(Sleuth)

一SpringCloudSleuth简介二整合SpringCloudSleuth三SpringCloudSleuth和Zipkin配合使用1编写ZipkinServer2整合Zip

    • 一 Spring Cloud Sleuth简介
    • 二 整合Spring Cloud Sleuth
    • 三 Spring Cloud Sleuth和Zipkin配合使用
      • 1 编写Zipkin Server
      • 2 整合Zipkin


一、 Spring Cloud Sleuth简介

微服务之间通过网络进行通信,要想跟踪每一个请求,了解请求消耗时间、网络延迟、业务逻辑消耗时间等指标信息。Spring Cloud Sleuth为Spring Cloud提供了分布式跟踪的解决方案。其原理图如下:

这里写图片描述

Sleuth术语简介:

Span(跨度):基本工作单元,例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标识,span还有其他数据信息,比如摘要、时间戳事件、关键值注释(tags)、span的ID、span的父ID,以及进度ID(通常是IP地址),span在不断的启动和停止,同时记录了时间信息,当你创建了一个span,你必须在未来的某个时刻停止它。

Trace(跟踪):一组共享“root span”的span组成的一个树状结构,trace以另一个64位ID唯一标识,例如,如果你正在跑一个分布式大数据工程,你可能需要创建一个trace。

Annotation(标注):用来及时记录一个事件的存在,一些核心annotations用来定义一个请求的开始和结束。

cs - Client Sent -客户端发起一个请求,这个annotion描述了这个span的开始
sr - Server Received -服务端获得请求并准备开始处理它,如果将其sr减去cs时间戳便可得到网络延迟
ss - Server Sent -注解表明请求处理的完成(当请求返回客户端),如果ss减去sr时间戳便可得到服务端需要的处理请求时间
cr - Client Received -表明span的结束,客户端成功接收到服务端的回复,如果cr减去cs时间戳便可得到客户端从服务端获取回复的所有所需时间

二、 整合Spring Cloud Sleuth

1.将之前的EurekaClientA、EurekaClientB、EurekaClientC改造,(http://blog.csdn.net/u012482647/article/details/78017903)在pom文件中添加依赖:

<dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-sleuthartifactId>dependency>

2.配置application.properties

spring.application.name&#61;microservice-sleuth
server.port&#61;8003
logging.level.root&#61;info
logging.level.org.springframework.web.servlet.DispatcherServlet&#61;debug

3.编写Controller类

package com.swc;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;/*** Created by chao on 2017-9-18.*/
&#64;RestController
public class ComputeController {&#64;RequestMapping(value&#61;"/getSome",method&#61; RequestMethod.GET)public String getSome(){return "我是第一个服务器";}&#64;RequestMapping(value&#61;"/getOther",method&#61; RequestMethod.GET)public String getOther(){return "我是第二个服务器";}}

4.启动项目&#xff0c;分别访问http://localhost:8003/getSome&#xff0c; 控制台打印如下信息&#xff0c;微服务整合Spring Cloud Sleuth成功。

2017-11-09 18:26:13.172 DEBUG [microservice-sleuth,c7b2f2d5f1e9412d,c7b2f2d5f1e9412d,false] 9944 --- [nio-8003-exec-5] o.s.web.servlet.DispatcherServlet : DispatcherServlet with name &#39;dispatcherServlet&#39; processing GET request for [/getSome]
2017-11-09 18:26:13.173 DEBUG [microservice-sleuth,c7b2f2d5f1e9412d,c7b2f2d5f1e9412d,false] 9944 --- [nio-8003-exec-5] o.s.web.servlet.DispatcherServlet : Last-Modified value for [/getSome] is: -1
2017-11-09 18:26:13.174 DEBUG [microservice-sleuth,c7b2f2d5f1e9412d,c7b2f2d5f1e9412d,false] 9944 --- [nio-8003-exec-5] o.s.web.servlet.DispatcherServlet : Null ModelAndView returned to DispatcherServlet with name &#39;dispatcherServlet&#39;: assuming HandlerAdapter completed request handling
2017-11-09 18:26:13.174 DEBUG [microservice-sleuth,c7b2f2d5f1e9412d,c7b2f2d5f1e9412d,false] 9944 --- [nio-8003-exec-5] o.s.web.servlet.DispatcherServlet : Successfully completed request

三、 Spring Cloud Sleuth和Zipkin配合使用

ZipKin是一个开源的分布式跟踪系统&#xff0c;基于Dapper的论文设计而来&#xff0c;其主要功能是手机系统的时序数据&#xff0c;追踪微服务架构的网络延迟。

3.1 编写Zipkin Server

1.新建一个Spring boot工程&#xff0c;添加依赖&#xff1a;

<dependency><groupId>io.zipkin.javagroupId><artifactId>zipkin-autoconfigure-uiartifactId><scope>runtimescope>dependency><dependency><groupId>io.zipkin.javagroupId><artifactId>zipkin-serverartifactId>dependency>

2.在启动类添加注解&#64;EnableZipkinServer

package com.swc;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import zipkin.server.EnableZipkinServer;&#64;SpringBootApplication
&#64;EnableZipkinServer
public class SpringZipkinServerApplication {public static void main(String[] args) {SpringApplication.run(SpringZipkinServerApplication.class, args);}
}

3.设定端口8004&#xff0c;启动项目&#xff0c;访问http://localhost:8004&#xff0c;出现如下界面。

这里写图片描述

3.2 整合Zipkin

1.复制上面的Spring Cloud Sleuth例子为SpringZipkinClient,在pom文件中添加依赖&#xff1a;

<dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-sleuthartifactId>dependency>

2.修改配置文件

#指定zipkin的地址
spring.zipkin.base-url&#61;http://localhost:8004
#设置需求采样的请求的百分比
spring.sleuth.sample.percentage&#61;1.0

3.这样项目就整合了Zipkin&#xff0c;重新启动ZipkinServer&#xff0c;先访问http://localhost:8003/getSome 再访问http://localhost:8004
选择起始日期&#xff0c;点击“find traces”&#xff0c;即可看本次请求的详细信息。


推荐阅读
  • Firefox火狐浏览器关闭到http://detectportal.firefox.com的流量问题解决办法
    本文介绍了使用Firefox火狐浏览器时出现关闭到http://detectportal.firefox.com的流量问题,并提供了解决办法。问题的本质是因为火狐默认开启了Captive portal技术,当连接需要认证的WiFi时,火狐会跳出认证界面。通过修改about:config中的network.captive-portal-service.en的值为false,可以解决该问题。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
author-avatar
技术小菜鸟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有