【第33章】Spring Cloud之SkyWalking服务链路追踪
文章目录
- 前言
- 一、介绍
- 1. 架构图
- 2. SkyWalking APM
- 二、服务端和控制台
- 1. 下载
- 2. 解压
- 3. 初始化数据库
- 4. 增加驱动
- 5. 修改后端配置
- 6. 启动
- 7. 访问控制台
- 8. 数据库表
- 三、客户端
- 1. 下载
- 2. 设置java代理
- 3. idea配置
- 3.1 环境变量
- 3.2 JVM参数
- 3.3 启动日志
- 4. 启用网关插件
- 四、链路跟踪
- 1. 服务列表
- 2. 服务仪表盘
- 3. 链路追踪(网关)
- 4. 链路追踪(消费者)
- 总结
前言
SkyWalking是一个开源的观测平台,专为微服务、云原生架构和基于容器(如Docker、Kubernetes等)的应用程序设计,提供分布式追踪、服务网格遥测分析、度量聚合和可视化的一体化解决方案。
由国内开源爱好者吴晟开源并提交到Apache孵化器的项目,2019年4月从Apache基金会的孵化器毕业成为顶级项目。
SkyWalking目前已经来到10的大版本,但是由于升级太快导致没有对应的中文文档,所以我们只做初步的使用,让SkyWalking为我们的项目展示图形化的服务链路拓扑图。
一、介绍
1. 架构图


- UI :前端,控制台界面,仪表盘展示数据
- Backend:后端,接收及转存信息
- Storage:存储端,存储数据
- Agent:客户端,收集应用程序指标信息,并推送到客户端
2. SkyWalking APM

二、服务端和控制台
1. 下载
这里我们通过官方网站

2. 解压
Requirement: Java 11/17/21.大家注意,这里最低要求Java 11
tar -zxvf apache-skywalking-apm-10.0.0.tar.gz
mv apache-skywalking-apm-bin skywalking
3. 初始化数据库
我本地已经有mysql数据库,这里新建一个库作为skywalking的存储库
create database skywalking;
CREATE USER 'skywalking'@'%' IDENTIFIED BY 'skywalking';
GRANT ALL PRIVILEGES ON skywalking.* TO 'skywalking'@'%';
FLUSH PRIVILEGES;
use skywalking;
4. 增加驱动
我们需要将
mysql-connector-java或者mysql-connector-j驱动包添加到oap-libs目录下
5. 修改后端配置
默认的数据库是h2,这里我们通过定义环境变量修改配置为mysql配置
vi ~/.bash_profile
# skywalking
export SW_STORAGE=mysql
export SW_JDBC_URL="jdbc:mysql://localhost:3306/skywalking?rewriteBatchedStatements=true&allowMultiQueries=true"
export SW_DATA_SOURCE_USER=skywalking
export SW_DATA_SOURCE_PASSWORD=skywalking
source ~/.bash_profile
6. 启动
sh startup.sh
startup.sh包含了oapService.sh和webappService.sh
- serverPort: ${SW_SERVER_PORT:-8080}
- oapServices: ${SW_OAP_ADDRESS:-http://localhost:12800}
后端服务 0.0.0.0/11800 监听 gRPC APIs , 0.0.0.0/12800 监听 HTTP REST APIs.
7. 访问控制台
127.0.0.1:8080

8. 数据库表
初始化完成后的数量为125张表

三、客户端
1. 下载


2. 设置java代理
- Agent 在 JDK 8 - 21可用.
- 下载agent并解压到本地.
- 找到
config/agent.config配置文件,设置agent.service_name. 可以是任意英文字符串. - 找到
config/agent.config配置文件,设置collector.backend_service. 默认值为127.0.0.1:11800,仅适用于本地后端。 - 添加
-javaagent:/path/to/skywalking-package/agent/skywalking-agent.jarJVM参数.请确保在-jar参数之前添加它。
3. idea配置
3.1 环境变量
SW_AGENT_NAME=gateway-service;SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.137.192:11800

3.2 JVM参数
-javaagent:F:\workspace\skywalking-agent\skywalking-agent.jar

3.3 启动日志

4. 启用网关插件
将
optional-plugins/apm-spring-cloud-gateway-4.x-plugin-9.3.0.jar移动到/plugins
四、链路跟踪
1. 服务列表

2. 服务仪表盘

3. 链路追踪(网关)


网关层串联不到下一个链路,我们直接用消费者试试
4. 链路追踪(消费者)




同一个请求链路经过的上下游应用都需要以agent形式启动,才能形成完整的链路关系。
总结
回到顶部
官方网站
官方文档
视频学习
稀土掘金
演示地址(skywalking/skywalking)
SkyWalking功能很强大,感兴趣的同学可以进一步发掘,社区最新推出了BanyanDB,相信这款数据库工具和SkyWalking结合起来能够事半功倍,给我们带来更多的震撼和期待。
相关文章:
【第33章】Spring Cloud之SkyWalking服务链路追踪
文章目录 前言一、介绍1. 架构图2. SkyWalking APM 二、服务端和控制台1. 下载2. 解压3. 初始化数据库4. 增加驱动5. 修改后端配置6. 启动7. 访问控制台8. 数据库表 三、客户端1. 下载2. 设置java代理3. idea配置3.1 环境变量3.2 JVM参数3.3 启动日志 4. 启用网关插件 四、链路…...
如何选择OS--Linux不同Distribution的选用
写在前言: 刚写了Windows PC的不同editions的选用,趁热,把Linux不同的Distribution选用也介绍下,希望童鞋们可以了解-->理解-->深入了解-->深入理解--...以致于能掌握特定版本的Linux的使用甚者精通。……^.^…… so&a…...
cesium效果不酷炫怎么办--增加渲染器
DrawCommand 可以发挥 WebGL 全部潜力吗? 回答: Cesium 的 DrawCommand 是一个用于表示 WebGL 渲染管线中单个绘制调用的低级抽象。它封装了执行 WebGL 绘制所需的所有信息,包括着色器程序、顶点数组、渲染状态、统一变量(unifo…...
计算机网络:概述 --- 体系结构
目录 一. 体系结构总览 1.1 OSI七层协议体系结构 1.2 TCP/IP四层(或五层)模型结构 二. 数据传输过程 2.1 同网段传输 2.2 跨网段传输 三. 体系结构相关概念 3.1 实体 3.2 协议 3.3 服务 这里我们专门来讲一下计算机网络中的体系结构。其实我们之前…...
DEPLOT: One-shot visual language reasoning by plot-to-table translation论文阅读
文章链接:https://arxiv.org/abs/2308.01979http://arxiv.org/abs/2212.10505https://arxiv.org/abs/2308.01979 源码链接:https://github.com/cse-ai-lab/RealCQA 启发:two-stage方法可能是未来主要研究方向,能够增强模型可解释…...
从 HDFS 迁移到 MinIO 企业对象存储
云原生、面向 Kubernetes 、基于微服务的架构推动了对 MinIO 等网络存储的需求。在云原生环境中,对象存储的优势很多 - 它允许独立于存储硬件对计算硬件进行弹性扩展。它使应用程序无状态,因为状态是通过网络存储的,并且通过降低操作复杂性&a…...
Rust 常见问题汇总
问题1: cargo build 一直提示Blocking waiting for file lock on package cache。 在 cargo.toml 文件中添加了依赖之后,运行 cargo build 命令时,如果卡在 blocking waiting for file lock on package cache lock 这里, 后来发…...
java泛型类与泛型方法
Java泛型类和泛型方法是Java泛型编程中的重要组成部分。它们允许开发者编写类型安全且高度复用的代码。下面详细介绍泛型类和泛型方法的概念、用法和示例。 泛型类 泛型类是在类定义中使用类型参数的类,可以指定具体的类型实例化该类。这样可以确保类型安全&#…...
Android String资源文件中,空格、换行以及特殊字符如何表示
空格: 例:<string name"test">test test</string> 换行:\n 例:<string name"test">test \n test</string> tab:\t …...
CUDA及GPU学习资源汇总
CUDA C Programming Guide 的中文翻译版GPU中的SM和warp的关系推荐几个不错的CUDA入门教程CUDA编程入门极简教程...
uniapp vue3 梯形选项卡组件
实现的效果图: 切换选项卡显示不同的内容,把这个选项卡做成了一个组件,需要的自取。 // 组件名为 trapezoidalTab <template> <view class"pd24"><view class"nav"><!-- 左侧 --><view cla…...
如何在微信小程序中实现WebSocket连接
微信小程序作为一种全新的应用形态,凭借其便捷性、易用性受到了广大用户的喜爱。在实际开发过程中,实时通信功能是很多小程序必备的需求。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,能够实现客户端与服务器之间的实时通信。本文…...
二级等保测评中安全物理环境的重要性及高危项分析
当今数字化时代,信息安全至关重要。网络安全等级保护测评是确保信息系统安全稳定运行的重要手段之一,其中二级等保测评对于许多企业和组织来说是必须要达到的安全标准。 而安全物理环境作为等保测评的重要组成部分,其重要性不容忽视。 安全物…...
C++11——lambda
lambda lambda的介绍lambda的使用lambda的细节->捕捉列表 lambda的介绍 lambda是匿名函数,再适合的场景去使用可以提高代码的可读性。 场景: 假设有一个Goods类需要进行按照价格、数量排序 class Goods {string name;size_t _price;//价格int num;/…...
Dubbo3序列化安全问题
序列化安全 在 Dubbo 3.0 中,序列化协议的安全性得到了加强。 1. 序列化安全性升级 Triple 协议: 推荐使用 Triple 协议 的非 Wrapper 模式,该模式在安全性上更为严格。需要开发人员编写 IDL(接口描述语言)文件,这虽…...
秒懂Linux之共享内存
目录 共享内存概念 模拟实现共享内存 创建key阶段 编辑创建共享内存阶段 删除共享内存阶段 查看共享内存属性阶段 挂接共享内存到进程阶段 取消共享内存与进程挂接阶段 进程通信阶段 添加管道改进版 共享内存函数 shmget函数 shmat函数 shmdt函数 shmctl函数 共享内存概念 共…...
【计算机网络】网络层协议解析
网络层的两种服务IPv4分类编址划分子网无分类地址 IPv4地址应用IP数据报的发送和转发过程主机发送IP数据报路由器转发IP数据报 IPv4数据报首部格式ICMP网际控制报文协议虚拟专用网VPN与网络地址转换NAT 网络层主要任务是实现网络互连,进而实现数据包在各网络之间的传…...
sqlist void reverse(SqList A)
#include <stdlib.h> #include <stdio.h> #include <iostream> using namespace std; #define INIT_SIZE 5 #define INCREMENT 10 # define OK 1 # define ERROR 0/* 定义ElemType为int类型 */ typedef int ElemType; void input(ElemType &s); void out…...
聊聊Thread Local Storage
聊聊ThreadLocal 为什么需要Thread Local StorageThread Local Storage的实现PThread库实现操作系统实现GCC __thread关键字实现C11 thread_local实现JAVA ThreadLocal实现 Thread Local Storage 线程局部存储,简称TLS。 为什么需要Thread Local Storage 变量分为全…...
WEB攻防-JS项目Node.js框架安全识别审计验证绕过
知识点: 1、原生JS&开发框架-安全条件 2、常见安全问题-前端验证&未授权 详细点: 1、什么是JS渗透测试? 在JavaScript中也存在变量和函数,当存在可控变量及函数调用即可参数漏洞 2、流行的Js框架有哪些? …...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
