【SkyWalking】服务端部署与微服务无侵入接入实战指南

【SkyWalking】服务端部署与微服务无侵入接入实战指南


💡 SkyWalking 系列总引导

在微服务架构快速演进的今天,如何有效实现服务链路追踪、性能分析、日志采集与自动化告警,成为系统稳定性的关键保障手段。

SkyWalking,作为 Apache 顶级开源项目,提供了完整的微服务可观测性解决方案,覆盖链路追踪、服务监控、日志聚合、告警通知与性能剖析等能力。

本系列将结合实战,从 0 开始搭建 SkyWalking 平台,并实现如下目标:

  • ✅ 搭建 SkyWalking 服务端并配置 MySQL 存储;
  • ✅ 微服务客户端无侵入接入 SkyWalking;
  • ✅ 实现链路级日志采集与定位分析;
  • ✅ 配置告警规则与 Webhook 通知(如钉钉);
  • ✅ 使用性能剖析定位慢请求/阻塞代码。

📘 SkyWalking 系列导航

篇章标题链接
系列一【SkyWalking】服务端部署与微服务无侵入接入实战指南🔗点击阅读
系列二【SkyWalking】日志如何接入,实现链路日志关联分析🔗点击阅读
系列三【SkyWalking】配置告警规则并通过 Webhook 推送钉钉通知🔗 点击阅读
系列四【SkyWalking】性能剖析实战:定位慢接口与阻塞代码🔗 点击阅读

🧭 本文为 【SkyWalking 系列】第 1 篇
👉 系列导航:点击跳转

一、SkyWalking 是什么

在分布式系统中,链路追踪作为服务治理的重要一环,能够帮助我们快速定位问题、分析调用链路。在传统方案中,Spring Cloud Sleuth + ZipKin 是一种广泛应用的组合,但随着技术的发展,SkyWalking 作为一款新兴的国产开源项目,也逐渐成为微服务监控领域的有力竞争者。

SkyWalking 最初由华为工程师吴晟于 2015 年发起,并在 2017 年进入 Apache 孵化器,短短两年后就成为 Apache 顶级项目,可见其技术能力和社区认可度。

该项目支持 Dubbo、Spring Cloud、Spring Boot 等主流框架,具备如下特点:

  • 无代码侵入:通过 Java Agent 进行字节码增强,无需修改业务代码;
  • 高性能传输:通信方式采用 gRPC,低延迟高吞吐;
  • 功能完备:支持链路追踪、服务拓扑、JVM 监控、告警机制、性能分析等;
  • 可视化优秀:内置美观直观的 UI 界面,便于快速定位问题。

二、SkyWalking 与 Sleuth + ZipKin 如何选择?

在实际项目中,我们常常需要在 SkyWalking 和 Sleuth + ZipKin 之间做出权衡。以下是两者在多个维度的对比:

对比项SkyWalkingSleuth + ZipKin
接入方式字节码增强,无侵入需要在代码中嵌入逻辑
可观测范围支持链路追踪、性能监控、JVM 指标、告警等主要聚焦在链路追踪
UI 界面图形化拓扑,界面友好,支持多维度展示相对简洁,功能单一
数据传输协议gRPC,性能更优HTTP,性能一般
使用推荐推荐用于新项目,功能更全面适用于已有 Sleuth 基础项目

📌 选型建议
如果是新架构系统,建议优先使用 SkyWalking。它的功能更丰富,部署灵活,特别适用于中大型微服务系统。

三、SkyWalking 架构解析

SkyWalking 的整体架构分为三个核心部分:探针(Agent)端、后端服务(OAP Server)和可视化界面(UI)。每个部分在整个链路追踪与监控体系中扮演着关键角色。

1. Agent(探针)

  • 部署位置:嵌入在每一个应用服务实例中,主要支持 Java(字节码增强方式),也支持其他语言如 Node.js、PHP、Python(通过 SDK 或 Sidecar)。
  • 作用
    • 自动拦截请求入口(如 Controller、Dubbo Provider 等);
    • 采集调用链信息(Trace)、服务性能指标(Metrics)、日志数据;
    • 将采集到的数据通过 gRPC 推送给 OAP Server。
  • 优势:实现无侵入式监控,对业务代码零改动即可接入。

2. OAP Server(后端核心)

  • 全称:Observability Analysis Platform Server
  • 部署方式:可单机、可集群,支持高可用和水平扩展
  • 主要模块
    • 接收模块(Receiver):接收来自 Agent 的追踪数据、指标数据等;
    • 分析模块(Analyzer):处理调用链合并、性能指标聚合、服务间拓扑构建;
    • 存储模块(Storage):支持多种后端存储,如 ElasticSearch、MySQL、H2,保存链路、指标、日志、告警信息;
    • 告警模块(Alarm):基于规则配置的指标告警机制,支持邮件、WebHook 等通知方式;
    • 遥测支持(Telemetry):可将自身运行状态输出到 Prometheus 等系统中。

3. UI 前端(Web App)

  • 展示内容
    • 服务拓扑图:显示服务之间的调用关系;
    • Trace 追踪:查看具体的调用链明细、响应时间、异常节点等;
    • 指标面板:展示服务 RT、QPS、错误率等时间序列图;
    • 告警面板:查看触发的告警记录及趋势;
    • JVM 监控:内存、GC、线程等运行时指标。
  • 特点:界面清晰直观,支持搜索、过滤、历史回溯等操作。

架构图

在这里插入图片描述

说明:

看了架构图之后,思路很清晰了:Agent 负责收集日志和传输数据,通过 gRPC 的方式传递给 OAP 进行分析,并将结果存储到数据库中,最终通过 UI 界面将分析后的统计报表、服务依赖关系和拓扑结构展示出来

四、Skywalking服务搭建

1、下载安装包

下载地址: https://archive.apache.org/dist/skywalking/

如果下载缓慢/无法下载,可关注公众号[学鹏科技服务],回复skywalking即可获取下载链接
在这里插入图片描述

我当前使用的是8.9版本,选择V8.9.0这个版本,进入如下图界面,选择编译好的tar.gz包进行下载:
在这里插入图片描述

2、目录结构

解压之后完整目录如下图:

在这里插入图片描述

重要目录说明

  • bin:服务端启动脚本目录,包含启动 OAP Server、UI 等的相关脚本。
  • config:主要配置文件目录,存放 OAP Server 和相关组件的配置。
  • config-examples:配置示例目录,提供默认和示范配置文件,方便用户参考。
  • logs:OAP 服务的日志目录,用于存储运行时的日志文件。
  • oap-libs:OAP Server 所需依赖的库文件目录。
  • webapp:UI 服务目录,存放 SkyWalking Web 前端相关文件。
  • tools:辅助工具目录,包含运维和管理脚本等。
  • licensesLICENSENOTICE:版权和开源许可相关文件。

说明:

SkyWalking 8.8 版本 开始,官方发布的压缩包中不再默认包含 agent 目录。也就是说,agent(Java Agent 探针)需要 单独下载和集成,不再随主发行包一并提供。

变更背景
  • 之前版本(如 8.7 及更早版本)压缩包中会直接包含完整的 agent 目录,方便用户直接解压即用。
  • 8.8 及之后版本,为了更灵活地发布和维护探针,拆分了 Agent 组件,使得用户需要单独获取对应的 Agent 包。
影响
  • 使用 8.8 及以上版本时,需要前往官方仓库或镜像库单独下载 Agent;
  • 便于用户根据实际需求选择合适版本的 Agent,降低包体积和依赖。
获取方式
  • 访问官方归档地址下载对应版本的 Agent:
    https://archive.apache.org/dist/skywalking/java-agent/

只需下载与 SkyWalking 版本对应的 Agent 即可完成集成。

3、配置修改

启动之前需要对配置文件做一些修改,修改如下:

1、修改OAP UI服务启动端口(可选,默认为8080)

编辑webapp/webapp.yml (10.x以下版本都是这个名称,10.x版本及以上名称为application.yml)

我这里改成了18080因为我的服务器8080被占用了

在这里插入图片描述

2、数据持久化(可选)

默认情况下,SkyWalking 使用内嵌的 H2 数据库作为存储后端,但在生产环境中通常不推荐使用 H2。建议根据实际需求切换为 MySQL、ElasticSearch 等更稳定的外部存储。

以下是将存储方式修改为 MySQL 的配置示例:

1、前置要求:

OAP Server默认是没有mysql-jdbc连接驱动的,所以配置mysql存储方式之前必须要将连接驱动复制到OAP Server服务的目录,命令如下:

cp /path/to/mysql-connector-java-8.0.16.jar oap-libs/

2、主要修改两处:

① 设置存储类型为 MySQL

storage:selector: ${SW_STORAGE:mysql} #这里默认是 'h2'

② 配置 MySQL 连接信息

  mysql:properties:jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://ip:3306/skywalking?rewriteBatchedStatements=true"}dataSource.user: ${SW_DATA_SOURCE_USER:root}dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root}

💡 配置说明:

  • 上述参数可写死,也可以通过环境变量传入(推荐方式);
  • 请确保数据库已创建并允许 OAP Server 连接;
  • SkyWalking 会在首次启动时自动建表,无需手动初始化 SQL。

五、启动服务

SkyWalking 的启动脚本位于项目根目录下的 /bin 目录中。启动服务有两种方式:

方式一:分别启动 OAP Server 与 Web UI(推荐用于生产)

启动 OAP Server(后端分析服务)
./bin/oapService.sh
启动 Web UI(前端界面)
./bin/webappService.sh

该方式更灵活,适合生产部署场景,可单独管理后端和前端服务。

方式二:使用 startup.sh 一键启动(适合本地调试)

./bin/startup.sh

此脚本会同时启动 OAP Server 和 Web UI,方便开发者本地一键启动所有核心组件。

📌 提示:

  • 启动顺序建议先 OAP,后 UI;startup.sh 会自动处理;
  • 启动后,Web UI 默认地址为:http://[IP]:[端口];
  • 可使用 tail -f logs/skywalking-oap-server.log 查看启动日志。

六、微服务客户端接入 SkyWalking

完成 SkyWalking 服务端部署后,下一步是将你的微服务作为客户端接入 SkyWalking,实现全链路追踪。

1、客户端接入原理

SkyWalking 通过 Java Agent 字节码增强技术 实现无侵入式接入,无需改动业务代码,也无需引入依赖包。只需在启动服务时挂载 Agent 探针,即可自动采集调用链数据并上报至 OAP。

2、示例微服务列表

假设我们有如下三个微服务:

服务名称描述
skywalking-product商品微服务
skywalking-order订单微服务
skywalking-gateway网关微服务

每个服务均独立部署,通过挂载 Agent 实现链路追踪。

3、Agent 下载与准备

  • SkyWalking 8.8 及以上版本,Agent 需单独下载,地址:
    https://archive.apache.org/dist/skywalking/java-agent/

  • 解压后目录示例:

4、配置 agent.config

编辑 config/agent.config

collector.backend_service=127.0.0.1:11800 #改成你对应oap服务的ip和端口

5、启动微服务挂载 Agent

启动命令示例:

java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar \-Dskywalking.agent.service_name=skywalking-product \-Dskywalking.collector.backend_service=127.0.0.1:11800 \-jar product-service.jar

其他服务类似,确保服务名唯一。

上述命令解析如下:

  • -javaagent:指定skywalking中的agent中的skywalking-agent.jar的路径
  • -Dskywalking.agent.service_name:指定在skywalking中的服务名称,一般是微服务的`spring.application.name``
  • ``-Dskywalking.collector.backend_service:指定oap服务绑定的地址,由于陈某这里是本地,并且oap服务默认的端口是11800,因此只需要配置为127.0.0.1:11800`

6、验证

  • 访问服务,触发调用链
  • 登录 SkyWalking UI,查看拓扑图和调用链数据

总结

本文介绍了 SkyWalking 服务端部署与微服务客户端无侵入式接入方法。通过 Java Agent 探针技术,快速为微服务集群实现全链路追踪,提升系统的可观测性与诊断效率。


🧩 本文为【SkyWalking系列】第 1 篇
📌 喜欢记得点赞、收藏,或关注我持续更新更多微服务实战内容!
📮 有问题欢迎评论区讨论,看到必回 🙌
👉 下一篇预告:系列2:【SkyWalking】日志如何接入,实现链路日志关联分析(欢迎提前收藏)


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

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

相关文章

LVDS系列20:Xilinx 7系ISERDESE2原语(一)

Xilinx 7系FPGA bank的io单元如下:Hr bank比hp bank少odelaye2组件,两者的idelaye2组件后面,都有iserdese2组件; iserdese2组件是一种专用的串并转换器或称解串器,用于高速源同步应用,如大部分LVDS信号解析…

【U-Boot】Shell指令

目录 U-Boot 三个Shell U-Boot Shell Linux Shell shell脚本 总结 U-Boot Shell命令 帮助命令 部分命令分类与功能说明 一、基础操作与信息查询 二、内存操作 三、启动管理 四、文件系统操作 五、设备与分区管理 六、环境变量 七、诊断与调试 八、特殊功能 九…

《Revisiting Generative Replay for Class Incremental Object Detection》阅读笔记

摘要Abstract部分 原文 Generative replay has gained significant attention in class-incremental learning; however, its application to Class Incremental Object Detection (CIOD) remains limited due to the challenges in generating complex images with precise …

Mysql: Bin log原理以及三种格式

目录 一、什么是 Binlog? 二、Binlog 的应用场景与案例 1. 数据恢复 (Point-in-Time Recovery) 2. 主从复制 (Master-Slave Replication) 3. 数据审计 三、Binlog 的三种格式 1. STATEMENT 模式 (Statement-Based Logging - SBL) 2. ROW 模式 (Row-Based Log…

LiteHub之文件下载与视频播放

文件下载 前端请求 箭头函数 //这个箭头函数可以形象理解为,x流入(>)x*x, //自然而然>前面的就是传入参数,>表示函数体 x > x * x//相当于 function (x) {return x * x; }//如果参数不是一个,就需要用括号()括起来…

QT5使用cmakelists引入Qt5Xlsx库并使用

1、首先需要已经有了Qt5Xlsx的头文件和库,并拷贝到程序exe路径下(以xxx.exe/3rdparty/qtxlsx路径为例,Qt5Xlsx版本为0.3.0); 2、cmakelist中: # 设置 QtXlsx 路径 set(QTXLSX_ROOT_DIR ${CMAKE_CURRENT_SOU…

醋酸镨:闪亮的稀土宝藏,掀开科技应用新篇章

一、什么是醋酸镨醋酸镨是一种镨的有机盐,镨是稀土金属元素之一。作为一种重要的稀土化合物,醋酸镨通常以水合物的形式存在,呈现淡黄色或无色结晶。镨元素本身因其独特的物理化学特性,在工业和科技领域有着广泛应用,而…

深入解析JVM内存结构与垃圾回收机制

java是强类型高级语言JVM(Java Virtual Machine,Java虚拟机)是Java平台的核心组件,它是一个虚拟的计算机,能够执行Java字节码(bytecode)。1、区域划分JVM对Java内存的管理也是分区分块进行&…

Java 流程控制详解:从顺序执行到跳转语句,掌握程序逻辑设计

作为一名Java开发工程师,你一定知道,流程控制(Flow Control) 是编写任何程序的核心。它决定了代码的执行路径、分支走向和循环次数。本文将带你系统梳理 Java中的所有常用流程控制结构,包括:顺序结构分支结…

面试150 环形链表

思路 采用双指针法,slow指针每次走一步,fast指针每次走两步,如果相遇的情况下,slow指针回到开始的位置,此时快慢指针各走一步,当相遇的时候也就是说明链表中有环。 # Definition for singly-linked list. # class ListNode: # def __init…

AI技术正在深度重构全球产业格局,其影响已超越工具属性,演变为推动行业变革的核心引擎。

一、AI如何重塑AI的工作与行业(AI助手领域)能力升级理解与生成:基于LLM(大语言模型),AI能处理开放式问题、撰写报告、翻译代码,替代部分人类知识工作。个性化交互:通过用户历史对话分…

Kafka的无消息丢失配置怎么实现

那 Kafka 到底在什么情况下才能保证消息不丢失呢? Kafka 只对“已提交”的消息(committed message)做有限度的持久化保证。 第一个核心要素是“已提交的消息”。什么是已提交的消息?当 Kafka 的若干个 Broker 成 功地接收到一条…

集成CommitLInt+ESLint+Prettier+StyleLint+LintStaged

代码可读性低代码 代码规范落地难代码格式难统一代码质量低下 配置 ESLint ESLint 是一个用来识别 ECMAScript 并且按照规则给出报告的代码检测工具,使用它可以避免低级错误和统一代码的风格。它拥有以下功能: 查出 JavaScript 代码语法问题。根据配置…

寻找两个正序数组的中位数(C++)

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (mn)) 。示例 1:输入:nums1 [1,3], nums2 [2] 输出:2.00000 解释&#x…

Expected Sarsa 算法的数学原理

🌟 一、Expected Sarsa 算法的数学原理 1. 什么是 Expected Sarsa? Expected Sarsa 是一种基于 时序差分(Temporal Difference, TD)学习 的强化学习算法,用于估计 动作值函数 ( q_{\pi}(s, a) )。它是 Sarsa 算法的一种…

Vue的watch和React的useEffect

参考文章:https://zhuanlan.zhihu.com/p/686329898

idea中合并git分支

1.把本地dev代码合并到本地master代码在提交代码之前,先确保dev和master都拉取了最新的代码都进行了Git->pull了这时候确保Local的第一个分支是master分支,然后选择dev分支 ,鼠标右键-》Merge dev into master这时候会提示 有合并到本地master最新的代…

《Spring 中上下文传递的那些事儿》Part 7:异步任务上下文丢失问题详解

📝 Part 7:异步任务上下文丢失问题详解 在现代 Java 应用中,异步编程已经成为提升性能、解耦业务逻辑的重要手段。无论是使用 CompletableFuture、线程池(ExecutorService)、定时任务(ScheduledExecutorSe…

大语言模型驱动智能语音应答:技术演进与架构革新

在智能客服、电话银行等场景中,用户时常遇到这样的困境:“请描述您的问题...抱歉没听清,请重试...正在为您转接人工”。传统语音应答(IVR)系统受限于规则引擎与浅层语义理解,难以应对复杂多变的自然语言表达…

【Linux】内存管理

要求:1、编写程序,实现如下功能。(1)随机生成 1000000 个 0~1 之间的数;(2)统计分析这些数据,计算均值、方差和分布情况,分布情况按0.01 的步长进行统计;&…