【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 之间做出权衡。以下是两者在多个维度的对比:
对比项 | 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:辅助工具目录,包含运维和管理脚本等。
- licenses、LICENSE、NOTICE:版权和开源许可相关文件。
说明:
从 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】日志如何接入,实现链路日志关联分析(欢迎提前收藏)