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

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


💡 SkyWalking 系列总引导

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

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

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

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

📘 SkyWalking 系列导航

篇章 标题 链接
系列一 【SkyWalking】服务端部署与微服务无侵入接入实战指南 [🔗点击阅读](#篇章 标题 链接 系列一 【SkyWalking】服务端部署与微服务无侵入接入实战指南 🔗点击阅读 系列二 【SkyWalking】日志如何接入,实现链路日志关联分析 🔗点击阅读 系列三 【SkyWalking】配置告警规则并通过 Webhook 推送钉钉通知 🔗 点击阅读 系列四 【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 之间做出权衡。以下是两者在多个维度的对比:

对比项 SkyWalking Sleuth + 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,降低包体积和依赖。
获取方式

只需下载与 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服务的目录,命令如下:

sh 复制代码
cp /path/to/mysql-connector-java-8.0.16.jar oap-libs/

2、主要修改两处:

① 设置存储类型为 MySQL

yaml 复制代码
storage:
  selector: ${SW_STORAGE:mysql} #这里默认是 'h2'

② 配置 MySQL 连接信息

yaml 复制代码
  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(后端分析服务)
sh 复制代码
./bin/oapService.sh
启动 Web UI(前端界面)
sh 复制代码
./bin/webappService.sh

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

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

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 下载与准备

4、配置 agent.config

编辑 config/agent.config

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

5、启动微服务挂载 Agent

启动命令示例:

sh 复制代码
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】日志如何接入,实现链路日志关联分析(欢迎提前收藏)


相关推荐
NE_STOP6 小时前
Vide Coding--AI编程工具的选择
java
码云数智-园园6 小时前
C++20 Modules 模块详解
java·开发语言·spring
程序员黑豆6 小时前
JDK 下载安装与配置详细教程
java·前端·ai编程
霸道流氓气质6 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
东方佑6 小时前
FRSM 规模效应与架构对比补充报告
架构
小宇宙Zz7 小时前
Maven依赖冲突
java·服务器·maven
swordbob7 小时前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
咖啡八杯7 小时前
GoF设计模式——享元模式
java·spring·设计模式·享元模式
十五喵源码网7 小时前
基于springboot2+vue2的租房管理系统
java·毕业设计·springboot·论文笔记
摇滚侠7 小时前
IDEA 创建 Java 项目 手动整合 SSM 框架
java·ide·intellij-idea