Sleuth深入用法

Sleuth源码解析 一、概念介绍 先说几个概念。 span:span是sleuth中最基本的工作单元,一个微服务收到请求后会创建一个span同时产生一个span id,span id是一个64位的随机数,sleuth将其转化为16进制的字符串,打印在日志里面。其对应的实现类是RealSpan。 trace id:在一个调用链条中,trace id是始终不变的,每经过一个微服务span id生成一个新的,所以通过trace id可以找出调用链上所有经过的微服务。trace id默认是64位,可以通过spring.sleuth.t 阅读详情

TracingFilter

Sleuth是通过Brave的TracingFilter达到收集Span信息的目的。

我们可以自定义Filter来对Span信息做一些自定义的修改,比如增加tag或者响应头信息。注意:自定义的Filter的优先级要比TracingFilter的低,不然无法拿到TracingFilter处理之后的信息。

Baggage

Baggage是存储在Span上下文的一组Key/Value的键值对,跟traceId和spanId不同,它不是必选项。

它相当于Sleuth暴露的一个功能接口,通过它,我们可以让自定义数据沿着调用链一直往后传递。典型的应用场景是登陆信息的传递。

实例

客户端

自定义过滤器

package com.springcloud.sleuthconsumer.filter;

import brave.propagation.ExtraFieldPropagation;
import org.springframework.cloud.sleuth.instrument.web.SleuthWebProperties;
import org.springframework.cloud.sleuth.instrument.web.TraceWebServletAutoConfiguration;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.GenericFilterBean;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.regex.Pattern;

/**
 * 自定义过滤器,
 * 获取当前的SessionId, 放入Baggage中
 * 注意, 因为不是所有的请求都需要往后传递, 所以会对一些请求跳过执行
 */
@Component
@Order(TraceWebServletAutoConfiguration.TRACING_FILTER_ORDER + 1)
public class SessionFilter extends GenericFilterBean {
    private Pattern skipPattern = Pattern.compile(SleuthWebProperties.DEFAULT_SKIP_PATTERN);

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
        if (!(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse)) {
            throw new ServletException("Filter just supports HTTP requests");
        }
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        boolean skip = skipPattern.matcher(httpRequest.getRequestURI()).matches();

        if (!skip) {
            // 将 SessionId 放到 Baggage 中
            ExtraFieldPropagation.set("SessionId", httpRequest.getSession().getId());
        }
        filterChain.doFilter(request, response);
    }
}

配置文件中配置

spring:
  application:
    name: sleuth-consumer
  sleuth:
    baggage-keys:  # 注意, Sleuth2.0.0之后, baggage的 key 必须在这里配置才能生效
      - SessionId

服务端配置文件中配置

spring:
  application:
    name: sleuth-consumer
  sleuth:
    baggage-keys:  # 注意, Sleuth2.0.0之后, baggage的 key 必须在这里配置才能生效
      - SessionId

调用ExtraFieldPropagation.get("SessionId");获取

SLEUTH模型:城市扩张预测的终极工具 在城市规划与管理领域,预测和模拟城市发展一直是挑战性极高的任务。SLEUTH模型,作为一种自适应的城市增长模拟工具,凭借其强大的自组织能力与灵活性,逐渐成为专业研究者和城市规划者青睐的工具。它不仅融合了地理信息系统(GIS)的强大数据处理能力,还通过定义特定的规则和参数来模拟城市扩张的趋势和模式。在本章中,我们将对SLEUTH模型的基本概念进行介绍,并深入探讨其在城市扩张模拟中扮演的关键角色。SLEUTH模型中的参数定义必须根据实际情况进行精确设定。 阅读详情

相关推荐

无人驾驶小车调试笔记(六)-- 车轮校准

简介:小车的动力完全来自于两个电机带动的车轮,在理想状态下,给两个电机同样的驱动参数,两个车轮会以同样的转速带动小车直线行驶,而实际情况是每个电机可能都会有个体差异,也就是说给予同样的驱动参数,表现出的转动速度会有些许不同,两个轮子的差速会导致车辆拐弯,后果就是给了直线行驶的控制命令,但是车走着走着就偏离了原本的方向,所以在开始控制之前,我们需要先平衡两个车轮的转速,保证在同样驱动参数下,两个车轮转速大致相同,也就是可以走直线。 车轮校准分为3步,测试、调整后再测试、保存参...

aibingjin的博客 1820

【Spring相关知识】Spring Cloud Sleuth上下文信息传递

Spring Cloud Sleuth 默认会传递 Trace ID 和 Span ID,但你可以通过Tracer和Baggage来传递自定义数据。你可以使用Tracer// 创建一个新的 Span Span newSpan = tracer . nextSpan() . name("custom-span") . start();// 添加自定义标签 newSpan . tag("custom-tag" , "custom-value");

wendao76的专栏 1413

stm32f103运行FreeRTOS使用DMA实现USART1不定长接收

使用DMA是实现USART1的不定长接收和发送数据。接收采用FIFO缓存和队列的方式向应用层抛数据。首先定义接收和发送的缓存区,缓存区的大小根据收发数据量确定。DMA接收开启转移完成和转移一般中断。在中断中从缓存向FIFO转移数据。串口开启空闲中断,实现接收数据的分帧。分帧后的数据节点通过写入到队列。发送数据缓存的大小根据发送数据量调整。然后初始化串口和DMA。串口的发送数据接口函数。...

polaris_zgx的博客 1991

使用Spring Cloud Sleuth进行全链路数据透传传递,获取traceid和header传递的数据

在做流量分发时,希望通过header中的请求流量标记进行流量分发和特殊处理,可以使用Spring Cloud Sleuth进行header数据的传递和使用。

进击的小白 1330

循迹小车控制实验:代码集成与硬件验证

在main.c文件中还需定义上层代码调用的GPIO输入和PWM输出相关函数,其中调用STM32CubeMX生成的HAL库函数。}else{}else{}else{}else{在main.h文件中的USER CODE BEGIN EFP注释代码段中外部声明Get函数和Set函数,使该函数可以被上层代码调用。循迹小车控制实验到本章全部完成。相比于前几章节的实验,本实验复杂程度是最高的。

u013288925的博客 127

多组学联合高级Mantel-test热图

对应的是「metabo」中物质间的相关性热图,单元格色块颜色表示相关系数大小,橙色表示+相关,绿色表示-相关;单元格内的数值表示相关性值大小,星号表示显著性。双组学(微生物组/ 转录组/代谢组等两两组合)关联分析,可视化组学特征间的关联显著性、强度及相关方向。表示<trans>与<metabo>中物质的Mantel test结果。表示整体相关的系数,连线颜色表示相关系数的显著性检验结果。宿主-微生物互作、疾病多组学机制、环境-生物多组学关联。为物质名称,不允许存在空值、重复值。

多组・学・多组学 362

Spring Cloud Sleuth HTTP详解

Spring Cloud Sleuth是一个分布式跟踪解决方案,集成Zipkin等流行的分布式跟踪系统,使得跨越不同微服务的跟踪和调试更加方便。Spring Cloud Sleuth支持以下协议的跟踪:HTTP、JMS、Kafka、RabbitMQ、gRP、Dubbo通过支持这些协议的跟踪,Spring Cloud Sleuth可以帮助开发者在分布式系统中更全面地获取服务调用信息和性能指标,从而更好地诊断和解决各种分布式系统中的问题。

qq_27890899的博客 2496

【头歌】链栈的基本操作及应用

另外,在算法的开始和结束时,栈都应该是空的,所以匹配到最后还要判断栈是否为空,若空,则说明匹配成功,返回1。其中表达式只包含三种括号,花括号{}、中括号[]、圆括号(),即它仅由 (、)、[、]、{、}六个字符组成。预期输出: 栈中元素依次为:12 47 5 8 6 92 45 63 75 38 4 29 弹出的栈顶元素 e=29 栈空否:0(1:空 0:否) 栈顶元素 e=4 栈的长度为11 清空栈后,栈空否:1(1:空 0:否)// 若栈不空,则用e返回S的栈顶元素,并返回OK;

qq_39977056的博客 4383

Sleuth的TraceFilter和Baggage用法实战

一开源项目地址 https://github.com/cakin24/spring-cloud-code/tree/master/ch16-2 二测试 1启动ch16-2-sleuth-provider 2启动ch16-2-sleuth-consumer 3在浏览器输入:http://localhost:8081/hello?name=cakin 三说明 consum...

实践求真知 1447

手把手教你完成YOLOv8分类识别界面搭建,使用Qt6设计YOLOv8分类识别系统,前台系统+后台管理系统开发实战,全网最详细教程

本项目基于YOLOv8分类模型,结合PySide6框架开发了一套图形化分类识别系统,支持图片、视频和摄像头实时检测。系统包含以下功能: 分类识别模块:完成图像/视频目标分类,界面展示检测结果。 用户管理模块:支持登录注册、头像修改、密码重置等功能。 AI问答模块:集成DeepSeek大模型接口,实现流式输出对话。 后台管理系统(第二版新增):管理员可管理用户信息及个人中心。 系统采用MySQL数据库存储用户数据,并提供完整的UI界面与交互逻辑。代码已开源,适用于毕业设计或快速部署场景。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 825

YOLOv11改进 | 引入DEConv细节增强卷积模块:恢复细节信息,提升小目标检测精度

摘要: YOLOv11在目标检测中面临小目标检测精度不足的问题,主要由于细节信息丢失。本文提出引入DEConv(细节增强卷积)模块,通过多分支卷积和残差连接恢复高频细节,提升小目标检测性能。DEConv结合3×3卷积与空洞卷积增强边缘信息,并自适应融合特征,兼容YOLOv11的P3层(小目标关键层)且计算高效。实验表明,该改进在无人机航拍、显微镜图像等密集小目标场景中显著减少漏检,同时保持轻量化和实时性优势。代码实现可直接嵌入现有YOLO架构,仅需替换P3层卷积模块。

走向CTO的路上... 948

Sleuth如何生成traceId

- SpringBoot启动时在zipkin的包中配置MDCScopeDecorator属性,添加traceId和spanId; - Sleuth版本:3.1.0:生成traceId和spanId直接使用traceId和spanId获取,日志格式为:[traceId=%X{traceId:-}, spanId=%X{spanId:-}] - Logback天然配置MDC,通过LogbackMDCAdapter最终填充traceId和spanId值。

天然玩家的博客 5457

个人量化系统的策略集合与赚钱之道:全栈深度解析 + 与主流开源框架对比

前三篇把系统的"骨架"拆完了——架构、工程化、部署。本篇回答最关键的问题:一句话:别人的系统是"程序员的系统"(写代码才能加策略),daily_stock_analysis 是"股民的 YAML"(写中文就能加策略)。这个差异决定了它能在多大程度上真的帮你赚钱。如果你用过 、、,加一个策略的流程是: 问题在哪?在 daily_stock_analysis 里,“策略” = 一个文件。每个 YAML 是一个自然语言描述的交易策略,包括: 看到没? ——整个策略就是一段中文,零代码。任何会写字的人都能加新策略

shiter编写程序的艺术 153

sleuth:基于TPM值的差异分析

欢迎关注”生信修炼手册”!kallisto等alignment-free转录本定量软件,会给出TPM值的定量结果。基于这种类型的结果进行差异分析时,有两种策略可以选择。第一种是采用txi...

庐州月光的博客 7301

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

springCloud学习6(Spring Cloud Sleuth 分布式跟踪)

springcloud 总集:https://www.tapme.top/blog/detail/2019-02-28-11-33 前言   在第四篇和第五篇中提到一个叫关联 id的东西,用这个东西来将所有请求串起来,用来清晰的记录调用过程,以便以微服务的问题调试。   微服务虽然能够将单体软件系统分解为更小的、更易于管理的小系统。但是这种特性是需要付出代价的。其中之一就是----调试困...

weixin_30340617的博客 81

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

一文读懂Spring Cloud Sleuth:分布式链路追踪利器

Spring Cloud Sleuth的核心价值‌:快速排障‌:通过TraceID串联分布式日志性能洞察‌:精确统计各服务处理耗时架构治理‌:可视化服务依赖关系通过简单的依赖引入和配置,开发者即可获得生产级的链路追踪能力。结合Zipkin等可视化工具,Sleuth成为微服务可观测性体系的重要基石。

huaqianzkh的专栏 1158

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

[SpringCloud学习笔记9]Sleuth分布式请求链路跟踪简单使用

Sleuth分布式请求链路跟踪简单使用 一、Sleuth简介 在微服务框架中,一个请求会经过多个服务节点协调处理后最后返回请求结果,这之间的过程就形成一条复杂的链路,任何一环出现高延时或者错误都会引起整个请求的失败. 而Sleuth则为分布式系统提供了一套完整的跟踪服务的解决方案,兼容zipkin. 二、Sleuth的使用 1.下载 https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/ 2.运行 直接将Jar包运行就行 j

叶落雨飘的博客 232

Spring Cloud Sleuth 原理简介和使用

为什么需要Spring Cloud Sleuth 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。 由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。 主要体现在,一个请求可能需要调用很多个服务,而内部服务的调用复杂性,决定了问题难以定位。 所以微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见,出了问题,很快定位。 举个例子,在微服务系

孟凡霄 2804

spring-cloud-sleuth简单使用

快速开始 一、导入依赖 <!--链路追踪 start--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cl...

Justin8503的博客 484

Spring Cloud Sleuth 极简使用

简介 在微服务环境下,一次请求可能会引起数十次、上百次的服务端服务之间的调用,这时候一旦出现问题,有些问题需要我们去考虑: 如何快速定位问题? 问题都涉及哪些服务? 到底哪一个服务出现问题了? 这时候分布式链路追踪(Spring Cloud Sleuth)就能帮我们解决问题。 官网原理图: 简单原理图: 名词解释: Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识 span:表示调用链路来源,通俗的理解span就是一次请求信息 简单使用 首先创建一个项目,引入如下依赖:

eRunn 429

sleuth原理详解

sleuth原理 1、关键术语 Span:Span基本工作单元,发送一个远程调度任务就会产生一个Span, Span 是用 64ID唯一标识的,Trace是用另一个64ID唯一标识的。Span还包含了其他的信息,例如摘要、时间戳事件、Span的ID以及进程 ID。 Trace:一系列spans组成的一个树状结构。 Annotation:用来及时记录一个事件的存在,一些核心annotations用来定义一个请求的开始和结束   cs- Client Sent -客户端发起一个请求,这个annoti.

weixin_40400410的博客 5424

Sleuth、Zipkin学习

Spring Cloud Sleuth是一个分布式链路追踪框架,主要用于在微服务架构中跟踪请求的调用链路。在微服务架构中,服务之间的通信非常频繁,日志分散在各个服务中,难以定位问题。

攸攸太上的博客 1347

Sleuth

文章目录原理介绍Brave和Zipkin使用依赖Sleuth对feign的支持Sleuth对RestTemplate的支持Sleuth对多线程的支持 原理介绍 Sleuth通过Trace定义一次业务调用链,根据它的信息,我们就知道多少个系统参与了该业务处理。 Span用来记录系统间的调用顺序和时间戳信息。 Trace和Span的信息经过整合,就能知道该业务的完整调用链。 Brave和Zipkin ...

加油 1481

集成Sleuth实现链路追踪

【代码】集成Sleuth实现链路追踪。

Sun的个人博客 1417

Spring Cloud Sleuth

Sleuth是SpringCloud的子项目,全称SpringCloud-Sleuth,提供分布式系统中链路追踪解决方案,同类产品还有Cat由大众点评开源,基于java开发的实时应用监控平台,包括实时应用监控、业务监控。集成方案是通过代理码埋点的方式来实现监控

zhuge_long的专栏 1115
上一篇: Sleuth
下一篇: Spring Cloud认证和授权
菜鸟=大神
博客等级 码龄11年 5粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值