【SkyWalking】如何在链路中记录Post接口的请求、响应、异常栈数据

写在前面

文章基于SkyWalking-oap-9.7.0版本,agent版本为9.1.0。

问题记录

通过SkyWalking的ui中查询的trace链路数据,发现一个SpringBoot项目中的Post请求没有收集到请求参数和响应参数。

问题排查

开始时,怀疑是收集开关没有打开,通过查看Agent端的配置文件,发现开关正常开启。 更换Get接口重新发起请求,发现请求参数和响应参数被正常采集,所以怀疑是Post请求由于某些原因没有进行采集。通过springmvc的plugin插件代码排查,发现确实只采集了Get请求的参数。

改造方案

在插件中,通过反射获取到请求/响应数据,并写入segment的tag中。

请求数据

前往skywalking-agent中apm-sniffer -> apm-sdk-plugin -> mvc-annotation-commons目录,找到AbstractMethodInterceptor文件,在beforeMethod方法中,找到三处收集请求入参的地方,将采集的部分调整为,除Get请求外,其他请求通过httpbody进行参数记录。

响应数据

在afterMethod方法中,加入记录相应数据的代码

异常栈

前往skywalking-agent中apm-sniffer -> apm-agent-core -> context -> tag目录,找到Tags文件,在tags中新增一个自定义的异常栈标签。 前往skywalking-agent中apm-sniffer -> apm-sdk-plugin -> mvc-annotation-commons目录,找到AbstractMethodInterceptor文件,在handleMethodException方法中,加入自定义的异常tag数据。

总结

开启全量的参数记录,可能会有信息泄露的风险,且异常栈捕捉的部分,对性能影响也比较大,可以考虑通过动态开关来进行实时控制,避免对线上环境产生影响。

实时控制部分可以参考agent-core中SamplingService的代码,通过oap对接配置中心,监听到配置变更后下发命令给agent。

相关推荐
AINative软件工程17 分钟前
Tool Schema 写得好,模型少出错:5 个工程师必知的设计原则
后端·openai
AINative软件工程19 分钟前
AI 写的代码,Review 要怎么改?我们团队的 15 条 PR 检查清单
后端·openai
武子康22 分钟前
Java-21 深入浅出 MyBatis 手写ORM框架2 手写Resources、MappedStatment、XMLBuilder等
java·后端
techdashen38 分钟前
在 Fly.io 上使用 Rust 构建远程开发环境:从 Tokio 到 eBPF
开发语言·后端·rust
摇滚侠1 小时前
Spring 零基础入门到进阶 面向切面 AOP 52-60
java·后端·spring
雪隐2 小时前
AI股票小助手07-TA-Lib 技术指标计算实战
人工智能·后端
掘金者阿豪2 小时前
一本书读懂微积分!
后端
Cosolar2 小时前
深入理解 LangChain Callback 机制:从入门到实战
人工智能·后端·面试
我登哥MVP2 小时前
Spring Boot 从“会用”到“精通”:SpringBoot MVC 请求处理全流程
java·spring boot·后端·spring·mvc·maven·intellij-idea
我登哥MVP2 小时前
Spring Boot 从“会用”到“精通”:ReturnValueHandler原理
java·spring boot·后端·spring·java-ee·maven·intellij-idea