当前位置: 首页 > news >正文

Golang版本处理Skywalking Trace上报数据

Tips: 中间记录了解决问题的过程,如不感兴趣可直接跳至结尾

  1. 首先去es里查询skywalking trace的元数据
    在这里插入图片描述
    可以拿到一串base64加密后的data_binary(直接解密不能用,会有乱码,可参考https://github.com/apache/skywalking/issues/7423)

  2. data_binary进行base64解密

skywalking提供了一个java的sdk可以直接分析这串内容,代码如下所示:

String dataBinary= "xxxxxx"
byte[]decode = Base64.getDecoder().decode(dataBinary);
SegmentObject segmentObject = SegmentObject.parseFrom(decode);
System.out.println(JSON.toJSONString(segmentObject));

segmentObject内有我们所有需要的数据,但golang并未找到类似的函数,所以我们需要用golang实现类似parseFrom()的逻辑,我们先看一下java的源码

public static SegmentObject parseFrom(byte[] data) throws InvalidProtocolBufferException {return (SegmentObject)PARSER.parseFrom(data);
}

它的本质就是调用com.google.protobuf提供的parseFrom()函数,所以我们只需要用golang版本的proto去反序列化base64解密后的byte即可

  1. 反序列化

我先尝试了将java版本的SegmentObject转成json,再转成proto文件,然后生成pb.go,用这里生成的SegmentObject去进行反序列化,发现并不可行

最后是通过skywalking-go版本agent的源码,找到了对应的pb文件
在这里插入图片描述
然后使用里面已经编译好的SegmentObject对象即可

import ("encoding/base64""fmt""google.golang.org/protobuf/proto""testing"agent "skywalking.apache.org/repo/goapi/collect/language/agent/v3"
)func TestSkyWalking(t *testing.T) {dataBinary := "xxx"by, err := base64.StdEncoding.DecodeString(dataBinary)if err != nil {t.Error(err)}segmentObject := &agent.SegmentObject{}err = proto.Unmarshal(by, segmentObject)fmt.Printf("%v", segmentObject)}
http://www.lryc.cn/news/239126.html

相关文章:

  • 【开源】基于Vue和SpringBoot的教学过程管理系统
  • 【python学习】中级篇-图形界面-内置库Tkinter,用于创建图形用户界面(GUI)
  • 【开源】基于JAVA的快递管理系统
  • 伦敦银涨1%内银涨多少才能持平
  • Linux:进度条(小程序)以及git三板斧
  • CSS-表格属性(1)
  • html在线生成二维码(附源码)
  • POS系统完整体系的介绍 Pos终端主密钥MK、DUKPT、PEK、DEK、MEK、TUSN的含义 ---安全行业基础篇7
  • 多普勒流速仪的功能作用是什么?
  • java 数据库 查询 select 2
  • 【前端学java】复习巩固-Java中的对象比较(14)
  • Sentinel 系统规则 (SystemRule)
  • Linux:详解(yum的使用、vim编辑器命令集合以及gcc/g++编译器的使用)
  • 剧情继续:马斯克曝出OpenAI前员工举报信,董事会与奥特曼谈判回归
  • mysql解压版安装步骤linux
  • Program Header Table(转载)
  • 汽车智能座舱/智能驾驶SOC -2
  • Vite Vue3+Element Plus框架布局
  • 【原创】为MybatisPlus增加一个逻辑删除插件,让XML中的SQL也能自动增加逻辑删除功能
  • ABAP 长文本操作
  • C++:哈希表的模拟实现
  • echarts实现如下图功能代码
  • Java 开源重试类 guava-retrying 使用案例
  • 服务器 jupyter 文件名乱码问题
  • Ubuntu设设置默认外放和麦克风设备
  • 【教程】Sqlite迁移到mysql(django)
  • 【漏洞复现】DPTech VPN存在任意文件读取漏洞
  • CentOS 8搭建WordPress
  • 服务器安全防护导致使用多款行业顶尖软件搭配使用,还是单独一款解决呢?
  • 【Spring篇】Spring注解式开发