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

相关推荐
金銀銅鐵13 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
念何架构之路14 小时前
go-grpc设计思想
开发语言·后端·golang
system_error_x14 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
步行cgn16 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
码事漫谈17 小时前
AI 读你的提示词,其实很没耐心
后端
用户83562907805118 小时前
如何使用 Python 格式化 Excel 单元格中的长文本
后端·python
我命由我1234518 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
IT_陈寒18 小时前
Java性能优化完全指南
前端·人工智能·后端
电子IT笔记18 小时前
对接群晖NAS,上传和删除踩坑记录
前端·后端
Mk5987818 小时前
P4:把 Agent 的记忆搬进 Redis —— AgentScope-Java 工程化实战
后端