随着微服务架构的广泛应用,分布式系统的链路追踪和性能监控变得尤为重要。在之前的文章中,我们探讨了如何使用 Sleuth 和 Zipkin 实现基本的链路追踪。今天,我们将介绍另一种强大的工具——Apache SkyWalking,它不仅提供了全面的链路追踪功能,还支持 JVM、数据库、消息队列等多方面的监控。
本文将带你了解 SkyWalking 的核心概念,并通过实际案例展示如何将其集成到 Spring Boot 应用中,实现全栈监控。
Apache SkyWalking 是一个开源的应用性能监测(APM)工具,主要用于监控和诊断基于分布式系统的应用程序。它提供了一个直观的 UI 界面来帮助开发者查看服务之间的调用关系、响应时间、吞吐量等关键指标,同时支持多种语言和技术栈(如 Java、.NET Core、Node.js 等)。
SkyWalking 的架构主要由以下几个部分组成:
首先,你需要下载 SkyWalking 的最新版本,并按照官方文档中的说明启动 OAP Server 和 UI。
# 下载 SkyWalking 发行版
wget https://www.apache.org/dyn/closer.cgi/skywalking/8.7.0/apache-skywalking-apm-8.7.0.tar.gz
# 解压文件
tar -xzf apache-skywalking-apm-8.7.0.tar.gz
# 进入目录并启动 OAP Server 和 UI
cd apache-skywalking-apm-bin/
./bin/startup.sh
默认情况下,OAP Server 将监听 12800
端口,UI 则可以通过访问 http://localhost:8080
查看。
接下来,在你的 Spring Boot 项目中添加 SkyWalking Agent。
编辑你的 Spring Boot 应用的启动脚本,在启动命令前添加如下参数:
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=your-service-name \
-Dskywalking.collector.backend_service=127.0.0.1:11800 \
-jar your-app.jar
这里需要注意的是:
-javaagent
指定了 SkyWalking Agent 的路径;-Dskywalking.agent.service_name
设置了当前服务的名字;-Dskywalking.collector.backend_service
指定了 OAP Server 的地址;为了便于问题排查,通常我们会将 traceId 注入到日志上下文中。可以通过以下方式实现:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg [traceId=%X{traceId}]%npattern>
encoder>
appender>
<jvmArguments>-javaagent:/path/to/skywalking-agent/skywalking-agent.jarjvmArguments>
configuration>
SkyWalking 提供了丰富的配置选项,你可以根据需要调整 agent.config 文件中的参数。
例如,如果你想指定采样率,可以在 agent.config 中设置:
agent.sample_n_per_3_secs=-1 # 不限制采样数量
或者针对特定的服务进行更细粒度的控制:
agent.service_name=your-service-name
collector.backend_service=127.0.0.1:11800
logging.level=info
虽然 SkyWalking Agent 已经能够自动捕获大部分信息,但在某些场景下,你可能还需要进行自定义埋点。此时可以使用 SkyWalking SDK 来手动记录 Span 数据。
import org.apache.skywalking.apm.toolkit.trace.Span;
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
public class MyService {
public void doSomething() {
// 创建一个新的 Span
try (Span span = TraceContext.createExitSpan("doSomething", null)) {
// 执行业务逻辑
System.out.println("Doing something...");
}
}
}
SkyWalking 支持对常见的数据库操作进行监控,包括 MySQL、PostgreSQL、Oracle 等。只需确保相应的 JDBC 驱动位于类路径中,并且 SkyWalking Agent 正常工作即可。
尽管 SkyWalking Agent 设计得非常高效,但在高并发环境下仍需注意其对系统性能的影响。建议在上线前进行全面的压力测试,确保不会引入显著的延迟或资源消耗。
确保 SkyWalking 存储的数据符合企业的安全策略,特别是涉及到敏感信息的部分。考虑使用加密传输以及适当的权限控制措施。
保持 SkyWalking 版本的更新,及时修复已知的安全漏洞和性能瓶颈。同时,定期备份存储的数据以防意外丢失。
通过本篇文章的学习,你应该已经掌握了如何将 SkyWalking 集成到 Spring Boot 应用中,并利用其强大的功能实现全方位的监控。无论是对于开发阶段的问题定位,还是生产环境下的运维管理,SkyWalking 都是一个不可或缺的好帮手。
参考链接