【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。

相关推荐
遥不可及3872 分钟前
基于Redis实现短信防轰炸的Java解决方案
后端
斜月3 分钟前
springboot开发技巧-jasypt加解密实践
spring boot·后端
CoderLemon8 分钟前
1.1 运行时数据区
java·后端
Bohemian8 分钟前
LeetCode207 课程表(带扩展)
后端·面试
布道谷8 分钟前
悲观锁与乐观锁
java·后端
蒋蜀黍9 分钟前
如何设计可灰度发布的部署方案?灰度发布具体操作指南(手把手版)
后端
坤小满学Java9 分钟前
【SpringCloud】从入门到精通(下)
后端·spring·spring cloud
蒋蜀黍10 分钟前
设计一个支持百万级QPS的短链服务,如何保证高可用与低延迟?
后端
探索为何11 分钟前
SQL解析器:实现进阶功能
数据库·后端
卤蛋七号11 分钟前
JavaSE高级(三)
后端