学习
实践
活动
工具
TVP
写文章
专栏首页网管叨bi叨分布式链路跟踪中的traceid和spanid代表什么?

分布式链路跟踪中的traceid和spanid代表什么?

在分布式服务架构下,一个 Web 请求从网关流入,有可能会调用多个服务对请求进行处理,拿到最终结果。这个过程中每个服务之间的通信又是单独的网络请求,无论请求经过的哪个服务出了故障或者处理过慢都会对前端造成影响。

处理一个Web请求要调用的多个服务

为了能更方便的查询哪个环节的服务出现了问题,现在常用的解决方案是为整个系统引入分布式链路跟踪。

在分布式链路跟踪中有两个重要的概念:跟踪(trace)和 跨度( span)。trace 是请求在分布式系统中的整个链路视图,span 则代表整个链路中不同服务内部的视图,span 组合在一起就是整个 trace 的视图。

在整个请求的调用链中,请求会一直携带 traceid 往下游服务传递,每个服务内部也会生成自己的 spanid 用于生成自己的内部调用视图,并和traceid一起传递给下游服务。

traceid 在请求的整个调用链中始终保持不变,所以在日志中可以通过 traceid 查询到整个请求期间系统记录下来的所有日志。请求到达每个服务后,服务都会为请求生成spanid,而随请求一起从上游传过来的上游服务的 spanid 会被记录成parent-spanid或者叫 pspanid。当前服务生成的 spanid 随着请求一起再传到下游服务时,这个spanid 又会被下游服务当做 pspanid 记录。

分布式链路跟踪中的trace和span

通过在访问日志和业务日志里记录的traceid、spanid 和 pspanid 能完整的还原出整个请求的调用链路视图,对错误排查能起到很大的帮助。

上面就是分布式链路跟踪的原理,我们可以自己实现,也可以依赖 opentracing 这种开源的解决方案。一般是在请求到达网关的开始,生成本次请求的traceid 和 在网关服务内的spanid ,将他们放在HTTP 请求头或者RPC调用的元数据里,在调用下游服务时继续向下传递。下游的RESTful API服务的全局路由中间件和RPC服务的拦截器里会接收请求携带的traceid 和生成当次请求在服务内部的spanid,从上游接收到的 spanid 在这里会被转换成 pspanid。除此之外我们甚至可以把 traceid 和 spanid 注入到一些数据库连接池应用里,让记录的慢SQL日志里同样能打上 traceid 和 spanid 信息,为请求的响应过慢提供有效的分析数据。

文章分享自微信公众号:
网管叨bi叨

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:KevinYan11
原始发表时间:2021-05-23
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 撸了几天的sofa-tracer之后,我悟了!

    应用A,B,C,D,E 以一个层级关系依赖, 当用户向 应用A 发起请求,但是返回了个异常,为了排查这个问题,我们可能要一台台服务器去排查。在分布式架构下,每...

    九灵
  • 微服务难点剖析 | 服务拆的挺爽,问题是日志该怎么串联起来呢?

    现在微服务架构盛行,很多以前的单体应用服务都被拆成了多个分布式的微服务,以解决应用系统发展壮大后的开发周期长、难以扩展、故障隔离等挑战。

    KevinYan
  • 【分布式日志系统】springboot+zipkin+dubbo实现链路跟踪(上)

    微服务大行其道的今天,如果做的是一个单体应用,甚至三个以内的服务,对于问题的排查上,使用原始的登录服务器,一个一个日志文件对比当然可行,并且一般结合用户的资金情...

    小尘哥
  • Istio多集群链路追踪实践

    为了实现多集群的流量治理,我们采用Istio官方提供的多主集群进行Istio的部署,这样就出现一个问题,对于多主集群的Istio治理,如何进行跨集群的流量监控,...

    CNCF
  • 牛逼哄哄的全链路监控系统!搭建起来也没有想象中的那么难啊...

    随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可...

    用户8639654
  • 天机阁——全链路跟踪系统设计与实现

    小时光茶社 传说中天机阁里有一台掌控世间一切的机器,万物运行由此产生。本文的“天机阁”是一个基于链路跟踪的监控系统,后台开发人员能够通过“天机阁”洞察“天机”...

    小时光
  • 轻量级日志追踪方案——TLog

    TLog提供了一种最简单的方式来解决日志追踪问题,它不收集日志,也不需要另外的存储空间,它只是自动的对你的日志进行打标签,自动生成TraceId贯穿你微服务的一...

    黑洞代码
  • 快速了解分布式链路追踪系统 zipkin

    和市面上其它分布式链路追踪系统一样,Zipkin 也是根据 Google 论文《Dapper,大规模分布式系统的跟踪系统》(https://bigbully.g...

    高楼Zee
  • 干货 | Qunar全链路跟踪及Debug

    作者简介 王克礼,去哪儿平台事业部基础架构Java开发工程师,参与开发和维护去哪儿内部中间件,包括配置中心、消息队列、日志收集及链路跟踪系统QTracer等。 ...

    携程技术
  • 一文详解|Go 分布式链路追踪实现原理

    在分布式、微服务架构下,应用一个请求往往贯穿多个分布式服务,这给应用的故障排查、性能优化带来新的挑战。分布式链路追踪作为解决分布式应用可观测问题的重要技术,愈发...

    开源小E
  • 分布式链路追踪要怎么玩?

    最近公司服务出现了一个bug,问题一直没有查出来在哪里,主要是某个接口调用两个应用的日志输出都没有问题,并且在整个请求链路较长,仅仅定位这个问题就定位了很久,效...

    moon聊技术
  • [业界方案]用Jaeger来学习分布式追踪系统Opentracing

    笔者之前有过zipkin的经验,希望扩展到Opentracing,于是在学习Jaeger基础上总结出此文,与大家分享。

    罗西的思考
  • Zipkin — 微服务链路跟踪.

     Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 ...

    JMCui
  • 如何实现一个全链路监控平台

    随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可...

    用户4283147
  • 一文搞懂全链路监控:方案概述与比较!

    随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可...

    互扯程序
  • Dubbo日志链路追踪TraceId选型

    开发排查系统问题用得最多的手段就是查看系统日志,但是在分布式环境下使用日志定位问题还是比较麻烦,需要借助 全链路追踪ID 把上下文串联起来,本文主要分享基于 ...

    陶陶技术笔记
  • Ocelot 集成Butterfly 实现分布式跟踪

    微服务,通常都是用复杂的、大规模分布式集群来实现的。微服务构建在不同的软件模块上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布...

    张善友
  • Dubbo日志链路追踪TraceId选型

    开发排查系统问题用得最多的手段就是查看系统日志,但是在分布式环境下使用日志定位问题还是比较麻烦,需要借助 全链路追踪ID 把上下文串联起来,本文主要分享基于 ...

    陶陶技术笔记

扫码关注腾讯云开发者

领取腾讯云代金券