news 2026/6/9 21:32:28

SkyWalking 入门实战:Spring Boot 应用性能监控从0到1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SkyWalking 入门实战:Spring Boot 应用性能监控从0到1

视频看了几百小时还迷糊?关注我,几分钟让你秒懂!


一、为什么我们需要 SkyWalking?

在微服务架构越来越普及的今天,一个简单的业务请求可能要经过多个服务之间的调用。一旦系统出现性能瓶颈或异常,排查起来非常困难。

典型痛点场景:

  • 用户反馈“下单慢”,但不知道是哪个服务拖慢了整体响应?
  • 系统突然 CPU 飙升,却找不到具体是哪个接口或方法导致?
  • 想知道服务间的调用链路、依赖关系、成功率、吞吐量等指标?

这时候,我们就需要APM(Application Performance Monitoring)工具,而Apache SkyWalking就是一个开源、强大、对 Java 友好的 APM 解决方案。


二、SkyWalking 是什么?

SkyWalking 是 Apache 基金会下的开源 APM 系统,支持自动探针(Agent)方式无侵入地监控 Java、.NET、Node.js 等应用,提供:

  • 分布式追踪(Trace)
  • 服务拓扑图(Topology)
  • 性能指标监控(Metrics)
  • 日志集成(可选)
  • 告警机制

对于 Spring Boot 开发者来说,只需加个 Java Agent,无需改一行代码,就能实现全链路监控!


三、需求场景模拟

假设你正在开发一个电商系统,包含以下两个服务:

  • order-service:处理用户下单
  • payment-service:处理支付逻辑

用户点击“下单”后,order-service会调用payment-service。现在你想知道:

  1. 整个下单流程耗时多少?
  2. 哪个服务是瓶颈?
  3. 调用是否成功?失败率多少?

这就非常适合用 SkyWalking 来解决!


四、环境准备

1. 下载 SkyWalking 后端(OAP + UI)

前往官网:https://skywalking.apache.org/downloads/

选择最新稳定版(如 v9.7.0),下载后解压:

tar -zxvf apache-skywalking-apm-9.7.0.tar.gz cd apache-skywalking-apm-bin

2. 启动 SkyWalking

默认使用 H2 存储(适合测试),直接启动:

# Linux / Mac bin/startup.sh # Windows bin/startup.bat

启动成功后,访问:http://localhost:8080
你会看到 SkyWalking 的 Web UI 界面。

默认端口:OAP 11800(接收数据),UI 8080(展示界面)


五、Spring Boot 应用接入 SkyWalking(正确做法 ✅)

步骤 1:准备两个 Spring Boot 服务

order-service(端口 8081)
// OrderController.java @RestController public class OrderController { @Autowired private RestTemplate restTemplate; @GetMapping("/createOrder") public String createOrder() { // 模拟调用 payment-service String result = restTemplate.getForObject("http://localhost:8082/pay", String.class); return "Order created! Payment result: " + result; } }
payment-service(端口 8082)
// PaymentController.java @RestController public class PaymentController { @GetMapping("/pay") public String pay() { // 模拟支付耗时 try { Thread.sleep(200); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } return "Payment success"; } }

别忘了在order-service中注册RestTemplateBean:

@Bean public RestTemplate restTemplate() { return new RestTemplate(); }

步骤 2:下载 SkyWalking Agent

从 SkyWalking 安装包中找到agent/目录,或者单独下载 agent 包。

路径示例:apache-skywalking-apm-bin/agent/

步骤 3:启动应用时挂载 Agent

关键!不是改代码,而是通过 JVM 参数加载 Agent。

启动order-service

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

启动payment-service

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

注意:

  • /path/to/skywalking-agent/替换为你的实际路径
  • service_name是你在 UI 中看到的服务名,建议用-_,不要带空格

步骤 4:发起请求并查看效果

浏览器访问:http://localhost:8081/createOrder

然后打开 SkyWalking UI(http://localhost:8080),几秒后你会看到:

  • 两个服务出现在拓扑图中
  • 调用链显示order-service → payment-service
  • 每个接口的响应时间、吞吐量、成功率等指标

恭喜!你已成功接入 SkyWalking!


六、反例演示(错误做法 ❌)

反例 1:只加依赖,不挂载 Agent

有些开发者以为只要在pom.xml加 SkyWalking 依赖就行:

<!-- 错误!这只是 API,不能自动埋点 --> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-trace</artifactId> <version>8.16.0</version> </dependency>

后果:没有任何自动追踪数据上报!因为自动埋点靠的是Java Agent 字节码增强,不是普通依赖。

反例 2:Agent 路径写错或权限不足

java -javaagent:./skywalking-agent.jar ... # 如果当前目录没有 agent,会启动失败!

后果:JVM 启动报错,应用根本起不来。

反例 3:服务名包含特殊字符

-Dskywalking.agent.service_name=Order Service # ❌ 有空格!

后果:SkyWalking 可能无法正确识别服务,导致 UI 显示异常或数据丢失。


七、注意事项 & 最佳实践

项目建议
Agent 版本必须与 OAP 后端版本一致,否则可能不兼容
服务命名使用小写+中划线,如user-service,避免中文、空格、大写
生产环境建议使用 Elasticsearch 代替 H2 存储(修改config/application.yml
性能影响Agent 默认采样率 100%,高并发下可调整agent.sample_n_per_3_secs
日志关联可集成apm-toolkit-logback-1.x实现 TraceID 打印到日志

八、进阶:手动埋点(可选)

虽然自动埋点已覆盖大部分场景,但有时你想监控某个方法内部逻辑:

import org.apache.skywalking.apm.toolkit.trace.Trace; import org.apache.skywalking.apm.toolkit.trace.Tag; @Trace public void businessLogic(@Tag(key = "userId") String userId) { // 你的业务代码 }

这样会在调用链中新增一个 span,方便定位细粒度问题。


九、总结

  • SkyWalking 是无侵入、自动化的 APM 工具,特别适合 Spring Boot 微服务。
  • 核心是通过-javaagent挂载探针,不是改代码!
  • 正确配置服务名和后端地址,即可在 UI 中看到全链路追踪。
  • 避免常见错误:路径错误、服务名非法、版本不匹配。

视频看了几百小时还迷糊?关注我,几分钟让你秒懂!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 0:30:05

【好写作AI】论文指导进入2.0时代:当你的导师,遇见你的AI助手

好写作AI官方网址&#xff1a;https://www.haoxiezuo.cn/一、从“导师恐惧症”到“高效协作”&#xff0c;只差一个好写作AI 还记得那些“经典场面”吗&#xff1f;预约导师前&#xff0c;把草稿改了八遍&#xff0c;依然觉得是“学术垃圾”&#xff0c;不敢敲门。导师问&#…

作者头像 李华
网站建设 2026/6/7 19:20:19

为什么有了 LangChain,还需要 Spring AI?

一位学员在最近AI Agent开发工程师岗位的面试中&#xff0c;面试官抛出了一个非常有意思的问题&#xff1a;“为什么有了 LangChain&#xff0c;还需要 Spring AI&#xff1f;”今天&#xff0c;我们就来深度拆解一下&#xff0c;为什么在 Java 开发者和企业级后端架构的视野里…

作者头像 李华
网站建设 2026/5/30 14:13:08

跟我学C++中统篇—STL中的bind

一、标准库中的函数绑定 对C11标准比较熟悉的都知道&#xff0c;标准库中提供了一个函数模板std::bind&#xff0c;用于将可调用对象&#xff08;函数&#xff0c;仿函数、函数指针、lambda表达式及函数对象等&#xff09;与一组参数绑定&#xff0c;然后形成一个新的可调用对象…

作者头像 李华
网站建设 2026/5/31 3:30:16

【Java毕设源码分享】基于springboot+vue的郑州旅游景点智能推荐系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/10 14:46:33

解锁学术新姿势:书匠策AI带你玩转文献综述写作魔法

在学术写作的浩瀚宇宙中&#xff0c;文献综述就像是一张导航图&#xff0c;指引着研究者穿越知识的海洋&#xff0c;避免重复造轮子的尴尬&#xff0c;直抵研究的核心地带。但你是否曾为堆积如山的文献资料感到头疼&#xff1f;是否在浩瀚的信息中迷失方向&#xff0c;不知从何…

作者头像 李华