关于Skywalking Agent customize-enhance-trace对应用复杂参数类型取值
对于Skywalking Agent customize-enhance-trace 大家应该不陌生了,主要支持以非入侵的方式按用户自定义的Span跟踪对应的应用方法,并获取数据。 参考https://skywalking.apache.org/docs/skywalking-java/v9.0.0/en/setup/service-agent/java-agent/customize-enhance-trace/
规则如下:

但实际应用的时候会遇到,待拦截的方法,参数类型非常复杂,例如
<enhanced>
<class class_name="com.seckill.seckillentity.seckill.seckillServiceImpl">
...
<method method="updateStdOrder(com.seckill.seckillentity.std.StdOrderMsg)" operation_name="/updateStdOrder" static="false">
...
</method>
</class>
</enhanced>
表示订单信息com.seckill.seckillentity.std.StdOrderMsg 的类包含,订单号,关联的用户编号和商品信息,而商品信息实际上是一个Hashmap类型
package com.seckill.seckillentity.std;
import java.io.Serializable;public class StdOrderMsg implements Serializable{private String order_id;private Integer user_id;private LightFieldMap fields = new LightFieldMap();public String getOrder_id() {return order_id;}public void setOrder_id(String ordId){order_id=ordId;}public Integer getUser_id() {return user_id;}public void setUser_id(Integer userId) {user_id = userId;}public LightFieldMap getFields() {return this.fields;}public void setFields(LightFieldMap lightFields) {fields = lightFields;}public String toString() {...}
而HashMap 由嵌套一层 fields
public class LightFieldMap implements Serializable {private final Map<String, Object> fields = new HashMap();private final Map<String, List<LightFieldMap>> groups = new HashMap();public LightFieldMap() {}...public Object getFieldValue(String fName) {return this.fields.get(fName);}public void setFieldValue(String fName, Object value) {this.fields.put(fName, value);}...
但需求是要拦截到商品信息具体数据,商品编号、价格、购买量,等等…
也就是说,要获取Hashmap内部fields具体域对应的据,该如何定义Tag表达式呢?
起初,按SW提供用户手册尝试,例如获取价格
arg[0].getFields().[‘price’]
但拦截的结果 price=null
然后尝试把Hashmap类用toString方法打印出来
arg[0].getFields().toString()
发现可以获取清晰包信息:

观察该对象的结构,就很容易想到按以下方式获取
<tag key="pid">arg[0].getFields().fields.pid</tag>
<tag key="price">arg[0].getFields().fields.buy_price</tag>
<tag key="stock">arg[0].getFields().fields.buy_count</tag>
测试成功

总结: 对于复杂类,需要研究应用具体数据结构,如果是结构体嵌套,可以用A.B.C… 以此类推,但如果中间套了一层类似于HashMap对象,那就需要用类对应方法把该对象获取,然后再按结构体处理A.fun().B.C…,如果没有把握可以通过A.fun(),toString()把数据集拦截出来,然后再根据实际情况处理。
相关文章:
关于Skywalking Agent customize-enhance-trace对应用复杂参数类型取值
对于Skywalking Agent customize-enhance-trace 大家应该不陌生了,主要支持以非入侵的方式按用户自定义的Span跟踪对应的应用方法,并获取数据。 参考https://skywalking.apache.org/docs/skywalking-java/v9.0.0/en/setup/service-agent/java-agent/cust…...
手机路径、Windows路径知识及delphiXE跨设备APP自动下载和升级
手机路径、Windows路径知识 及delphiXE跨设备APP自动下载和升级 一、APP安装程序文件版本和权限信息 1、运行时动态调用Android apk的AndroidManifest.xml获取versionName 2、运行时动态调用IOS ipa的info.plist获取CFBundleVersion (和entitlements)…...
GitLab 502问题解决方案
由于最近 gitlab 切换到另一台服务器上部署的 gitlab 后,经常出现 502。平时重启 gitlab 后都能解决,今天突然重启多次后都还是 502(重启日志是正常的),遂通过 gitlab-ctl tail 查看日志进行排查。 gitlab-ctl tail通…...
selenium打开火狐浏览器
项目上需求为:甲方OA 系统是IE系统,需要从IE系统点个按钮打开火狐浏览器单点登录跳转到我们的系统 前期解决方案为:打开浏览器就行了,然后就用的是打开本地浏览器,但是由于B/S架构,有别人远程访问我的ip来…...
多标签分类论文笔记 | ML-Decoder: Scalable and Versatile Classification Head
个人论文精读笔记,主要是翻译心得,欢迎旁观,如果有兴趣可以在评论区留言,我们一起探讨。 Paper: https://arxiv.org/pdf/2111.12933.pdf Code: https://github.com/Alibaba-MIIL/ML_Decoder 文章目录 0. 摘要1. 介绍2. 方法2.1 Ba…...
修改http_charfinder.py使能在python311环境中运行
需要修改两个函数,第一个是init函数,修改如下: async def init(loop, address, port): # <1> # app web.Application(looploop) # <2> # app.router.add_route(GET, /, home) # <3> app web.Application(…...
蓝桥杯(跳跃 C++)
思路: 1、根据题目很容易知道可以用深度搜索、广度搜索、动态规划的思想解题。 2、这里利用深度搜素,由题目可知,可以往九个方向走。 3、这里的判断边界就是走到终点。 #include<iostream> using namespace std; int max1 0; int …...
08 | Jackson 注解在实体里面如何应用?常见的死循环问题如何解决?
我们用 Spring Boot 里面默认集成的 fasterxml.jackson 加以说明,这看似和 JPA 没什么关系,但是一旦我们和 Entity 一起使用的时候,就会遇到一些问题,特别是新手同学,我们这一课时详细介绍一下用法。先来跟着我了解一下…...
JavaScript—获取当前时间 并转化为yyyy-MM-dd hh:mm:ss格式
JavaScript—获取当前时间 并转化为yyyy-MM-dd hh:mm:ss格式 每次项目都需要用到时间戳格式,可以封装成一个方法 下次直接CV过去 const timestampPadStart=(str)=>{str=String(str);return str.padStart(2,0)...
OpenHarmony创新赛丨报名倒计时,超强秘籍带你直通大奖!
OpenHarmony创新赛报名倒计时开始啦! 设于开放原子全球开源大赛下的OpenHarmony创新赛,目前正在如火如荼地进行赛事招募中!这次大赛围绕创新应用、商显行业、金融行业三大赛题,邀请来自企业、个人、高校师生等各界群体的优秀开发者…...
Linux高性能服务器编程 学习笔记 第十四章 进程池和线程池
动态创建子进程或子线程的缺点: 1.动态创建进程或线程比较耗时,这将导致较慢的客户响应。 2.动态创建的子进程或子线程通常只用来为一个客户服务(除非我们做特殊处理),这将导致系统上产生大量的进程或线程,…...
微信小程序/vue3/uview-plus form兜底校验
效果图 代码 <template><u-form :model"form" ref"formRole" :rules"rules"><u-form-item prop"nickname"><u-input v-model"form.nickname" placeholder"姓名" border"none" /&…...
Photoshop 2024正式发布!内置最新PS AI,创意填充等功能无限制使用!
PS正式版目前更新到了2024,版本为25.0。 安装教程 1、下载得到安装包后,先解压。鼠标右键,【解压到当前文件夹】 2、双击 Set-up 开始安装 3、这里可以更改安装位置。如果C盘空间不够大,可以把它安装到C盘以外。更改好后&#x…...
芯片学习记录TLP184
TLP184 芯片介绍 TLP184是一款光耦隔离器,它的主要特点包括:高电压耐受能力、高传输速度、高共模隔离能力、低功耗等。它可以用于工业自动化、通信设备、家用电器等领域的电气隔离应用。由一个光电晶体管组成,光学耦合到两个红外发射二极管…...
C++ 重载运算符和重载函数
前言 C 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 当您调用一个…...
Linux:mongodb数据库基础操作(3.4版本)
安装 3.*版本和4.*版本安装都是一样的 Linux:mongodb数据库源码包安装(4.4.25版本)_鲍海超-GNUBHCkalitarro的博客-CSDN博客https://blog.csdn.net/w14768855/article/details/133826626?spm1001.2014.3001.5501 mysql和mongodb对比 登录…...
nginx实现灰度上线(InsCode AI 创作助手)
要基于Nginx实现灰度上线,有以下三种方法: 权重分发:使用Nginx的upstream模块来设置不同服务器的权重。将一部分请求分发给新版本服务器,另一部分请求分发给旧版本服务器。这可以通过以下方式实现: http {upstream bac…...
记:apifox 返回 invalid header token 的问题排查思路
背景: 某接口服务使用 springboot 2.x 开发, RestController 、ReqeustBody 在本地(localhost)调用的时候正常、chrome (.cn域名访问)浏览器访问正常。 换成 apifox (.cn域名访问)、postman (.cn域名访问)调用异常返回:invalid header t…...
【00】神经网络之初始化参数
问题描述 #随机初始化权重 w12 np.random.randn(100, 784)/np.sqrt(784) 为什么除以28 回答 这里的代码是初始化一个深度学习模型中的权重矩阵w12。权重矩阵的形状是(100, 784),这是一个从784个输入节点到100个隐藏节点的全连接层。 除以np.sqrt(784)是权重初始…...
代码随想录Day20 回溯算法 LeetCode77 组合问题
以下内容更详细解释来自于:代码随想录 (programmercarl.com) 1.回溯算法理论基础 回溯法也叫回溯搜索法,是搜索法的一种,我们之前在二叉树中也经常使用到回溯来解决问题,其实有递归就有回溯,有的时候回溯隐藏在递归之下,我们不容易发觉,今天我们来详细介绍一下什么是回溯,它能…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...
Python爬虫实战:研究Restkit库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...
LeetCode 0386.字典序排数:细心总结条件
【LetMeFly】386.字典序排数:细心总结条件 力扣题目链接:https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...
如何让非 TCP/IP 协议驱动屏蔽 IPv4/IPv6 和 ARP 报文?
——从硬件过滤到协议栈隔离的完整指南 引言 在现代网络开发中,许多场景需要定制化网络协议(如工业控制、高性能计算),此时需确保驱动仅处理特定协议,避免被标准协议(如 IPv4/IPv6/ARP)干扰。本文基于 Linux 内核驱动的实现,探讨如何通过硬件过滤、驱动层拦截和协议栈…...
