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)

}

相关推荐

  1. golang使用migrate迁移pg数据库表报错处理

    2023-12-06 01:20:26       26 阅读
  2. Golang 异常处理

    2023-12-06 01:20:26       58 阅读
  3. golang 糟糕的错误处理

    2023-12-06 01:20:26       42 阅读
  4. 记录golang日常错误处理

    2023-12-06 01:20:26       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-06 01:20:26       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 01:20:26       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 01:20:26       87 阅读
  4. Python语言-面向对象

    2023-12-06 01:20:26       96 阅读

热门阅读

  1. C#实现批量生成二维码

    2023-12-06 01:20:26       52 阅读
  2. 基于 EmotiVoice 的批量 TXT 文本转语音工具

    2023-12-06 01:20:26       50 阅读
  3. XML Schema中的elementFormDefault

    2023-12-06 01:20:26       54 阅读
  4. SpringBoot之整合JWT

    2023-12-06 01:20:26       58 阅读
  5. Last Week in Milvus

    2023-12-06 01:20:26       51 阅读
  6. Linux下管道重定向深入了解

    2023-12-06 01:20:26       54 阅读
  7. linux | crond cron | service systemctl chkconfig

    2023-12-06 01:20:26       44 阅读