链路追踪所需要了解的知识

简介: 【2月更文挑战第29天】链路追踪,或称调用链监控,用于记录跨服务的逻辑请求信息,协助开发者优化性能和定位问题。它捕获异常、错误和有价值的数据。

链路追踪(tracing)即调用链监控,特点是通过记录多个在请求间跨服务完成的逻辑请求信息,帮助开发人员优化性能和进行问题追踪。链路追踪可以捕获每个请求遇到的异常和错误,以及即时信息和有价值的数据。

1、微服务链路追踪解决的难题

随着微服务应用数量的极速增加,服务与服务链路之间的调用关系也变得错综复杂。此时,我们也会碰到各种难题。

  • 系统出现问题后,由于服务链路过长或过于复杂,无法快速准确定位问题。客户端(如浏览器)或者移动端应用报出异常或者错误,也无法确定是哪个服务抛出的异常。
  • 某个业务请求非常慢,且总是超时,无法确定系统哪个环节存在性能的问题。
  • 如何快速发现问题?可以通过调用链结合业务日志快速定位错误信息。
  • 如何判断故障影响范围?各个阶段链路耗时、服务依赖关系可以通过可视化界面展现出来,从而直观地审视故障的影响范围。
  • 如何梳理服务依赖以及依赖的合理性?如何分析链路性能问题以及实时容量规划?通过分析链路耗时、服务间的依赖关系,就可以得到用户的行为路径,汇总分析出具体出问题的场景。

2、链路追踪重要概念介绍

市面上的绝大部分APM都是以谷歌公开论文中提到的Dapper为基础构建而成,先来一起看看调用链监控中的几个重要概念。

  1. Trace

指一次完整的分布式调用链路可以看作一棵二叉树,从中我们能直观地看到请求经过所有服务的路径。从请求到服务器开始,到服务器返回响应数据结束,跟踪每次RPC调用的耗时,并使用唯一标识trace id。例如,你完成一次微信支付,从微信扫描二维码到付款成功,唯一trace id将保留在整个请求链路中。

服务间经过的分支链路构成了一条完整的链路,其中每一条分支链路都用全局唯一的trace id来标识,便于对其上下文进行追踪。

  1. Span

每次进行本地或者远程方法的调用时会创建一个Span,我们通过一个64位ID来标识它,Span中还有其他数据,例如描述信息、时间戳、key-value对(Annotation)的tag信息、parent id等,其中parent id可以表示Span调用链路来源。通过Span的ID我们可以轻松了解服务的父服务是谁,再结合trace id就可以将一条完整的请求调用链串联起来。

  1. Annotation

为附加在Span上的日志信息,如下图在请求中的应用。

  • Client Start:表示客户端发起请求;
  • Server Receive:表示服务端收到请求;
  • Server Send:表示服务端完成处理,并将结果发送给客户端;
  • Client Received:表示客户端获取到服务端返回的响应数据。
  • foo:表示开发者选择在跟踪中增加他们自己的注释,即业务数据,这些信息会和Span信息被一同记录。


可以利用Annotation里的信息来计算一次调用的耗时,只需将客户端结束的时间点减去客户端开始请求的时间点,如果要计算客户端发送网络耗时,即客户端接收请求的时间点减去客户端发送请求的时间点。

  1. Sampling

采样率,需在客户端按照比例埋点并将信息提交给服务端。采集信息时的低损耗是这类监控服务设计时的重要标准,如果监控工具采集信息时给微服务造成了严重的性能问题,反而得不偿失。进行样本采样时,应该根据系统业务和技术架构,对每个应用和服务分别设置相应的采样率,每个应用的采样率可以动态调整。在产品的不同阶段采样率可能不同。例如,产品上线后的时段需要大量采样来了解整个系统的运行状态,这就需要提高采样率,当系统处于稳定时期,可以适当降低收集采样的频率。


采样收集包括可变自适应采样与固定采样。

1)可变自适应采样机制是不使用统一的采样率,在低流量负载时会自动提高采样率,而高流量负载则会自动降低采样率,从而掌控性能损耗。

2)而固定采样率模式是设置采样的百分比,可以设置阈值为0~100之间,当采样率设置为100时,则每次调用都会进行采样收集。

3、链路追踪的工具介绍

了解了链路追踪工具的原理后,我们来看看业界常用的链路追踪系统Zipkin、PinPoint、SkyWalking,这里以SkyWalking为例子。

SkyWalking逻辑上分为4部分:探针、平台后端、存储和用户界面。

1)探针:基于不同的来源,探针的实现可能不一样,但作用都是收集数据。

2)平台后端:支持数据聚合、数据分析以及获取探针采集到的数据。数据获取与分析来自SkyWalking原生追踪和性能指标以及第三方数据来源,第三方数据来源包括Istio、Envoy telemetry及Zipkin的追踪格式化数据等。我们甚至可以使用可观测分析语言对原生度量指标和计量系统的扩展变量指标进行自定义聚合分析。

3)存储:通过开放的插件化的接口存放SkyWalking数据,你可以选择一个既有的存储系统,如Elasticsearch、H2或MySQL集群(ShardingSphere管理),也可以选择自己实现一个存储系统。

4)用户界面:一个基于接口并且可定制化的Web系统,用户可以查看和管理SkyWalking数据。

相关实践学习
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
相关文章
|
存储 运维 数据可视化
Jaeger,一个链路追踪神器!
在微服务架构中,一次请求可能经过多个服务节点,带来复杂的调用关系。如何追踪请求全链路、快速定位问题、优化性能,成为开发与运维的关键挑战。链路追踪(Tracing)技术应运而生,而 Jaeger 作为业界主流的开源分布式链路追踪系统,提供了强大的支持。本文将带你全面了解 Jaeger 的核心概念、架构原理、使用方式及实际项目中的落地方法,助你快速掌握链路追踪技术,提升系统的可观测性与稳定性。
1966 2
Jaeger,一个链路追踪神器!
|
8月前
|
监控 Windows
TUPortable安装步骤详解(附流量监控与进程占用查看教程)
TUPortable 是一款轻量级便携式流量监控工具,单文件运行,无需安装。支持Win7/10/11,以管理员身份运行即可实时查看全网速及各进程流量占用,支持多网卡选择与托盘驻留,适合快速诊断网络异常。(239字)
769 15
|
9月前
|
存储 自然语言处理 Java
为什么 Elasticsearch 搜索这么快?深入理解倒排索引与分词器原理
Elasticsearch 搜索快的秘诀在于倒排索引与分词器。倒排索引通过“词项→文档ID”映射,避免全表扫描;分词器则负责文本的切分与归一化处理,提升检索效率。本文图解剖析其核心原理,助你掌握ES高性能搜索的底层逻辑。(238字)
|
11月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
61402 11
|
Go API 数据库
腾讯WeKnora 架构学习指南
《WeKnora架构学习指南》系统解析了这一腾讯开源的智能知识库项目,涵盖核心架构、技术栈、代码结构与学习路径。通过生活化类比和深度流程图解,帮助开发者从零掌握Go后端、Vue前端、RAG原理及微服务协同,提供四阶段进阶路线与实战建议,助力快速上手并参与贡献。
2938 3
|
存储 人工智能
想让小模型‘偷师’大模型,如何选择合适的知识蒸馏技术?
本文三桥君围绕知识蒸馏技术展开。在人工智能领域,训练大模型面临挑战,知识蒸馏让小模型 “偷师” 大模型。文中介绍其两阶段(预训练、后训练 / 微调)及三种常用技术(软标签、硬标签、协同蒸馏),总结优缺点,助你理解应用该技术。
1111 0
|
架构师 算法 Java
阿里年薪百万的P7架构师简历都长什么样?他们都是怎么学习的?
我有一个朋友最近想从一个中型企业跳槽到大厂,目标瞄准了美团、滴滴、字节跳动等大厂,但投了简历,都石沉大海了!
|
移动开发 JavaScript API
Sprunki Game 实现技术分析及介绍
**Sprunki** 是一款基于音乐创作的游戏,作为经典游戏 **Incredibox** 的粉丝改版,它采用 HTML5 和 JavaScript 构建,通过拖拽式 UI 和模块化声音系统,提供了一个创意十足的音乐创作平台。游戏支持多种设备,并融入了 CSS3 动画和 Web Audio API,增强视觉与音效同步。玩家还可以通过社交媒体分享作品,参与社区互动。Sprunki 不仅是一款游戏,更是一个开放的创作平台。
|
存储 运维 监控
链路追踪(Tracing)其实很简单——分布式链路追踪的应用与兴起
作者:夏明(涯海) 创作日期:2022-07-14 专栏地址:【稳定大于一切】【稳定大于一切】分布式链路追踪已经被广泛应用于中大型企业的 IT 运维领域,为分布式应用的性能诊断与稳定性保障提供了有效的帮助。此外,分布式链路追踪的开源和商业化生态也发展迅猛,大量独立服务商或云厂商纷纷跟进,共同推动了分...
1226 0
链路追踪(Tracing)其实很简单——分布式链路追踪的应用与兴起
|
消息中间件 存储 监控
SpringCloud微服务实战——搭建企业级开发框架(三十八):搭建ELK日志采集与分析系统
一套好的日志分析系统可以详细记录系统的运行情况,方便我们定位分析系统性能瓶颈、查找定位系统问题。上一篇说明了日志的多种业务场景以及日志记录的实现方式,那么日志记录下来,相关人员就需要对日志数据进行处理与分析,基于E(ElasticSearch)L(Logstash)K(Kibana)组合的日志分析系统可以说是目前各家公司普遍的首选方案。 • Elasticsearch: 分布式、RESTful 风格的搜索和数据分析引擎,可快速存储、搜索、分析海量的数据。在ELK中用于存储所有日志数据。
1047 57
SpringCloud微服务实战——搭建企业级开发框架(三十八):搭建ELK日志采集与分析系统