分布式链路追踪-skywalking

news2025/7/9 9:14:14

一、分布式调用链

随着业务的高速发展,服务之间的调用关系愈加复杂

线上每一个请求会经过多个业务系统,并产生对各种缓存或者DB 的访问,业务流会经过很多个微服务的处理和传递。

问题:

• —次请求的流量从哪个服务而来?最终落到了哪个服务中去?

• 为什么这个请求这么慢?到底哪个环节出了问题?

• 这个操作需要依赖哪些东西?是数据库还是消息队列?

• Redis挂了,哪些业务受影响?

所以如何理清他们并跟踪它们之间的调用关系就显得比较关键

二、什么是调用链

这个时候我们希望有—套这样的系统:

• 故障定位:调用链路跟踪,一次请求的逻辑轨迹可以完整清晰的展示出来。

• 性能分析:调用链的各个环节分别添加调用耗时,可以分析出系统的性能瓶颈。

• 数据分析:可以得到请求的行为路径,汇总分析应用在很多业务场景

同时我们还希望它具备:

• 低消耗性

• 低侵入性

• 时效性

• 决策支持

• 数据可视化

三、调用链选型

zipkin:是Twitter 开源的调用链分析工具,目前基于 springcloud sleuth 得到了广泛的使用,使用部署简单。

Pinpoint:是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。

SkyWalking:是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache化器。

CAT:是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监

调用链-基本原理和接入方式

调用链选型

数据存储支持对比

社区活跃度

性能分析

模拟了三种并发用户:500,750,1000。使用jmeter测试,每个线程发送30个请求,设置思考时间为10ms,使用的采样率为1,即100%组合起来,一共有12种。下面看下汇总表:

四、skywalking支持的rpc框架

  • Dubbo

  • Dubbox

  • Apache Dubbo

  • Motan

  • gRPC

  • Apache ServiceComb Java Chassis

  • SOFARPC

五、skywalking 总体架构

  • Metric的特点是,它是可累加的:他们具有原子性,每个都是一个逻辑计量单元,或者一个时间

段内的柱状图。 例如:队列的当前深度可以被定义为一个计量单元,在写入或读取时被更新统

计; 输入HTTP请求的数量可以被定义为一个计数器,用于简单累加; 请求的执行时间可以被定义为一个柱状图,在指定时间片上更新和统计汇总。

  • Tracing的最大特点就是,它在单次请求的范围内,处理信息。 任何的数据、元数据信息都被绑定到系统中的单个事务上。 例如:一次调用远程服务的RPC执行过程;一次实际的SQL查询语句;一次HTTP请求的业务性ID。

总结,Metric主要用来进行数据的统计,比如HTTP请求数的计算。Tracing主要包含了某一次请求的链路数据。

1.探针(agent)负责进行数据的收集,包含了Tracing和Metrics的数据,agent会被安装到服务所在的服务器上,以方便数据的获取。

2. 可观测性分析平台OAP(Observability Analysis Platform),接收探针发送的数据,并在内存中使用分析引擎(Analysis Core)进行数据的整合运算,然后将数据存储到对应的存储介质上,比如Elasticsearch、MySQL数据库、H2数据库等。同时OAP还使用查询引擎(Query Core)提供HTTP查询接口。

3. Skywalking提供单独的UI进行数据的查看,此时UI会调用OAP提供的接口,获取对应的数据然后进行展示

六、告警功能

Skywalking每隔一段时间根据收集到的链路追踪的数据和配置的告警规则(如服务响应时间、服务响应

时间百分比)等,判断如果达到阈值则发送相应的告警信息。发送告警信息是通过调用webhook接口完

成,具体的webhook接口可以使用者自行定义,从而开发者可以在指定的webhook接口中编写各种告

警方式,比如邮件、短信等。告警的信息也可以在RocketBot中查看到。

skywalking默认的告警规则

1. 最近3分钟内服务的平均响应时间超过1秒

2. 最近2分钟服务成功率低于80%

3. 最近3分钟90%服务响应时间超过1秒

4. 最近2分钟内服务实例的平均响应时间超过1秒

七、java agent

java agent本质上可以理解为一个插件,该插件就是一个精心提供的jar包,这个jar包通过JVMTI(JVM Tool Interface)完成加载,最终借助JPLISAgent(Java Programming Language Instrumentation Services Agent)完成对目标代码的修改。

java agent技术的主要功能如下:

1、可以在加载java文件之前做拦截把字节码做修改

2、可以在运行期将已经加载的类的字节码做变更

3、还有其他的一些小众的功能

4、获取所有已经被加载过的类

5、获取所有已经被初始化过了的类

6、获取某个对象的大小

7、将某个jar加入到bootstrapclasspath里作为高优先级被bootstrapClassloader加载

8、将某个jar加入到classpath里供AppClassloard去加载

9、设置某些native方法的前缀,主要在查找native方法的时候做规则匹配

通过java agent技术进行类的字节码修改最主要使用的就是Java Instrumentation API。

java agent 启动时修改

启动时修改主要是在jvm启动时,执行native函数的Agent_OnLoad方法,在方法执行时,执行如下步骤:

1、创建InstrumentationImpl对象

2、监听ClassFileLoadHook事件

3、调用InstrumentationImpl的loadClassAndCallPremain方法,在这个方法里会去调用javaagent里MANIFEST.MF里指定的Premain-Class类的premain方法

java agent 运行时修改

运行时修改主要是通过jvm的attach机制来请求目标jvm加载对应的agent,执行native函数的Agent_OnAttach方法,在方法执行时,执行如下步骤:

1、创建InstrumentationImpl对象

2、监听ClassFileLoadHook事件

3、调用InstrumentationImpl的loadClassAndCallAgentmain方法,在这个方法里会去调用javaagent里MANIFEST.MF里指定的Agentmain-Class类的agentmain方法

如何使用java agent?

使用 java agent 需要几个步骤:

1. 定义一个 MANIFEST.MF 文件,必须包含 Premain-Class 选项,通常也会加入Can-Redefine-Classes 和 Can-Retransform-Classes 选项。

2. 创建一个Premain-Class 指定的类,类中包含 premain 方法,方法逻辑由用户自己确定。

3. 将 premain 的类和 MANIFEST.MF 文件打成 jar 包。

4. 使用参数 -javaagent: jar包路径 启动要代理的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/363264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT这是要抢走我的饭碗?我10年硬件设计都有点慌了

前 言 呃……问个事儿,听说ChatGPT能写电路设计方案了,能取代初级工程师了?那我这工程师的岗位还保得住么?心慌的不行,于是赶紧打开ChatGPT问问它。 嘿,还整的挺客气,快来看看我的职业生涯是否…

图扑孪生工厂流水线组态图可视化

前言 2018 年,世界经济论坛(WEF)携手麦肯锡公司共同倡议并正式启动了全球“灯塔工厂网络项目”(Lighthouse Network),共同遴选率先应用工业革命 4.0 技术实现企业盈利和持续发展的创新者与示范者。这就使得工厂系统需要对各流水线及生产运行成本方面进行…

非关系型数据库(mongodb)简单使用介绍

关系型数据库与非关系型数据库 关系型数据库有mysql、oracle、db2、sql server等; 关系型数据库特点:关系紧密,由表组成; 优点: 易于维护,都是使用表结构,格式一致; sql语法通用&a…

资源消耗降低 90%,速度提升 50%,解读 Apache Doris Compaction 最新优化与实现

背景LSM-Tree( Log Structured-Merge Tree)是数据库中最为常见的存储结构之一,其核心思想在于充分发挥磁盘连续读写的性能优势、以短时间的内存与 IO 的开销换取最大的写入性能,数据以 Append-only 的方式写入 Memtable、达到阈值…

Linux基础命令-lsof查看进程打开的文件

Linux基础命令-uptime查看系统负载 Linux基础命令-top实时显示系统状态 Linux基础命令-ps查看进程状态 文件目录 前言 一 命令的介绍 二 语法及参数 2.1 使用help查看命令的语法信息 2.2 常用参数 2.2.lsof命令-i参数的条件 三 命令显示内容的含义 3.1 FD 文件描述符的…

手工测试1年经验面试,张口要13K,我真是服了····

由于朋友临时有事, 所以今天我代替朋友进行一次面试,他需要应聘一个测试工程师, 我以很认真负责的态度完成这个过程, 大概近30分钟。 主要是技术面试, 在近30分钟内, 我与被面试者是以交流学习的方式进行的…

自动驾驶路径规划概况

文章目录前言介绍1. 路径规划在自动驾驶系统架构中的位置2. 全局路径规划的分类2.1 基础图搜索算法2.1.1 Dijkstra算法2.1.2 双向搜索算法2.1.3 Floyd算法2.2 启发式算法2.2.1 A*算法2.2.2 D*算法2.3 基于概率采样的算法2.3.1 概率路线图(PRM)2.3.2 快速…

docker启动容器报错No chain/target/match by that name.

一、问题描述 docker启动容器时提示: docker start xxx-search Error response from daemon: driver failed programming external connectivity on endpoint microblog-search (801478f2672887ee0fcf60eb7d7970703b4853f44f51b0b5b8622dafdb9580fb): (iptables failed: iptab…

【C ++】C++入门知识(二)

C入门(二) 作者:小卢 专栏:《C》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 1.引用 1.1.引用的概念及应用 引用(&) 引用不是新定义一个变量&#xff0…

前缀和与差分---概念+例题

目录 前缀和 概念 例题 差分 概念 例题 前缀和 概念 在高中学习了数列的概念,跟现在的数组很像。可以类比来看,数组的前缀和与数列的前n项和其实可以看成一个概念。很多算法题利用前缀和的思想也就是可以使用高中里面的前n项和来求解数组里面任何…

3年功能测试经验,面试想拿到15k很难吗?

一直觉得经验多,无论在哪都能找到满意的工作,但是现实却是给我打了一个大巴掌!事后也不会给糖的那种... 个人情况 大概介绍一下个人情况,男,本科,三年多测试工作经验,一毕业因为不成熟的经验以…

大型数据库Oracle12C 复习笔记

大型数据库Oracle1 Oracle基础1.1 Oracle基础概念1.2 Oracle体系结构1.3 多租户架构1.4 Oracle进程1.5 内存结构1.6 文件系统2 Oracle查询3 Oracle对象4 Oracle编程1 Oracle基础 与MySQL、MSSQL不同,Oracle数据库系统是美国ORACLE(甲骨文)公…

还在用chatGPT聊天?《元宇宙2086》已开始用AIGC做漫画连载了!

ChatGPT 是由 OpenAI开发的一个人工智能聊天机器人程序,于 2022 年 11 月推出。该程序使用基于 GPT-3.5架构的大型语言模型并通过强化学习进行训练。 ChatGPT 目前仍以文字方式互动,而除了可以透过人类自然对话方式进行交互,还可以用于相对复…

多线程使用哈希表

❣️关注专栏: JavaEE 多线程环境使用哈希表,HashMap 本身不是线程安全的. 在多线程环境下使用哈希表可以使用: Hashtable(不推荐使用)ConcurrentHashMap(推荐) 🎈1 Hashtable Hashtable是线程安全的&am…

OpenGL中图片尺寸和上屏尺寸不一致的变形问题解决

一、尺寸不一致问题: 图片加载到OpenGL纹理,再将纹理进行上屏的时候,可能会出现图片尺寸和屏幕尺寸不一致,导致图片绘制到屏幕时出现变形的问题: 二、根本原因: 原始图片的纹理尺寸(Textur…

计网之IP协议和以太网

文章目录一. IP协议1. IPv4报头介绍2. 解决IPv4地址不够用的问题3. IP地址管理4. 路由选择二. 以太网三. 浅谈DNS域名解析系统一. IP协议 IP协议是位于OSI模型中第三层(网络层)的协议, 在这层上工作的不止这一个协议, 但IP协议是网络层传输所使用的最主流的一种协议, 有IPv4和…

C语言——指针进阶

目录 前言 一. 字符指针 二. 指针数组 三. 数组指针 3.1 何为数组指针? 3.2 &数组名与数组名 四. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 五. 函数指针 六. 函数指针数组 七. 指向函数指针数组…

Java 继承中构造函数的问题

继承中构造函数的问题 父类构造函数和子类构造函数的关系 new一个之类对象时默认调用了父类的无参构造函数 ,创建了父类对象 父类的成员变量和成员方法才能创建出来 子类才能继承下来使用 首先创建一个父类,动物类 接下来创建一个子类,狗类&#xff…

基于OSG的虚拟校园系统的设计与实现

基于open scene graph的虚拟校园系统的设计与实现 摘要 •引言 • OSG基本原理 •OSG操作与动画 •视点的定位和切换 •自由漫游 •路径漫游 • 路径动画 • 点选和文字 • 粒子系统 • 3DMAX • 无线通信与数据库设计 • 实现步骤 • 结论 摘要 随着科技的不断发展,人工智能&a…

2023年,8种必备Selenium编写自动化用例的技巧

在开始自动化时,您可能会遇到各种可能包含在自动化代码中的方法,技术,框架和工具。有时,与提供更好的灵活性或解决问题的更好方法相比,这种多功能性导致代码更加复杂。在编写自动化代码时,重要的是我们能够…