别光看原理了!手把手带你用SkyWalking Agent 9.x 给SpringBoot应用埋点,看数据怎么‘流’到后台

张开发
2026/4/9 2:59:29 15 分钟阅读

分享文章

别光看原理了!手把手带你用SkyWalking Agent 9.x 给SpringBoot应用埋点,看数据怎么‘流’到后台
别光看原理了手把手带你用SkyWalking Agent 9.x 给SpringBoot应用埋点看数据怎么‘流’到后台每次看到技术文档里大段原理分析就头疼作为开发者我们更关心的是代码怎么写、效果怎么看。今天我们就用最新版SkyWalking 9.x通过一个真实的SpringBoot项目从零开始演示如何让监控数据流动起来——你会亲眼看到请求如何变成SpanTraceSegment如何生成以及数据如何通过GRPC流向服务端。1. 环境准备与基础配置在开始之前确保你的开发环境满足以下条件JDK 1.8推荐JDK 11Maven 3.6SpringBoot 2.5项目SkyWalking 9.3.0 Agent可访问的SkyWalking OAP服务本地或远程首先下载SkyWalking Agent包解压后目录结构如下skywalking-agent/ ├── config/ │ └── agent.config # 核心配置文件 ├── plugins/ # 各种插件 ├── optional-plugins/ # 可选插件 └── bootstrap-plugins/ # 启动类插件关键配置项agent.config# 服务名称 agent.service_nameyour-springboot-service # OAP服务地址 collector.backend_service127.0.0.1:11800 # 采样率1表示100%采集 agent.sample_n_per_3_secs1 # 忽略特定请求路径 agent.ignore_suffix.jpg,.jpeg,.png,.gif,.css,.js提示生产环境建议将sample_n_per_3_secs设置为0.1-0.3之间避免产生过多监控数据2. SpringBoot项目集成Agent2.1 启动参数配置在IDE或命令行启动时添加JVM参数-javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_nameorder-service -Dskywalking.collector.backend_serviceoap:11800对于IDEA用户可以在Run/Debug Configurations的VM options中添加这些参数。2.2 验证Agent加载启动应用时观察日志正常加载会显示类似信息INFO 2023-07-20 14:00:00 SkyWalkingAgent - SkyWalking agent has been started... DEBUG 2023-07-20 14:00:01 PluginFinder - Load plugin Apache-HttpClient-4.x-plugin...2.3 创建测试接口我们创建一个简单的Controller来生成监控数据RestController RequestMapping(/demo) public class DemoController { GetMapping(/order/{id}) public ResponseEntityOrder getOrder(PathVariable String id) { // 模拟业务处理 Order order orderService.findOrder(id); return ResponseEntity.ok(order); } PostMapping(/order) public ResponseEntityString createOrder(RequestBody OrderRequest request) { String orderId orderService.createOrder(request); return ResponseEntity.ok(orderId); } }3. 观察数据生成过程3.1 理解TraceSegment生命周期当请求到达/demo/order/123时SkyWalking Agent的工作流程如下入口拦截Tomcat插件捕获请求创建EntrySpan上下文传播TracingContext维护调用栈方法拦截Spring MVC插件拦截Controller方法创建LocalSpan记录业务处理出口上报数据库调用被JDBC插件拦截创建ExitSpan记录SQL执行数据封装所有Span合并为TraceSegment异步上报通过DataCarrier发送到OAP3.2 调试关键节点在开发过程中可以通过以下方式观察内部状态查看当前TraceContext调试模式添加断点// 在Controller方法内添加 TracingContext context ContextManager.getOrCreate(); TraceSegment segment context.getSegment(); System.out.println(TraceSegmentId: segment.getTraceSegmentId());日志级别调整 在log4j2.xml中添加Logger nameorg.apache.skywalking levelDEBUG /会输出类似这样的调试信息DEBUG 2023-07-20 14:05:00 TracingContext - Create new span[EntrySpan] DEBUG 2023-07-20 14:05:01 ContextManager - Stop span[LocalSpan] DEBUG 2023-07-20 14:05:02 DataCarrier - Enqueue trace segment[segmentId...]4. 数据上报与可视化4.1 上报流程详解SkyWalking采用生产者-消费者模型处理监控数据组件角色关键行为TracingContext生产者管理Span生命周期DataCarrier缓冲队列内存队列缓冲数据TraceSegmentServiceClient消费者转换并上报数据数据流转时序ContextManager.stopSpan()触发Segment完成TraceSegment进入DataCarrier队列消费者线程批量获取数据转换为GRPC协议格式通过gRPC发送到OAP服务4.2 UI界面关键指标登录SkyWalking UI后重点关注以下面板拓扑图服务间调用关系追踪查看具体请求链路性能剖析方法级耗时分析JVM监控内存、线程等指标典型Span标签示例{ operationName: /demo/order/{id}, startTime: 1689840000000, endTime: 1689840001200, tags: { http.method: GET, http.status_code: 200, component: SpringMVC }, logs: [ { timestamp: 1689840000500, data: Start business processing } ] }5. 高级配置与问题排查5.1 自定义标签与日志在业务代码中添加自定义监控信息GetMapping(/order/{id}) public ResponseEntityOrder getOrder(PathVariable String id) { // 添加自定义标签 ActiveSpan.tag(order_type, VIP); // 添加日志 ActiveSpan.info(Start processing order: id); // ...业务逻辑 }5.2 常见问题解决方案问题1数据未上报检查OAP服务是否可达验证agent.config配置查看agent日志是否有错误问题2部分接口未监控确认插件是否加载查看启动日志检查是否在忽略列表中agent.ignore_suffix问题3性能开销过大调整采样率agent.sample_n_per_3_secs关闭不必要的插件移动plugins目录下的jar5.3 性能优化建议对于高并发场景推荐以下配置调整# 增大缓冲队列 buffer.channel_size5000 # 批量上报大小 buffer.batch_size200 # 消费者线程数 buffer.consumer_threads2在实际项目中我们发现当QPS超过5000时适当增加consumer_threads可以显著降低监控系统对业务的影响。

更多文章