当前位置: 首页 > news >正文

【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.dtcms.com/a/271971.html

相关文章:

  • 【spring boot】三种日志系统对比:ELK、Loki+Grafana、Docker API
  • 【世纪龙科技】汽车信息化综合实训考核平台(机电方向)-学测
  • 零基础入门物联网-远程门禁开关:云平台创建
  • selenium中xpath的用法大全
  • anchor 智能合约案例5 之 vesting
  • 汽车加气站操作工历年考试真题及答案
  • CSS表达式——下篇【selenium】
  • WebSocket实战:实现实时聊天应用 - 双向通信技术详解
  • 【C++】——类和对象(上)
  • C 语言基础:操作符、进制与数据表示通俗讲解
  • AI【应用 03】Windows环境部署 TTS CosyVoice2.0 详细流程记录(Matcha-TTS、spk2info.pt等文件分享)
  • Qt中处理多个同类型对象共享槽函数应用
  • git多分支管理
  • 缺陷的生命周期(Bug Life Cycle)是什么?
  • Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
  • WWDC 25 风云再起:SwiftUI 7 Charts 心法从 2D 到 3D 的华丽蜕变
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(四十二) -> 动态修改编译配置
  • 全面解析 wxPython:构建原生桌面应用的 Python GUI 框架
  • 【计算机基础理论知识】C++篇(二)
  • [python] 数据拷贝浪费内存,原地修改暗藏风险:如何平衡内存使用效率与数据完整性?
  • 【SpringBoot实战系列】SpringBoot3.X 整合 MinIO 存储原生方案
  • C++类对象多态底层原理及扩展问题
  • Python-GEE遥感云大数据分析与可视化(如何建立基于云计算的森林监测预警系统)
  • Yolov模型参数对比
  • Docker的/var/lib/docker/目录占用100%的处理方法
  • 变压器初级(原边)和次级(副边)的感应电动势、电压方向如何标注?
  • 安卓应用启动崩溃的问题排查记录
  • 《Effective Python》第十三章 测试与调试——使用 Mock 测试具有复杂依赖的代码
  • 【笔记分享】集合的基数、群、环、域
  • Python毕业设计232—基于python+Django+vue的图书管理系统(源代码+数据库)