当前位置: 首页 > news >正文

链路追踪——【Brave】第一遍小结

前言

微服务链路追踪系列博客,后续可能会涉及到Brave、Zipkin、Sleuth内容的梳理。

Brave

何为Brave?

github地址:https://github.com/openzipkin/brave

Brave是一个分布式追踪埋点库。

UserAction
Brave
Zipkin
UI

主要功能:
拦截请求,收集时序数据,关联、传播追踪上下文。最后,追踪数据会上报到Zipkin等服务器。

下面介绍Brave的几个核心功能:

1、Propagation

B3Propagation

Brave使用B3传播协议,即在http请求头中存储固定字段,来传递链路信息。如:x-b3-traceId、x-b3-spanId、x-b3-sampled等

在这里插入图片描述
举例:
在整合spring cloud sleuth项目中,针对任一请求,可在请求头中查看到相应的链路追踪字段信息。

x-b3-traceid:3bc54fac863bedb4
x-b3-spanid:e9d611683cf3613c
x-b3-parentspanid:3bc54fac863bedb4
x-b3-sampled:0

注意:
若B3已有固定字段满足不了您的需求,还可以通过BaggageField添加自定义业务字段。

步骤

主要包括两个重要环境:Inject(注入)和Extract(提取)。
其中,Inject即将b3字段信息添加到http header中,而Extract正好相反,及从http header中提取相应b3信息。

在这里插入图片描述

2、Span

Span,实际记录每个功能块执行信息的类。

(1)数据内容

主要包括以下三部分内容:
基础数据:用于跟踪树中节点的关联和界面展示,包括traceId、spanId、parentId、name、timestamp和duration。
name:用于在跟踪树节点的时间条上展示。
timestamp用于记录调用的起始时间
duration表示此次调用的总耗时,在跟踪树中将表示成该Span的时间条的长度。
Annotation数据:用来记录关键事件,只有四种,cs(Client Send)、sr(Server Receive)、ss(Server Send)、cr(Client Receive),所以在Span模型中,Annotation是一个列表,长度最多为4。
每种关键事件包含value、timestamp和endpoint,value就是cs、sr、ss和cr中的一种,timestamp表示发生的时间,endpoint用于记录发生的机器(ip)和服务名称(serviceName)。
BinaryAnnotation数据:如果需要绑定一些业务数据(日志)的话,可以将数据写入BinaryAnnotation中,它的结构和Annotation数据一模一样,在Span中也是一个列表,这里就不再阐述,但BinaryAnnotation中不宜放太多数据,不然将导致性能和体验的下降。

(2)分类

NoopSpan:从不上报Zipkin
RealSpan:可能上报,在finish()后上报
LazySpan:延迟创建Span(当第一个公共方法调用时)

3、Sample

采样器,并非所有的请求数据都会记录并上报Zipkin。
在这里插入图片描述

http://www.lryc.cn/news/21727.html

相关文章:

  • Vision Transformer(ViT)
  • 104-JVM优化
  • QML 颜色表示法
  • 基础数据结构--线段树(Python版本)
  • 【micropython】SPI触摸屏开发
  • 【云原生】k8s中Pod进阶资源限制与探针
  • AI - stable-diffusion(AI绘画)的搭建与使用
  • 应用场景五: 西门子PLC通过Modbus协议连接DCS系统
  • 我继续问了ChatGPT关于SAP顾问职业发展前景的问题,大家感受一下
  • Python小白入门---00开篇介绍(简单了解一下)
  • 【算法基础】C++STL容器
  • 【经典蓝牙】蓝牙 A2DP协议分析
  • Objective-C 构造方法的定义和声明规范
  • Matlab图像处理学习笔记
  • 笔记(三)——迭代器的基础理论知识
  • 没有公网ip怎么外网访问nas?快解析内网端口映射到公网
  • spring integration使用:消息转换器
  • Vue3电商项目实战-商品详情模块7【21-商品详情-评价组件-头部渲染、22-商品详情-评价组件-实现列表】
  • 地址,指针,指针变量是什么?他们的区别?符号(*)在不同位置的解释?
  • 【MongoDB】一、MongoDB的安装与部署
  • 《爆肝整理》保姆级系列教程python接口自动化(二十三)--unittest断言——上(详解)
  • MySQL的mvcc
  • vite:常见的配置
  • 计算机图形学:liang算法和Cyrus-Beck算法
  • React组件之间的通信方式总结(上)
  • C++17 nodiscard标记符
  • SAP 寄售业务的标准流程
  • 操作系统高频知识
  • 加载预训练模型,模型微调,在自己的数据集上快速出效果
  • VScode远程连接服务器-过程试图写入的管道不存在-could not establist connection to【已解决】