前言

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

Brave

何为Brave?

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

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

#mermaid-svg-riwF9nbu1AldDJ7P {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-riwF9nbu1AldDJ7P .error-icon{fill:#552222;}#mermaid-svg-riwF9nbu1AldDJ7P .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-riwF9nbu1AldDJ7P .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-riwF9nbu1AldDJ7P .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-riwF9nbu1AldDJ7P .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-riwF9nbu1AldDJ7P .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-riwF9nbu1AldDJ7P .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-riwF9nbu1AldDJ7P .marker{fill:#333333;stroke:#333333;}#mermaid-svg-riwF9nbu1AldDJ7P .marker.cross{stroke:#333333;}#mermaid-svg-riwF9nbu1AldDJ7P svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-riwF9nbu1AldDJ7P .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-riwF9nbu1AldDJ7P .cluster-label text{fill:#333;}#mermaid-svg-riwF9nbu1AldDJ7P .cluster-label span{color:#333;}#mermaid-svg-riwF9nbu1AldDJ7P .label text,#mermaid-svg-riwF9nbu1AldDJ7P span{fill:#333;color:#333;}#mermaid-svg-riwF9nbu1AldDJ7P .node rect,#mermaid-svg-riwF9nbu1AldDJ7P .node circle,#mermaid-svg-riwF9nbu1AldDJ7P .node ellipse,#mermaid-svg-riwF9nbu1AldDJ7P .node polygon,#mermaid-svg-riwF9nbu1AldDJ7P .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-riwF9nbu1AldDJ7P .node .label{text-align:center;}#mermaid-svg-riwF9nbu1AldDJ7P .node.clickable{cursor:pointer;}#mermaid-svg-riwF9nbu1AldDJ7P .arrowheadPath{fill:#333333;}#mermaid-svg-riwF9nbu1AldDJ7P .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-riwF9nbu1AldDJ7P .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-riwF9nbu1AldDJ7P .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-riwF9nbu1AldDJ7P .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-riwF9nbu1AldDJ7P .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-riwF9nbu1AldDJ7P .cluster text{fill:#333;}#mermaid-svg-riwF9nbu1AldDJ7P .cluster span{color:#333;}#mermaid-svg-riwF9nbu1AldDJ7P div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-riwF9nbu1AldDJ7P :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

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。

链路追踪——【Brave】第一遍小结相关推荐

  1. 微服务链路追踪SkyWalking第一课 SkyWalking简介

    开篇词:从剖析 SkyWalking 源码到吃透 APM 核心知识 你好,我是你的 SkyWalking 老师徐郡明,网名吴小胖,你也可以叫我胖哥.进入互联网行业工作多年,主要从事基础组件开发相关的工 ...

  2. ajax请求是宏任务还是微任务_微服务-如何解决链路追踪问题

    一.链路追踪 微服务架构是将单个应用程序被划分成各种小而连接的服务,每一个服务完成一个单一的业务功能,相互之间保持独立和解耦,每个服务都可以独立演进.相对于传统的单体服务,微服务具有隔离性.技术异构性 ...

  3. 使用篇丨链路追踪(Tracing)很简单:链路实时分析、监控与告警

    前文回顾: 基础篇|链路追踪(Tracing)其实很简单 使用篇|链路追踪(Tracing)其实很简单:请求轨迹回溯与多维链路筛选 在前面文章里面,我们介绍了单链路的筛选与轨迹回溯,是从单次请求的视角 ...

  4. SkyWalking优化-打造千亿储能、毫秒查询的链路追踪系统

    目录 1.开篇 2.为什么需要全链路监控 3.为什么选择Skywalking 4.预研阶段 4.1 架构和原理 4.2 副作用 5.POC阶段 5.1 对接发布系统 5.2 完善插件补全链路 5.3压 ...

  5. 《深入理解 Spring Cloud 与微服务构建》第十四章 服务链路追踪 Spring Cloud Sleuth

    <深入理解 Spring Cloud 与微服务构建>第十四章 服务链路追踪 Spring Cloud Sleuth 文章目录 <深入理解 Spring Cloud 与微服务构建> ...

  6. GopherChina第一天小结

    GopherChina第一天小结 2019-04-29 07:34 by 轩脉刃, ... 阅读, ... 评论, 收藏, 编辑 GopherChina第一天小结 今天参加了Asta举办的第五届Gop ...

  7. SpringCloud微服务-服务注册发现-负载均衡-服务调用-服务降级-服务网关-配置中心-消息总线-消息驱动-链路追踪-alibaba-nacos-sentinel-seata理论原理分析

    SpringCloud理论技术 概述 ​ Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总 ...

  8. go 链路追踪_【go-micro实践】jaeger分布式链路追踪

    安装jaeger jaeger提供一个all in one 的docker镜像,可以快速搭建实验环境 docker run -d --name jaeger -e COLLECTOR_ZIPKIN_H ...

  9. 微服务架构--链路追踪(Nginx篇)

    阅读提示:本文不提供链路追踪的完整解决方案,只提供Nginx层对链路追踪的支持方案! 1 背景介绍 微服务的诞生,解决了传统单体应用的很多问题,如可维护性差.扩展性差和灵活性差等问题(粗粒比较).微服 ...

最新文章

  1. seaborn可视化水平箱图(Horizontal Boxplot in Python with Seaborn)
  2. 利用找因子来找方程解的个数
  3. 微软为NBA提供云计算服务、Google公布Fuchsia OS细节、Zoom用户可选择数据库等|Decode the Week...
  4. 部署及配置Lync Server 2013 监控功能
  5. Spring Cloud Alibaa
  6. mysql查询包含字符串(模糊查询)
  7. vscode 结束_21 个VSCode 快捷键,让代码更快,更有趣
  8. linux stress 工具,Linux压力测试工具stress的参数详解
  9. Python--面向对象学习继承(11.17)
  10. Centos8.4 配置本地镜像yum源
  11. 指数温度20190804
  12. 自主可控计算机大会2019,荣科科技受邀参加2019自主可控计算机大会
  13. android图片选择器实现说明
  14. 联想y7000p安全锁孔怎么用_Y7000P-个人使用感受_拯救者笔记本-联想社区
  15. tcping要安装什么工具linux,Linux下的TCP测试工具——TCPING安装简明教程
  16. mipi的dsi全称_MIPI-DSI/CSI协议介绍
  17. 怎么用计算机平方,手机计算器平方怎么按
  18. 人工智能成热门 苹果谷歌等科技公司竞相涌入改变神经科学研究
  19. 《Neural Collaborative Filtering》NCF模型的理解以及python代码
  20. mysql数据字段属性

热门文章

  1. np.random.normal
  2. 第四章 LTI系统的变换域分析
  3. 计算机中year函数怎么使用,在excel中year函数的使用方法
  4. 「题目代码」P1013~P1017(Java)
  5. 【 uC/OS II 】uC/OS II 源代码阅读(os_mbox.c)消息邮箱
  6. 梦想是一个天真的词,实现梦想是一个残酷的词。
  7. vnc配置和display操作(杂)
  8. 002拯救oibh总部
  9. 在线出售域名页面html源码
  10. PID调谐方法:根据开环响应特性调谐(二)