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

2024-05-02 06:36

本文主要是介绍分布式链路追踪工具Sky walking详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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环境搭建完成

这篇关于分布式链路追踪工具Sky walking详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/953598

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满