SpringBoot(48)-使用 SkyWalking 进行分布式链路追踪

news2024/12/26 0:08:25

Spring Boot(48)- 使用 SkyWalking 进行分布式链路追踪

介绍

在分布式系统中,了解各个服务之间的调用关系和性能表现是非常重要的。SkyWalking 是一款开源的分布式系统监控与分析平台,能够帮助我们实现分布式系统的链路追踪、性能监控和故障排查。本教程将介绍如何使用 Apache SkyWalking 进行分布式链路追踪,帮助我们深入了解分布式系统的运行情况。

前置知识

  1. Java 编程基础
  2. SpringBoot 应用开发、微服务架构概念
  3. Skywalking 核心概念

准备工作

  1. 下载并安装 Apache SkyWalking 服务器。
  2. 配置 Alibaba SkyWalking 服务器。
  3. 创建一个基本的 Spring Boot 应用,用于进行链路追踪实验。

步骤一:安装和配置 SkyWalking 服务器

  1. 下载 SkyWalking 服务器安装包。
  2. 解压安装包到指定目录。
  3. 配置 SkyWalking 服务器的相关参数。
    本文是用 v9.0.0 版本为例
    进入 SkyWalking 官方网站下载页面,点击 tar 资源下载
    在这里插入图片描述
    目录结构如下:
    在这里插入图片描述
    进入 bin 执行,执行 bash startup.sh (如果是 Windows ,执行 startup.bat)

访问 localhost:8080 ,正常访问表示启动成功。
在这里插入图片描述
相比 6.X、7.X,新页面还是可以的。

步骤二:编写 Spring Boot 应用

  1. 添加 SkyWalking 依赖到 Spring Boot 项目中。
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-trace</artifactId>
    <version>9.0.0</version>
</dependency>

  1. 配置 Spring Boot 应用的 SkyWalking 连接信息。
    application.properties 文件配置如下:
spring.application.name=skywalking-quickstart
# 应用端口号
server.port=8081
# SkyWalking 配置
skywalking.collector.backend_service=127.0.0.1:11800
skywalking.trace.ignore_path=/css,/js,/images
  1. 下载 Skywalking Agent
    Skywalking 通过 Agent 的方式上报链路数据, 所以需要下载对应版本 Agent ,本文下载 V9.0.0[tar]。
    在这里插入图片描述
    解压后目录如下所示:
    在这里插入图片描述
    重点关注 skywalking-agent.jar 的全路径, 比如本文的地址是: /Users/murphy/Downloads/skywalking-agent/skywalking-agent.jar

  2. IDEA 配置 启动参数
    如何在IDEA 中配置 java agent 的启动参数呢?如下所示

打开 IntelliJ IDEA,并打开你的 Spring Boot 项目。
在菜单栏中选择 “Run” -> “Edit Configurations…”。
在弹出的窗口中,选择你的 Spring Boot 应用程序的运行/调试配置。
在右侧的 “Configuration” 选项卡中,找到 “VM options” 输入框。
在 “VM options” 输入框中输入以下内容

-javaagent:/Users/murphy/Downloads/skywalking-agent/skywalking-agent.jar

在这里插入图片描述

  1. 编写一个验证接口
import org.apache.skywalking.apm.toolkit.trace.ActiveSpan;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    @GetMapping("/hello")
    public String hello() {
        // 手动触发链路信息的上传
        ActiveSpan.tag("tag_key", "tag_value");
        return "Hello World!";
    }
}

  1. 启动 Spring Boot 应用,使其将调用链信息发送到 SkyWalking 服务器。
    访问接口 localhost:8081/hello 。

步骤三:查看分布式链路追踪结果

  1. 登录 SkyWalking 控制台,查看应用的调用链信息和性能指标。
    在这里插入图片描述

  2. 观察调用链路图,了解各个服务之间的调用关系和性能瓶颈。
    在这里插入图片描述

常见问题及解答

  1. 问题:SkyWalking 服务器启动失败。
    解答:检查 SkyWalking 服务器的配置和环境是否正确,确保端口未被占用,默认是 8080端口。

  2. 问题:应用的调用链信息未显示在 SkyWalking 控制台。
    解答:检查应用的 SkyWalking 配置是否正确,尤其是 Skywalking Agent 的版本和路径是否正确 , 确保连接信息和应用名称配置无误。

总结

通过本教程,我们学习了如何使用 Alibaba SkyWalking 进行分布式链路追踪。SkyWalking 提供了强大的分布式系统监控能力,能够帮助我们深入了解分布式系统的运行情况,及时发现和解决性能问题。

最后,贴上项目源码地址:d48-skywalking

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

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

相关文章

24/04/02总结

API: bigdecima: 方法名 说明 public static BigDecimal valueof( double val) 静态获取对象 public BigDecimal add(BigDecimal val) 加法 public BigDecimal subtract(BigDecimal val…

从C到C++过渡知识 下(深入理解引用与指针的关系)

引用 引用时C引入的一个新的概念&#xff0c;他和指针有着千丝万缕的关系。 首先我们要了解的是引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用的变量共用同一块内存空间。语法格式如下…

hibernate session接口

hibernate session接口 Session接口是hibernate向应用程序提供的操纵数据库的最主要的接口&#xff0c;提供了保存、更新、删除和加载Java对象的方法。 session具有一个缓存&#xff0c;位于缓存中的对象成为持久化对象&#xff0c;和数据库中的相关记录对应。session能够在某些…

智能视频翻译和配音处理工具:Pyvideotrans

pyVideoTrans&#xff1a;一键字幕识别翻译配音带新语言字幕和配音的视频 - 精选真开源&#xff0c;释放新价值。 概览 Pyvideotrans是一款卓著的智能化视频处理系统&#xff0c;专精于视频翻译与配音艺术&#xff0c;以其卓越的技术实力实现对原始视频中音频信息的精准捕捉、…

CCIE-03-Layer2-LAN-TS

目录 实验条件网络拓朴实验目标 开始排错问题1. SW2上的DHCP中继没有配置正确问题2. SW1/SW2的SVI接口被关闭问题3. 安全端口配置了不同的MAC地址 实验条件 网络拓朴 Output1 Output2 实验目标 排除故障使得PC101访问Server1时符合图片中给出的Output 开始排错 根据要求…

并发编程01-深入理解Java并发/线程等待/通知机制

为什么我们要学习并发编程&#xff1f; 最直白的原因&#xff0c;因为面试需要&#xff0c;我们来看看美团和阿里对 Java 岗位的 JD&#xff1a; 从上面两大互联网公司的招聘需求可以看到&#xff0c; 大厂的 Java 岗的并发编程能力属于标配。 而在非大厂的公司&#xff0c; 并…

基于栈结构的非递归二叉树结点关键字输出算法

基于栈结构的非递归二叉树结点关键字输出算法 一、引言二、二叉树基本概念三、非递归遍历算法基础四、算法设计五、算法实现六、C代码示例七、算法分析八、优化与讨论 一、引言 在计算机科学中&#xff0c;二叉树是一种重要的数据结构&#xff0c;它广泛应用于各种算法和数据结…

笔记: javaSE day17天笔记

第十七天课堂笔记 Java常用类 数学类★★★ math java.lang.Math , 数学类 round(x) : 四舍五入 , 把 x加0.5 后向下取整 ceil(x) : 返回大于等于x的最小整数 , 向上取整 floor(x) : 返回小于等于x的最大整数 , 向下取整 sqrt(x) : 平方根 cbrt(x): 立方根 pow(a , b)…

App应用的服务器如何增加高并发能力

大家好&#xff01;我是你们的好朋友咕噜铁蛋&#xff01;近年来&#xff0c;随着移动互联网的蓬勃发展&#xff0c;各类App应用如雨后春笋般涌现&#xff0c;用户量呈现爆发式增长。然而&#xff0c;随之而来的高并发访问问题也开始频繁出现&#xff0c;给服务器带来了极大的挑…

ecology9.0通过自定义按钮给明细表某字段赋值

功能&#xff1a;把主表字段赋值给明细表字段 核心代码&#xff1a; <script>jQuery(document).ready(function(){$(#setcgy).click(function(){var cgy_txt WfForm.getBrowserShowName("field1207");debuggervar cgy WfForm.getFieldValue("field1207…

java(5)之数组

1、什么是数组 数组就是用来储存相同数据类型的数据集合&#xff0c;可使用共同的名称来引用数组中的数据&#xff0c;数组的类型有很多种&#xff0c;但是指定了数组的类型就只能存储这一类数据。 2、数组的特点 1、既能存储原始数据也能催出对象类型 2、长度一旦确定就不…

MySQL进阶-----SQL提示与覆盖索引

目录 前言 一、SQL提示 1.数据准备 2. SQL的自我选择 3.SQL提示 二、覆盖索引 前言 MySQL进阶篇的索引部分基本上要结束了&#xff0c;这里就剩下SQL提示、覆盖索引、前缀索引以及单例联合索引的内容。那本期的话我们就先讲解SQL提示和覆盖索引先&#xff0c;剩下的内容就…

ssm 设备采购管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 ssm 设备采购管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模…

使用 Docker Compose 部署邮件服务器

使用 Docker Compose 部署邮件服务器 很多时候为了方便&#xff0c; 我们都直接使用第三方邮箱进行收发邮件。 但第三方邮箱有些要求定期修改密码&#xff0c;有些限制发邮箱的次数&#xff0c; 对于一些个人和企业来说&#xff0c; 有自己的域名和服务器为什么不自己搭建一个邮…

PEFT-LISA

LISA是LoRA的简化版&#xff0c;但其抓住了LoRA微调的核心&#xff0c;即LoRA侧重更新LLM的底层embedding和顶层head。 根据上述现象&#xff0c;LISA提出两点改进&#xff1a; 始终更新LLM的底层embedding和顶层head随机更新中间层的hidden state 实验结果 显存占用 毕竟模型…

ZKP价值链路的垂直整合

1. ZKP proof生命周期 从ZKP&#xff08;zero-knowledge proof&#xff09;生命周期&#xff0c;先看围绕ZKP的价值链路形成&#xff1a; 1&#xff09;User intent用户意图&#xff1a;以某用户意图为起点&#xff0c;如想要在某zk-rollup上swap某token、证明其身份、执行某…

HarmonyOS 和 OpenHarmony

HarmonyOS 和 OpenHarmony 支持的 shell 命令不同&#xff0c;因此有时候需要做一做区分&#xff0c;目前有些文档上没有标注&#xff0c;因此可能产生歧义。 HarmonyOS 支持 getprop&#xff1a; getprop hw_sc.build.os.apiversion # 查看API版本OpenHarmony 上支持 param…

华为ensp中ospf多区域管理 原理及配置命令(详解)

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; ————前言———— OSPF 多区域的主要作用是缩小链路状态数据库和路由表的规模&#xff0c;减少路由更新的频率&#xff0c;提高网络的可扩展性&#xff0c;实现路由过滤和路由汇总&#xff0…

Java多线程实战-从零手搓一个简易线程池(三)线程工厂,核心线程与非核心线程逻辑实现

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️本系列源码仓库&#xff1a;多线程并发编程学习的多个代码片段(github) &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正…

使用ARCore深度API实现点云采集

一、深度API 本小节内容摘自ARCore官方文档。 ARCore 深度API Depth API 可助力实现对象遮挡、提升沉浸感和新颖的互动体验&#xff0c;从而增强 AR 体验的真实感。 在下图中&#xff0c;右侧画面是采用深度API进行遮挡后的效果&#xff0c;与左侧图相比更加真实。 深度值 给…