springcloud 总集:https://www.tapme.top/blog/detail/2019-02-28-11-33

前言

  在第四篇和第五篇中提到一个叫关联 id的东西,用这个东西来将所有请求串起来,用来清晰的记录调用过程,以便以微服务的问题调试。

  微服务虽然能够将单体软件系统分解为更小的、更易于管理的小系统。但是这种特性是需要付出代价的。其中之一就是----调试困难。所以需要有一种办法能够将所有服务产生的消息聚合起来,方便的获取某一次用户请求的全部日志信息。本篇只解决将请求串起来这个问题,日志聚合需要对应的日志平台配合,这里不做讨论(其实就是将日志全部手机放到一个地方(比如 es),再进行查询)。

(PS:写这篇的时候突然发现,前面那种实现关联 id 方法是错误的,学习《spring 微服务实战》过程中看到了不少错误,单大都不是很重要的,唯独关联 id 的那部分问题挺大。书上的实现是在每个服务中增加一个过滤器,提取入站请求中的关联 id,然后存到 ThreadLocal 中,然后给服务调用类 Ribbon 加一个过滤器:用于从 ThreadLocal 中提取出关联 id 然后加入到请求的 header 中。这里的问题是前面的过滤器所在的线程和后面服务调用的线程不是同一个线程,也就无法用 ThreadLocal 来进行数据保存。在 Feign 请求的过程中是获取不到保存的值的)

集成 Spring Cloud Sleuth

什么是 Spring Cloud Sleuth

  简单来说 Spring Cloud Sleuth 就是为开发人员实现了前面关联 ID 尝试做的事情,而且做的更好。主要有一下几个功能:

  • 透明地创建并注入一个关联 ID 到服务调用中(如果不存在关联 ID)
  • 管理关联ID到出站服务的传播,将关联 iD 自动添加啊到出站调用中
  • 关联信息添加到 Spring 的 MDC 日志记录,以便生成的关联ID由 Spring Boot 默认的 SL4J 和 Logback 实现自动记录

怎么用

  用法很简单,只需在要用的服务中引入Spring Cloud Sleuth依赖即可,代码如下:

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

然后就会发现引入该依赖的服务日志打印语句中都会多一些数据,结构如下:

2019-02-28 11:03:02 [ERROR] [server Name,trace ID,span ID,isSendData]...

其中各项意义如下:

  • server Name:默认情况下使用spring.applicataion.name
  • trace ID: 跟踪 ID,相当于关联 ID。整个微服务调用过程的唯一编号。
  • span ID: 跨度 ID。表示某个服务过程中的唯一 ID,比如在服务 A 中打印的日志跨度 ID 都是一样的。
  • isSendData: 是否发送数据给 Zipkin。可配置是否将数据发给 Zipkin,毕竟不是所有日志打印都是要收集的。

  使用过于简单,因此不提供代码,自己引入依赖就能看到效果,无需任何配置。

尾声

  微服务的分布式跟踪是一个很复杂的过程,上面所说的仅仅只是实现了给日志输入打上标记,让微服务调用能够串在一起。之后还有一个很重要的过程是日志收集和分析。后面如果有时间,可能会继续更新完成日志聚合。

2019,Fighting!

本篇原创发布于:FleyX 的个人博客

springCloud学习6(Spring Cloud Sleuth 分布式跟踪)的更多相关文章

  1. Spring Cloud Sleuth 服务跟踪 将跟踪信息存储到数据库

    参见上一篇博客:Spring Cloud Sleuth 服务跟踪 参考:zipkin使用mysql保存数据 主要在跟踪服务上配置: 在数据库创建数据库表:(可不创建,在classpath中添加对应的s ...

  2. springcloud学习04- 断路器Spring Cloud Netflix Hystrix

    依赖上个博客:https://www.cnblogs.com/wang-liang-blogs/p/12072423.html 1.断路器存在的原因 引用博客 https://blog.csdn.ne ...

  3. Spring Cloud Sleuth 服务跟踪

    项目结构: 一跟踪服务中心,用于收集和展示跟踪情况. 一个服务提供者. 一个服务消费者. 服务跟踪中心: pom.xml添加如下依赖: <dependency> <groupId&g ...

  4. Spring Cloud 学习 (七) Spring Cloud Sleuth

    微服务架构是一个分布式架构,微服务系统按业务划分服务单元,一个微服务系统往往有很多个服务单元.由于服务单元数量众多,业务的复杂性较高,如果出现了错误和异常,很难去定位.主要体现在一个请求可能需要调用很 ...

  5. Spring Cloud Sleuth服务跟踪

    监控 使用zipkin(https://zipkin.io/) 监控服务构建: (普通的springBoot项目) <!--引入的zipkinServer依赖--> <depende ...

  6. Spring Cloud Alibaba学习笔记(23) - 调用链监控工具Spring Cloud Sleuth + Zipkin

    随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求陷入性能瓶颈或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何 ...

  7. Spring Cloud Sleuth+ZipKin+ELK服务链路追踪(七)

    序言 sleuth是spring cloud的分布式跟踪工具,主要记录链路调用数据,本身只支持内存存储,在业务量大的场景下,为拉提升系统性能也可通过http传输数据,也可换做rabbit或者kafka ...

  8. 当Spring Cloud Alibaba Sentinel碰上Spring Cloud Sleuth会擦出怎样的火花

    前言 今年主要会做一个比较完整的微服务项目开源出来.目前已经开始了,刚兴趣的先Star一个吧. 项目:https://github.com/yinjihuan/kitty-cloud 基础框架:htt ...

  9. 【SpringCloud构建微服务系列】分布式链路跟踪Spring Cloud Sleuth

    一.背景 随着业务的发展,系统规模越来越大,各微服务直接的调用关系也变得越来越复杂.通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用协同产生最后的请求结果,几乎每一个前端请求都会形成一 ...

随机推荐

  1. easyui datagrid合并相同数据的单元格。

    /** * 根据作用域填充单元格 */ function mergeCellsByField(tableID, colList) { var ColArray = colList.split(&quo ...

  2. Systemd笔记

    Systemd管理的启动脚本位于 /usr/lib/systemd/system/ 下 Systemd启动顺序约定为: 当前服务满足启动条件, 则立即创建进程进行并行启动, 启动条件指服务的依赖关系( ...

  3. linux zip命令 tar命令 【压缩、解压缩】参数列表:

    linux zip命令参数列表:   -a 将文件转成ASCII模式 -F 尝试修复损坏的压缩文件 -h 显示帮助界面 -m 将文件压缩之后,删除源文件   -n 特定字符串 不压缩具有特定字尾字符串 ...

  4. QuickSortDemo

    package com.suning.sntcscase.controller.MutiThread; import static jdk.nashorn.internal.objects.Globa ...

  5. 浅谈PageRank

    浅谈PageRank 2017-04-25 18:00:09 guoziqing506 阅读数 17873更多https://blog.csdn.net/guoziqing506/article/de ...

  6. QT+OPENCV实现录屏功能

    本文使用QT+opencv来实现对指定窗体画面录制,并保存为avi文件. (1)获取窗体界面 QScreen类有一个grabWindow函数,可以用来获取窗体的画面,这个函数使用很简单,就是传入窗体句 ...

  7. WebDriver常用的api

    WebDriver常用的api 获取window对象 Window window = driver.manage().window(); 1)  窗口最大化 Maximize() 2)  窗口大小 g ...

  8. RobotFrameWork中使用Chrome浏览器

    RF默认使用的是Firefox浏览器,如果要修改为其他浏览器要怎么做呢? 1.按F5搜索关键字[Open Browser],可以看到其帮助信息中说明了不同浏览器时browser参数的值 2.Pytho ...

  9. ElasticSearch中"distinct","count"和"group by"的实现

    最近在业务中需要使用ES来进行数据查询,在某些场景下需要对数据进行去重,以及去重后的统计.为了方便大家理解,特意从SQL角度,方便大家能够理解ES查询语句. 1 - distinct ; { &quo ...

  10. ES-PHP向ES批量添加、查询文档报 No alive nodes found in your cluster

    转自: https://blog.csdn.net/itfootball/article/details/53637238 问题描述为了提高保存数据到es消耗的时间,采取积攒到3000条文档的时候才保 ...