分布式链路追踪工具Sky walking详解

news/2024/5/20 13:03:44

1,为什么要使用分布式链路追踪工具

随着分布式系统和微服务架构的出现,且伴随着用户量的增加,项目的体量变得十分庞大,一次用户请求会经过多个系统,不同服务之间调用关系十分复杂,一旦一个系统出现错误都可能会影响整个请求的处理结果。而因为项目十分庞大,调用链路十分复杂,无法快速定位失败的位置和原因。
除此之外,复杂的分布式系统也面临如下问题:

  • 性能分析:一个服务依赖很多,被依赖的服务也依赖其他服务。如果某个接口耗时突然变长,那未必是直接调用的下游服务慢了,也可能是下游的下游慢了造成的,如何快速定位耗时变长的根本原因
  • 链路梳理:需求迭代很快,系统之间调用关系变化频繁,靠人工难以梳理系统链路拓扑图【系统之间的调用关系】
为了解决这些问题。Google推出了分布式链路跟踪系统Dapper,之后各个互联网公司都参照Dapper的思想推出了自己的分布式链路跟踪系统,而这些系统就是分布式系统下的APM系统

2,什么是APM系统

APM【application performance management】即应用性能管理系统,是对企业系统即时监控以实现对应程序性能管理和故障管理的系统化解决方案。应用性能管理,主要指对企业的关键业务应用进行检测,优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本

APM系统是可以帮助理解系统行为,用于分析性能问题的工具,以便发生故障的时候,能够快速定位问题和解决问题

3,什么是OpenTracing

分布式链路跟踪最先由Goole在Dappper论文中提出,而Open Tracing通过提供平台无关,厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。

4,分布式链路追踪工具的主要工具对比

  • zipkin:Twitter公司开源的一个分布式追踪工具,被Spring Cloud Sleuth集成,使用广泛而稳定。
  • Sky walking:中国人吴晟【华为】开源的一款分布式追踪,分析,告警的工具,现在是Apache旗下的开源项目。
  • cat:大众点评开源的一款分布式链路追踪工具。
工具实现方式接入方式数据收集UI数据存储方案
zipkin拦截请求sleuth,引入依赖和配置链路,耗时一般内存,mysql,es,Cassandra
Sky walkingJava探针,字节码增强Javaagent链路,耗时,cpu,mem,JVM丰富es,mysql,h2,TiDB
cat代码埋点代码入侵链路,耗时,cpu,mem,JVM丰富mysql,hdfs

总结
zipkin

  • 优点:轻量级,Spring cloud集成,使用人数多,成熟
  • 缺点:功能简单,只有链路监控

sky walking

  • 优点,采集数据丰富,UI友好,扩展性高,使用者多,支持中间件以及框架多,社区活跃,
  • 缺点成熟度不够高

cat

  • 优点:采集数据丰富,UI友好,粒度最细
  • 缺点代码入侵,需要改动业务,git不够活跃,更新缓慢,存储支持不够广泛。

详细可查看 APM工具对比

5,Sky walking概述

根据官方解释,Sky walking是一个可观测分析平台【Observability Analysis Platform 简称OAP】和应用性能管理系统【Application Performance Management】简称APM。提供分布式链路追踪,服务网格遥测分析,度量聚合和可视化一体化解决方案。

主要特点

  • 多语言探针,Java,.net core和node.js。
  • 多监控手段,语言探针和Service mesh。
  • 轻量高效,不需要额外搭建大数据平台。
  • 模块化架构,UI,存储,集群管理多种机制可选。
  • 支持告警。
  • 优秀的可视化效果

Sky walking官网

6,Sky walking架构图

在这里插入图片描述
架构整体包含一下三个部分:

  • 探针【agent】:负责进行数据收集,包含Tracing【链路】和Metrics【度量】的数据,agent会被安装到服务所在的服务器上,一遍方便数据获取。
  • 可观测分析平台OAP:接收探针发送的数据,并在内存中使用分析引擎【Analysis Core】进行数据的整合运算,然后将数据存储到对应的存储介质上,比如ES,MySQL数据库,H2数据库等。同时OAP还使用查询引擎提供HTTP查询接口。
  • Sky walking提供单独的UI进行数据查看,此时UI会调用OAP提供的接口,获取对应的数据然后进行展示。

SkyWalking主要概念

  • 服务【Service】
  • 端点【Endpoint】
  • 实例【Instance】

如下图
在这里插入图片描述
上图中,我们编写了用户服务,这是一个web项目,在生产中部署了两个节点:192.168.1.100和
192.168.1.101。

  • 用户服务就是Sky walking的服务【Service】,用户服务其实就是一个独立的应用【Application】,在6.0之后的Sky walking将应用改名为服务【service】
  • 用户服务对外提供的HTTP接口比如【/usr/queryAll】就是一个端点,端点就是对外提供的接口
  • 192.168.1.100和192.168.1.101这两个相同服务部署的节点就是实例,实例指同一个服务可以部署多个。

7,环境搭建

7.1打开官网,点击下载

在这里插入图片描述

7.2下载对应的Sky walking版本

在这里插入图片描述

7.3 解压
tar -zxvf apache-skywalking-apm-9.0.0.tar.gz -C ./
7.4启动

解压后进入Sky walking的bin目录下
在这里插入图片描述
启动

./start.sh
# windowns系统使用./start.bat

在这里插入图片描述
使用jps命令查看进程
在这里插入图片描述
访问http://localhost:8080
在这里插入图片描述
部署成功

7.5下载探针

在这里插入图片描述
将探针解压

7.6 快速搭建一个微服务项目

从零搭建AlibabaCloud微服务项目

7.7 在本地IDEA项目中配置探针

项目结构如下
在这里插入图片描述
skywalking-agent就是解压后的探针

配置探针
在这里插入图片描述

在这里插入图片描述
添加

-javaagent:./skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=admin

命令解析
./skywalking-agent/skywalking-agent.jar 是探针的位置,如下图
在这里插入图片描述

Dskywalking.agent.service_name是在Sky walking服务中的名字
修改skywalking trace数据的后端地址
在这里插入图片描述
重新启动
在这里插入图片描述
启动成功

7.8 Sky walking UI界面查看

在这里插入图片描述

8 编写一个测试接口

@RestController
public class AdminController {@GetMapping("/getUserById")public String getUserById() {return "user:123";}
}

访问 http://localhost:8086/getUserById
查看拓扑图
在这里插入图片描述
链路追踪图
在这里插入图片描述
至此Sky walking环境搭建完成


http://www.mrgr.cn/p/67542831

相关文章

建发弘爱 X 袋鼠云:加速提升精细化、数字化医疗健康服务能力

厦门建发弘爱医疗集团有限公司(简称“建发弘爱”)创立于2022年,是厦门建发医疗健康投资有限公司的全资子公司,专业从事医疗健康领域的医疗服务。 建发弘爱通过医疗、健康及产业服务三大板块,为百姓提供医疗和健康全生命周期解决方案。以医疗机构为核心,管理及运营弘爱医院…

Linux-进程调度器

1. 前言 在计算机中,进程的数量远多于cpu的数量,所以就存在,多个进程抢占一个cpu的情况,所以就需要一套规则,决定这些进程被处理的顺序,这就叫做进程调度。 在我的简单理解下,其实就是把进程放…

删除单向链表中数据最小的结点

删除单向链表中数据最小的结点(1)算法的基本设计思想 要找到链表中数据最小的结点,可以使用4指针法。具体步骤如下:定义4个指针,分别命名为MinNodeprev、MinNode、CurrentNodePrev、CurrentNode,MinNodeprev、CurrentNodePrev指向链表的头结点,MinNode、CurrentNode指向…

leetcode 1235

leetcode 1235 代码 class Solution { public:int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {int n startTime.size();vector<vector<int>> jobs(n);for(int i0; i<n; i){jobs[i] …

RabbitMQ保证消息的可靠性

一、背景 消息丢失&#xff1a;下图是消息从生产者发送到消费者接收的关系图。通过图片可以看出&#xff0c;消息在生产者、MQ、消费者这三个环节都有可能丢失。 1.1 生产者丢失 生产者发送消息时连接MQ失败生产者发送消息到达MQ后未找到Exchange生产者发送消息到达MQ的Exc…

Java-线程-线程池

0.背景参考资料:Java线程池实现原理及其在美团业务中的实践在 Java 早期,每次创建线程时,都要涉及到线程的创建、销毁以及资源管理,这对于系统的性能和资源利用率是一种浪费。 因此,Java 提供了线程池的概念,以提高线程的管理效率和性能。资源管理优化:传统的线程创建和…

vue2项目升级到vue3经历分享4

后端重构&#xff0c;如果接口做好抽象封装&#xff0c;只需要考虑jar之间的兼容性问题&#xff0c;jdk版本不变&#xff0c;基本不用做太大的调整&#xff0c;但是前端就不一样&#xff0c;除了vue框架本身&#xff0c;css的调整&#xff0c;改起来更是让人头疼。前面写了vue2…

8.2版本Web端移动开发调试强制跳转新移动框架

解决方案: Common.config文件中增加配置项 <add key="MobileLoginType" value="1" /> 如下图其他注意事项: 没有配置MobileLoginType属性 或 MobileLoginType = "" 或 MobileLoginType = 2 都会执行重定向 MobileLoginType = 3 系…

SQL 基础 | UNION 用法介绍

在SQL中&#xff0c;UNION操作符用于合并两个或多个SELECT语句的结果集&#xff0c;形成一个新的结果集。 使用UNION时&#xff0c;合并的结果集列数必须相同&#xff0c;并且列的数据类型也需要兼容。 默认情况下&#xff0c;UNION会去除重复的行&#xff0c;只保留唯一的行。…

cordova build android 下载gradle太慢

一、 在使用cordova run android / cordova build android 的时候 gradle在线下载 对于国内的链接地址下载太慢。 等待了很长时间之后还会报错。 默认第一次编译在线下载 gradle-7.6.1-all.zip 然后解压缩到 C:\Users\Administrator\.gradle 文件夹中,下载慢导致失败。 二…

【软件工程】需求分析

目录 前言需求分析需求获取UML概述用例图用例图的组成用例图中的符号和含义包含的两种使用场景 用例图补充&#xff1a;“系统”用例模型建模确定系统参与者确定系统用例 用例文档用例文档组成部分 活动图组成元素初始节点和终点活动节点转换决策与分支、合并分岔与汇合 类图类…

Java面试八股文(SpringCloud篇)

****************************************************

Error: Cannot find module ‘D:\SoftSetupLoaction\nodejs\node_global\node_modules\npm\bin\npm-cli.js‘

Error: Cannot find module ‘D:\SoftSetupLoaction\nodejs\node_global\node_modules\npm\bin\npm-cli.js‘ 出现原因: 重新安装可装了nodejs和npm 网上查了很多方法,都建议重装,但是都没有效果(因为我就是重装之后出现的问题) 按照错误提示node_global找不到npm-cli.js,个人…

初探pinctrl子系统和GPIO子系统

前言: 在前面的led驱动程序和按键驱动程序中,无论是最传统的方法,还是总线设备驱动模型,还是基于设备树的总线设备驱动模型,都是直接操作寄存器的方法。驱动开发的本质确实是操作寄存器,但是一个芯片有几百个引脚,只是操作少数的几个引脚还好,如果是大量的引脚,比如LC…

前端开发攻略---使用Sass调整颜色亮度,实现Element组件库同款按钮

目录 1、演示 2、实现原理 3、实现代码 1、演示 2、实现原理 改变颜色亮度的原理是通过调整颜色的 RGB 值中的亮度部分来实现的。在 Sass 中&#xff0c;可以使用颜色函数来操作颜色的 RGB 值&#xff0c;从而实现亮度的调整。 具体来说&#xff0c;亮度调整函数通常会改变颜…

PVE新增硬盘并扩容给 local分区

PVE安装在120G的固态硬盘,现在加了一块1T的机械硬盘作为虚拟机系统用,需要把磁盘扩容给 local分区 1、ssh连上pve,使用 lsblk 查看硬盘驱动器路径,我这里新加的硬盘是 sda,硬盘还未进行分区 2、fdisk /dev/sda,对硬盘进行分区操作,注意你自己的硬盘名称,千万小心不要搞…

Windows内核开发:如何使用STL

前言 大家都知道应用层c的STL非常强大&#xff0c;非常好用&#xff0c;但是在内核下就没法用了。针对这个问题&#xff0c;经过我不懈的寻找&#xff0c;终于找到了解决内核无法使用STL的方法。 使用new/delete关键字 先说一下常用关键字如何在内核中使用。其实只需要在一个全…

实验1-波士顿房价预测部分报错解决方法

运行sgd = SGDRegressor()sgd.fit(x_train, y_train)print("r2 score of Linear regression is",r2_score(y_test,sgd.predict(x_test)))时出现 DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y t…

用栈实现队列——leetcode刷题

题目要求我们只用栈的基本操作 push to top 入栈&#xff0c;peek from top 返回栈顶元素&#xff0c;pop from top 移除并返回栈顶元素&#xff0c;size 栈的大小&#xff0c;is_empty 判断栈是否为空&#xff0c;这几个函数来实现队列&#xff0c;也就是说&#xff0c;我们在…