You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2022/10/19 07:43:15 UTC

[skywalking-goapi] branch main updated: Synchronized the Record and Span Attached Event (#47)

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-goapi.git


The following commit(s) were added to refs/heads/main by this push:
     new 53ebda3  Synchronized the Record and Span Attached Event (#47)
53ebda3 is described below

commit 53ebda305187fbbd2585f80ba20ce5b49e44d720
Author: mrproliu <74...@qq.com>
AuthorDate: Wed Oct 19 15:43:10 2022 +0800

    Synchronized the Record and Span Attached Event (#47)
---
 collect/common/v3/Common.pb.go               | 237 +++++++++++---
 collect/language/agent/v3/Tracing.pb.go      | 442 +++++++++++++++++++++++----
 collect/language/agent/v3/Tracing_grpc.pb.go | 123 ++++++++
 collect/servicemesh/v3/service-mesh.pb.go    | 111 ++++---
 dependencies.sh                              |   4 +-
 go.mod                                       |   5 +-
 go.sum                                       |  13 +-
 query/schema.go                              |  67 ++--
 8 files changed, 827 insertions(+), 175 deletions(-)

diff --git a/collect/common/v3/Common.pb.go b/collect/common/v3/Common.pb.go
index 123e819..690b95c 100644
--- a/collect/common/v3/Common.pb.go
+++ b/collect/common/v3/Common.pb.go
@@ -144,6 +144,63 @@ func (x *KeyStringValuePair) GetValue() string {
 	return ""
 }
 
+// since v3.1
+// An extension of KeyStringValuePair represents a kind of metric value for the key.
+type KeyIntValuePair struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Key   string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+	Value int64  `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *KeyIntValuePair) Reset() {
+	*x = KeyIntValuePair{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_Common_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *KeyIntValuePair) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*KeyIntValuePair) ProtoMessage() {}
+
+func (x *KeyIntValuePair) ProtoReflect() protoreflect.Message {
+	mi := &file_common_Common_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use KeyIntValuePair.ProtoReflect.Descriptor instead.
+func (*KeyIntValuePair) Descriptor() ([]byte, []int) {
+	return file_common_Common_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *KeyIntValuePair) GetKey() string {
+	if x != nil {
+		return x.Key
+	}
+	return ""
+}
+
+func (x *KeyIntValuePair) GetValue() int64 {
+	if x != nil {
+		return x.Value
+	}
+	return 0
+}
+
 type CPU struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -155,7 +212,7 @@ type CPU struct {
 func (x *CPU) Reset() {
 	*x = CPU{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_common_Common_proto_msgTypes[1]
+		mi := &file_common_Common_proto_msgTypes[2]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -168,7 +225,7 @@ func (x *CPU) String() string {
 func (*CPU) ProtoMessage() {}
 
 func (x *CPU) ProtoReflect() protoreflect.Message {
-	mi := &file_common_Common_proto_msgTypes[1]
+	mi := &file_common_Common_proto_msgTypes[2]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -181,7 +238,7 @@ func (x *CPU) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use CPU.ProtoReflect.Descriptor instead.
 func (*CPU) Descriptor() ([]byte, []int) {
-	return file_common_Common_proto_rawDescGZIP(), []int{1}
+	return file_common_Common_proto_rawDescGZIP(), []int{2}
 }
 
 func (x *CPU) GetUsagePercent() float64 {
@@ -202,7 +259,7 @@ type Commands struct {
 func (x *Commands) Reset() {
 	*x = Commands{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_common_Common_proto_msgTypes[2]
+		mi := &file_common_Common_proto_msgTypes[3]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -215,7 +272,7 @@ func (x *Commands) String() string {
 func (*Commands) ProtoMessage() {}
 
 func (x *Commands) ProtoReflect() protoreflect.Message {
-	mi := &file_common_Common_proto_msgTypes[2]
+	mi := &file_common_Common_proto_msgTypes[3]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -228,7 +285,7 @@ func (x *Commands) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Commands.ProtoReflect.Descriptor instead.
 func (*Commands) Descriptor() ([]byte, []int) {
-	return file_common_Common_proto_rawDescGZIP(), []int{2}
+	return file_common_Common_proto_rawDescGZIP(), []int{3}
 }
 
 func (x *Commands) GetCommands() []*Command {
@@ -250,7 +307,7 @@ type Command struct {
 func (x *Command) Reset() {
 	*x = Command{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_common_Common_proto_msgTypes[3]
+		mi := &file_common_Common_proto_msgTypes[4]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -263,7 +320,7 @@ func (x *Command) String() string {
 func (*Command) ProtoMessage() {}
 
 func (x *Command) ProtoReflect() protoreflect.Message {
-	mi := &file_common_Common_proto_msgTypes[3]
+	mi := &file_common_Common_proto_msgTypes[4]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -276,7 +333,7 @@ func (x *Command) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use Command.ProtoReflect.Descriptor instead.
 func (*Command) Descriptor() ([]byte, []int) {
-	return file_common_Common_proto_rawDescGZIP(), []int{3}
+	return file_common_Common_proto_rawDescGZIP(), []int{4}
 }
 
 func (x *Command) GetCommand() string {
@@ -293,6 +350,69 @@ func (x *Command) GetArgs() []*KeyStringValuePair {
 	return nil
 }
 
+// since v3.1
+// An instantaneous point on the time-line.
+// An instant represents a data point accurate to the nanosecond.
+// It is constituted by a long representing epoch-seconds and an int representing nanosecond-of-second,
+// which will always be between 0 and 999,999,999
+type Instant struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The number of seconds from the epoch of 1970-01-01T00:00:00Z.
+	Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
+	// The number of nanoseconds, later along the time-line, from the seconds field.
+	// This is always positive, and never exceeds 999,999,999.
+	Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
+}
+
+func (x *Instant) Reset() {
+	*x = Instant{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_common_Common_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Instant) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Instant) ProtoMessage() {}
+
+func (x *Instant) ProtoReflect() protoreflect.Message {
+	mi := &file_common_Common_proto_msgTypes[5]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Instant.ProtoReflect.Descriptor instead.
+func (*Instant) Descriptor() ([]byte, []int) {
+	return file_common_Common_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *Instant) GetSeconds() int64 {
+	if x != nil {
+		return x.Seconds
+	}
+	return 0
+}
+
+func (x *Instant) GetNanos() int32 {
+	if x != nil {
+		return x.Nanos
+	}
+	return 0
+}
+
 var File_common_Common_proto protoreflect.FileDescriptor
 
 var file_common_Common_proto_rawDesc = []byte{
@@ -302,31 +422,38 @@ var file_common_Common_proto_rawDesc = []byte{
 	0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
 	0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
 	0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c,
-	0x75, 0x65, 0x22, 0x29, 0x0a, 0x03, 0x43, 0x50, 0x55, 0x12, 0x22, 0x0a, 0x0c, 0x75, 0x73, 0x61,
-	0x67, 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52,
-	0x0c, 0x75, 0x73, 0x61, 0x67, 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x0a,
-	0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x08, 0x63, 0x6f, 0x6d,
-	0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x6b,
-	0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6f, 0x6d, 0x6d,
-	0x61, 0x6e, 0x64, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x22, 0x5a, 0x0a,
-	0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d,
-	0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61,
-	0x6e, 0x64, 0x12, 0x35, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x21, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33,
-	0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50,
-	0x61, 0x69, 0x72, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x2a, 0x30, 0x0a, 0x0b, 0x44, 0x65, 0x74,
-	0x65, 0x63, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0a, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65,
-	0x6e, 0x74, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x10, 0x01,
-	0x12, 0x09, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x10, 0x02, 0x42, 0x83, 0x01, 0x0a, 0x2b,
-	0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61,
-	0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
-	0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x33, 0x50, 0x01, 0x5a, 0x32, 0x73,
-	0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65,
-	0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x67, 0x6f, 0x61, 0x70, 0x69, 0x2f,
-	0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76,
-	0x33, 0xaa, 0x02, 0x1d, 0x53, 0x6b, 0x79, 0x57, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x4e,
-	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x56,
-	0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x75, 0x65, 0x22, 0x39, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x50, 0x61, 0x69, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x29, 0x0a,
+	0x03, 0x43, 0x50, 0x55, 0x12, 0x22, 0x0a, 0x0c, 0x75, 0x73, 0x61, 0x67, 0x65, 0x50, 0x65, 0x72,
+	0x63, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x75, 0x73, 0x61, 0x67,
+	0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x3e, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d,
+	0x61, 0x6e, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73,
+	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b,
+	0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x08,
+	0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x22, 0x5a, 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d,
+	0x61, 0x6e, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x35, 0x0a,
+	0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x6b,
+	0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x4b, 0x65, 0x79, 0x53,
+	0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x04,
+	0x61, 0x72, 0x67, 0x73, 0x22, 0x39, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x12,
+	0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
+	0x52, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6e,
+	0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x2a,
+	0x30, 0x0a, 0x0b, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0a,
+	0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x73, 0x65,
+	0x72, 0x76, 0x65, 0x72, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x10,
+	0x02, 0x42, 0x83, 0x01, 0x0a, 0x2b, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65,
+	0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x61, 0x70, 0x6d, 0x2e,
+	0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76,
+	0x33, 0x50, 0x01, 0x5a, 0x32, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e,
+	0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x2f,
+	0x67, 0x6f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x2f, 0x63, 0x6f,
+	0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x33, 0xaa, 0x02, 0x1d, 0x53, 0x6b, 0x79, 0x57, 0x61, 0x6c,
+	0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x74,
+	0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x56, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -342,16 +469,18 @@ func file_common_Common_proto_rawDescGZIP() []byte {
 }
 
 var file_common_Common_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_common_Common_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
+var file_common_Common_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
 var file_common_Common_proto_goTypes = []interface{}{
 	(DetectPoint)(0),           // 0: skywalking.v3.DetectPoint
 	(*KeyStringValuePair)(nil), // 1: skywalking.v3.KeyStringValuePair
-	(*CPU)(nil),                // 2: skywalking.v3.CPU
-	(*Commands)(nil),           // 3: skywalking.v3.Commands
-	(*Command)(nil),            // 4: skywalking.v3.Command
+	(*KeyIntValuePair)(nil),    // 2: skywalking.v3.KeyIntValuePair
+	(*CPU)(nil),                // 3: skywalking.v3.CPU
+	(*Commands)(nil),           // 4: skywalking.v3.Commands
+	(*Command)(nil),            // 5: skywalking.v3.Command
+	(*Instant)(nil),            // 6: skywalking.v3.Instant
 }
 var file_common_Common_proto_depIdxs = []int32{
-	4, // 0: skywalking.v3.Commands.commands:type_name -> skywalking.v3.Command
+	5, // 0: skywalking.v3.Commands.commands:type_name -> skywalking.v3.Command
 	1, // 1: skywalking.v3.Command.args:type_name -> skywalking.v3.KeyStringValuePair
 	2, // [2:2] is the sub-list for method output_type
 	2, // [2:2] is the sub-list for method input_type
@@ -379,7 +508,7 @@ func file_common_Common_proto_init() {
 			}
 		}
 		file_common_Common_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*CPU); i {
+			switch v := v.(*KeyIntValuePair); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -391,7 +520,7 @@ func file_common_Common_proto_init() {
 			}
 		}
 		file_common_Common_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*Commands); i {
+			switch v := v.(*CPU); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -403,6 +532,18 @@ func file_common_Common_proto_init() {
 			}
 		}
 		file_common_Common_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Commands); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_common_Common_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*Command); i {
 			case 0:
 				return &v.state
@@ -414,6 +555,18 @@ func file_common_Common_proto_init() {
 				return nil
 			}
 		}
+		file_common_Common_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Instant); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
@@ -421,7 +574,7 @@ func file_common_Common_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_common_Common_proto_rawDesc,
 			NumEnums:      1,
-			NumMessages:   4,
+			NumMessages:   6,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
diff --git a/collect/language/agent/v3/Tracing.pb.go b/collect/language/agent/v3/Tracing.pb.go
index 6d7fce3..c23e9cc 100644
--- a/collect/language/agent/v3/Tracing.pb.go
+++ b/collect/language/agent/v3/Tracing.pb.go
@@ -210,6 +210,52 @@ func (SpanLayer) EnumDescriptor() ([]byte, []int) {
 	return file_language_agent_Tracing_proto_rawDescGZIP(), []int{2}
 }
 
+type SpanAttachedEvent_SpanReferenceType int32
+
+const (
+	SpanAttachedEvent_SKYWALKING SpanAttachedEvent_SpanReferenceType = 0
+	SpanAttachedEvent_ZIPKIN     SpanAttachedEvent_SpanReferenceType = 1
+)
+
+// Enum value maps for SpanAttachedEvent_SpanReferenceType.
+var (
+	SpanAttachedEvent_SpanReferenceType_name = map[int32]string{
+		0: "SKYWALKING",
+		1: "ZIPKIN",
+	}
+	SpanAttachedEvent_SpanReferenceType_value = map[string]int32{
+		"SKYWALKING": 0,
+		"ZIPKIN":     1,
+	}
+)
+
+func (x SpanAttachedEvent_SpanReferenceType) Enum() *SpanAttachedEvent_SpanReferenceType {
+	p := new(SpanAttachedEvent_SpanReferenceType)
+	*p = x
+	return p
+}
+
+func (x SpanAttachedEvent_SpanReferenceType) String() string {
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (SpanAttachedEvent_SpanReferenceType) Descriptor() protoreflect.EnumDescriptor {
+	return file_language_agent_Tracing_proto_enumTypes[3].Descriptor()
+}
+
+func (SpanAttachedEvent_SpanReferenceType) Type() protoreflect.EnumType {
+	return &file_language_agent_Tracing_proto_enumTypes[3]
+}
+
+func (x SpanAttachedEvent_SpanReferenceType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use SpanAttachedEvent_SpanReferenceType.Descriptor instead.
+func (SpanAttachedEvent_SpanReferenceType) EnumDescriptor() ([]byte, []int) {
+	return file_language_agent_Tracing_proto_rawDescGZIP(), []int{6, 0}
+}
+
 // The segment is a collection of spans. It includes all collected spans in a simple one request context, such as a HTTP request process.
 //
 // We recommend the agent/SDK report all tracked data of one request once for all, such as,
@@ -793,6 +839,192 @@ func (x *SegmentCollection) GetSegments() []*SegmentObject {
 	return nil
 }
 
+// SpanAttachedEvent represents an attached event for a traced RPC.
+//
+// When an RPC is being traced by the in-process language agent, a span would be reported by the client-side agent.
+// And the rover would be aware of this RPC due to the existing tracing header.
+// Then, the rover agent collects extra information from the OS level to provide assistance information to diagnose network performance.
+type SpanAttachedEvent struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The nanosecond timestamp of the event's start time.
+	// Notice, most unit of timestamp in SkyWalking is milliseconds, but NANO-SECOND is required here.
+	// Because the attached event happens in the OS syscall level, most of them are executed rapidly.
+	StartTime *v3.Instant `protobuf:"bytes,1,opt,name=startTime,proto3" json:"startTime,omitempty"`
+	// The official event name.
+	// For example, the event name is a method signature from syscall stack.
+	Event string `protobuf:"bytes,2,opt,name=event,proto3" json:"event,omitempty"`
+	// [Optional] The nanosecond timestamp of the event's end time.
+	EndTime *v3.Instant `protobuf:"bytes,3,opt,name=endTime,proto3" json:"endTime,omitempty"`
+	// The tags for this event includes some extra OS level information,
+	// such as
+	// 1. net_device used for this exit span.
+	// 2. network L7 protocol
+	Tags []*v3.KeyStringValuePair `protobuf:"bytes,4,rep,name=tags,proto3" json:"tags,omitempty"`
+	// The summary of statistics during this event.
+	// Each statistic provides a name(metric name) to represent the name, and an int64/long as the value.
+	Summary []*v3.KeyIntValuePair `protobuf:"bytes,5,rep,name=summary,proto3" json:"summary,omitempty"`
+	// Refer to a trace context decoded from `sw8` header through network, such as HTTP header, MQ metadata
+	// https://skywalking.apache.org/docs/main/next/en/protocols/skywalking-cross-process-propagation-headers-protocol-v3/#standard-header-item
+	TraceContext *SpanAttachedEvent_SpanReference `protobuf:"bytes,6,opt,name=traceContext,proto3" json:"traceContext,omitempty"`
+}
+
+func (x *SpanAttachedEvent) Reset() {
+	*x = SpanAttachedEvent{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_language_agent_Tracing_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SpanAttachedEvent) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SpanAttachedEvent) ProtoMessage() {}
+
+func (x *SpanAttachedEvent) ProtoReflect() protoreflect.Message {
+	mi := &file_language_agent_Tracing_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SpanAttachedEvent.ProtoReflect.Descriptor instead.
+func (*SpanAttachedEvent) Descriptor() ([]byte, []int) {
+	return file_language_agent_Tracing_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *SpanAttachedEvent) GetStartTime() *v3.Instant {
+	if x != nil {
+		return x.StartTime
+	}
+	return nil
+}
+
+func (x *SpanAttachedEvent) GetEvent() string {
+	if x != nil {
+		return x.Event
+	}
+	return ""
+}
+
+func (x *SpanAttachedEvent) GetEndTime() *v3.Instant {
+	if x != nil {
+		return x.EndTime
+	}
+	return nil
+}
+
+func (x *SpanAttachedEvent) GetTags() []*v3.KeyStringValuePair {
+	if x != nil {
+		return x.Tags
+	}
+	return nil
+}
+
+func (x *SpanAttachedEvent) GetSummary() []*v3.KeyIntValuePair {
+	if x != nil {
+		return x.Summary
+	}
+	return nil
+}
+
+func (x *SpanAttachedEvent) GetTraceContext() *SpanAttachedEvent_SpanReference {
+	if x != nil {
+		return x.TraceContext
+	}
+	return nil
+}
+
+type SpanAttachedEvent_SpanReference struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Type SpanAttachedEvent_SpanReferenceType `protobuf:"varint,1,opt,name=type,proto3,enum=skywalking.v3.SpanAttachedEvent_SpanReferenceType" json:"type,omitempty"`
+	// [Optional] A string id represents the whole trace.
+	TraceId string `protobuf:"bytes,2,opt,name=traceId,proto3" json:"traceId,omitempty"`
+	// A unique id represents this segment. Other segments could use this id to reference as a child segment.
+	// [Optional] when this span reference
+	TraceSegmentId string `protobuf:"bytes,3,opt,name=traceSegmentId,proto3" json:"traceSegmentId,omitempty"`
+	// If type == SKYWALKING
+	// The number id of the span. Should be unique in the whole segment.
+	// Starting at 0
+	//
+	// If type == ZIPKIN
+	// The type of span ID is string.
+	SpanId string `protobuf:"bytes,4,opt,name=spanId,proto3" json:"spanId,omitempty"`
+}
+
+func (x *SpanAttachedEvent_SpanReference) Reset() {
+	*x = SpanAttachedEvent_SpanReference{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_language_agent_Tracing_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SpanAttachedEvent_SpanReference) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SpanAttachedEvent_SpanReference) ProtoMessage() {}
+
+func (x *SpanAttachedEvent_SpanReference) ProtoReflect() protoreflect.Message {
+	mi := &file_language_agent_Tracing_proto_msgTypes[7]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SpanAttachedEvent_SpanReference.ProtoReflect.Descriptor instead.
+func (*SpanAttachedEvent_SpanReference) Descriptor() ([]byte, []int) {
+	return file_language_agent_Tracing_proto_rawDescGZIP(), []int{6, 0}
+}
+
+func (x *SpanAttachedEvent_SpanReference) GetType() SpanAttachedEvent_SpanReferenceType {
+	if x != nil {
+		return x.Type
+	}
+	return SpanAttachedEvent_SKYWALKING
+}
+
+func (x *SpanAttachedEvent_SpanReference) GetTraceId() string {
+	if x != nil {
+		return x.TraceId
+	}
+	return ""
+}
+
+func (x *SpanAttachedEvent_SpanReference) GetTraceSegmentId() string {
+	if x != nil {
+		return x.TraceSegmentId
+	}
+	return ""
+}
+
+func (x *SpanAttachedEvent_SpanReference) GetSpanId() string {
+	if x != nil {
+		return x.SpanId
+	}
+	return ""
+}
+
 var File_language_agent_Tracing_proto protoreflect.FileDescriptor
 
 var file_language_agent_Tracing_proto_rawDesc = []byte{
@@ -883,40 +1115,83 @@ var file_language_agent_Tracing_proto_rawDesc = []byte{
 	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74,
 	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c,
 	0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4f,
-	0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2a,
-	0x2a, 0x0a, 0x08, 0x53, 0x70, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x45,
-	0x6e, 0x74, 0x72, 0x79, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x45, 0x78, 0x69, 0x74, 0x10, 0x01,
-	0x12, 0x09, 0x0a, 0x05, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x10, 0x02, 0x2a, 0x2c, 0x0a, 0x07, 0x52,
-	0x65, 0x66, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x50,
-	0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x72, 0x6f, 0x73,
-	0x73, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x10, 0x01, 0x2a, 0x5f, 0x0a, 0x09, 0x53, 0x70, 0x61,
-	0x6e, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77,
-	0x6e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x10,
-	0x01, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x50, 0x43, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72,
-	0x6b, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x74, 0x74, 0x70, 0x10, 0x03, 0x12, 0x06, 0x0a,
-	0x02, 0x4d, 0x51, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x61, 0x63, 0x68, 0x65, 0x10, 0x05,
-	0x12, 0x08, 0x0a, 0x04, 0x46, 0x41, 0x41, 0x53, 0x10, 0x06, 0x32, 0xaf, 0x01, 0x0a, 0x19, 0x54,
-	0x72, 0x61, 0x63, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72,
-	0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x6c,
-	0x65, 0x63, 0x74, 0x12, 0x1c, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67,
-	0x2e, 0x76, 0x33, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63,
-	0x74, 0x1a, 0x17, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76,
-	0x33, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x22, 0x00, 0x28, 0x01, 0x12, 0x4c,
-	0x0a, 0x0d, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x53, 0x79, 0x6e, 0x63, 0x12,
-	0x20, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e,
-	0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
-	0x6e, 0x1a, 0x17, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76,
-	0x33, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x22, 0x00, 0x42, 0x93, 0x01, 0x0a,
-	0x33, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x6b, 0x79, 0x77,
-	0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
-	0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x67, 0x65, 0x6e,
-	0x74, 0x2e, 0x76, 0x33, 0x50, 0x01, 0x5a, 0x3a, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69,
-	0x6e, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x72, 0x65,
-	0x70, 0x6f, 0x2f, 0x67, 0x6f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74,
-	0x2f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f,
-	0x76, 0x33, 0xaa, 0x02, 0x1d, 0x53, 0x6b, 0x79, 0x57, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e,
-	0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e,
-	0x56, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22,
+	0xbb, 0x04, 0x0a, 0x11, 0x53, 0x70, 0x61, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64,
+	0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69,
+	0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61,
+	0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74,
+	0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65,
+	0x76, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e,
+	0x74, 0x12, 0x30, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e,
+	0x76, 0x33, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54,
+	0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x21, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76,
+	0x33, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x50, 0x61, 0x69, 0x72, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x75,
+	0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x6b,
+	0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x4b, 0x65, 0x79, 0x49,
+	0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x73, 0x75, 0x6d,
+	0x6d, 0x61, 0x72, 0x79, 0x12, 0x52, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e,
+	0x74, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x6b, 0x79,
+	0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x41,
+	0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x70, 0x61,
+	0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x63,
+	0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0xb1, 0x01, 0x0a, 0x0d, 0x53, 0x70, 0x61,
+	0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x04, 0x74, 0x79,
+	0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x32, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61,
+	0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x41, 0x74, 0x74,
+	0x61, 0x63, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x52,
+	0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79,
+	0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e,
+	0x74, 0x72, 0x61, 0x63, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65,
+	0x6e, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x70, 0x61, 0x6e, 0x49, 0x64, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x70, 0x61, 0x6e, 0x49, 0x64, 0x22, 0x2f, 0x0a, 0x11,
+	0x53, 0x70, 0x61, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70,
+	0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x4b, 0x59, 0x57, 0x41, 0x4c, 0x4b, 0x49, 0x4e, 0x47, 0x10,
+	0x00, 0x12, 0x0a, 0x0a, 0x06, 0x5a, 0x49, 0x50, 0x4b, 0x49, 0x4e, 0x10, 0x01, 0x2a, 0x2a, 0x0a,
+	0x08, 0x53, 0x70, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x6e, 0x74,
+	0x72, 0x79, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x45, 0x78, 0x69, 0x74, 0x10, 0x01, 0x12, 0x09,
+	0x0a, 0x05, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x10, 0x02, 0x2a, 0x2c, 0x0a, 0x07, 0x52, 0x65, 0x66,
+	0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x50, 0x72, 0x6f,
+	0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x72, 0x6f, 0x73, 0x73, 0x54,
+	0x68, 0x72, 0x65, 0x61, 0x64, 0x10, 0x01, 0x2a, 0x5f, 0x0a, 0x09, 0x53, 0x70, 0x61, 0x6e, 0x4c,
+	0x61, 0x79, 0x65, 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x10,
+	0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x10, 0x01, 0x12,
+	0x10, 0x0a, 0x0c, 0x52, 0x50, 0x43, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x10,
+	0x02, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x74, 0x74, 0x70, 0x10, 0x03, 0x12, 0x06, 0x0a, 0x02, 0x4d,
+	0x51, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x61, 0x63, 0x68, 0x65, 0x10, 0x05, 0x12, 0x08,
+	0x0a, 0x04, 0x46, 0x41, 0x41, 0x53, 0x10, 0x06, 0x32, 0xaf, 0x01, 0x0a, 0x19, 0x54, 0x72, 0x61,
+	0x63, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63,
+	0x74, 0x12, 0x1c, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76,
+	0x33, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x1a,
+	0x17, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e,
+	0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x22, 0x00, 0x28, 0x01, 0x12, 0x4c, 0x0a, 0x0d,
+	0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x20, 0x2e,
+	0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x65,
+	0x67, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a,
+	0x17, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e,
+	0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x22, 0x00, 0x32, 0x6a, 0x0a, 0x1e, 0x53, 0x70,
+	0x61, 0x6e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52,
+	0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x48, 0x0a, 0x07,
+	0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x20, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c,
+	0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x41, 0x74, 0x74, 0x61,
+	0x63, 0x68, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x1a, 0x17, 0x2e, 0x73, 0x6b, 0x79, 0x77,
+	0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
+	0x64, 0x73, 0x22, 0x00, 0x28, 0x01, 0x42, 0x93, 0x01, 0x0a, 0x33, 0x6f, 0x72, 0x67, 0x2e, 0x61,
+	0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67,
+	0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x6c, 0x61, 0x6e,
+	0x67, 0x75, 0x61, 0x67, 0x65, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x76, 0x33, 0x50, 0x01,
+	0x5a, 0x3a, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x61, 0x70, 0x61,
+	0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x67, 0x6f, 0x61,
+	0x70, 0x69, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x2f, 0x6c, 0x61, 0x6e, 0x67, 0x75,
+	0x61, 0x67, 0x65, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x33, 0xaa, 0x02, 0x1d, 0x53,
+	0x6b, 0x79, 0x57, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x56, 0x33, 0x62, 0x06, 0x70, 0x72,
+	0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -931,40 +1206,53 @@ func file_language_agent_Tracing_proto_rawDescGZIP() []byte {
 	return file_language_agent_Tracing_proto_rawDescData
 }
 
-var file_language_agent_Tracing_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
-var file_language_agent_Tracing_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
+var file_language_agent_Tracing_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
+var file_language_agent_Tracing_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
 var file_language_agent_Tracing_proto_goTypes = []interface{}{
-	(SpanType)(0),                 // 0: skywalking.v3.SpanType
-	(RefType)(0),                  // 1: skywalking.v3.RefType
-	(SpanLayer)(0),                // 2: skywalking.v3.SpanLayer
-	(*SegmentObject)(nil),         // 3: skywalking.v3.SegmentObject
-	(*SegmentReference)(nil),      // 4: skywalking.v3.SegmentReference
-	(*SpanObject)(nil),            // 5: skywalking.v3.SpanObject
-	(*Log)(nil),                   // 6: skywalking.v3.Log
-	(*ID)(nil),                    // 7: skywalking.v3.ID
-	(*SegmentCollection)(nil),     // 8: skywalking.v3.SegmentCollection
-	(*v3.KeyStringValuePair)(nil), // 9: skywalking.v3.KeyStringValuePair
-	(*v3.Commands)(nil),           // 10: skywalking.v3.Commands
+	(SpanType)(0),                            // 0: skywalking.v3.SpanType
+	(RefType)(0),                             // 1: skywalking.v3.RefType
+	(SpanLayer)(0),                           // 2: skywalking.v3.SpanLayer
+	(SpanAttachedEvent_SpanReferenceType)(0), // 3: skywalking.v3.SpanAttachedEvent.SpanReferenceType
+	(*SegmentObject)(nil),                    // 4: skywalking.v3.SegmentObject
+	(*SegmentReference)(nil),                 // 5: skywalking.v3.SegmentReference
+	(*SpanObject)(nil),                       // 6: skywalking.v3.SpanObject
+	(*Log)(nil),                              // 7: skywalking.v3.Log
+	(*ID)(nil),                               // 8: skywalking.v3.ID
+	(*SegmentCollection)(nil),                // 9: skywalking.v3.SegmentCollection
+	(*SpanAttachedEvent)(nil),                // 10: skywalking.v3.SpanAttachedEvent
+	(*SpanAttachedEvent_SpanReference)(nil),  // 11: skywalking.v3.SpanAttachedEvent.SpanReference
+	(*v3.KeyStringValuePair)(nil),            // 12: skywalking.v3.KeyStringValuePair
+	(*v3.Instant)(nil),                       // 13: skywalking.v3.Instant
+	(*v3.KeyIntValuePair)(nil),               // 14: skywalking.v3.KeyIntValuePair
+	(*v3.Commands)(nil),                      // 15: skywalking.v3.Commands
 }
 var file_language_agent_Tracing_proto_depIdxs = []int32{
-	5,  // 0: skywalking.v3.SegmentObject.spans:type_name -> skywalking.v3.SpanObject
+	6,  // 0: skywalking.v3.SegmentObject.spans:type_name -> skywalking.v3.SpanObject
 	1,  // 1: skywalking.v3.SegmentReference.refType:type_name -> skywalking.v3.RefType
-	4,  // 2: skywalking.v3.SpanObject.refs:type_name -> skywalking.v3.SegmentReference
+	5,  // 2: skywalking.v3.SpanObject.refs:type_name -> skywalking.v3.SegmentReference
 	0,  // 3: skywalking.v3.SpanObject.spanType:type_name -> skywalking.v3.SpanType
 	2,  // 4: skywalking.v3.SpanObject.spanLayer:type_name -> skywalking.v3.SpanLayer
-	9,  // 5: skywalking.v3.SpanObject.tags:type_name -> skywalking.v3.KeyStringValuePair
-	6,  // 6: skywalking.v3.SpanObject.logs:type_name -> skywalking.v3.Log
-	9,  // 7: skywalking.v3.Log.data:type_name -> skywalking.v3.KeyStringValuePair
-	3,  // 8: skywalking.v3.SegmentCollection.segments:type_name -> skywalking.v3.SegmentObject
-	3,  // 9: skywalking.v3.TraceSegmentReportService.collect:input_type -> skywalking.v3.SegmentObject
-	8,  // 10: skywalking.v3.TraceSegmentReportService.collectInSync:input_type -> skywalking.v3.SegmentCollection
-	10, // 11: skywalking.v3.TraceSegmentReportService.collect:output_type -> skywalking.v3.Commands
-	10, // 12: skywalking.v3.TraceSegmentReportService.collectInSync:output_type -> skywalking.v3.Commands
-	11, // [11:13] is the sub-list for method output_type
-	9,  // [9:11] is the sub-list for method input_type
-	9,  // [9:9] is the sub-list for extension type_name
-	9,  // [9:9] is the sub-list for extension extendee
-	0,  // [0:9] is the sub-list for field type_name
+	12, // 5: skywalking.v3.SpanObject.tags:type_name -> skywalking.v3.KeyStringValuePair
+	7,  // 6: skywalking.v3.SpanObject.logs:type_name -> skywalking.v3.Log
+	12, // 7: skywalking.v3.Log.data:type_name -> skywalking.v3.KeyStringValuePair
+	4,  // 8: skywalking.v3.SegmentCollection.segments:type_name -> skywalking.v3.SegmentObject
+	13, // 9: skywalking.v3.SpanAttachedEvent.startTime:type_name -> skywalking.v3.Instant
+	13, // 10: skywalking.v3.SpanAttachedEvent.endTime:type_name -> skywalking.v3.Instant
+	12, // 11: skywalking.v3.SpanAttachedEvent.tags:type_name -> skywalking.v3.KeyStringValuePair
+	14, // 12: skywalking.v3.SpanAttachedEvent.summary:type_name -> skywalking.v3.KeyIntValuePair
+	11, // 13: skywalking.v3.SpanAttachedEvent.traceContext:type_name -> skywalking.v3.SpanAttachedEvent.SpanReference
+	3,  // 14: skywalking.v3.SpanAttachedEvent.SpanReference.type:type_name -> skywalking.v3.SpanAttachedEvent.SpanReferenceType
+	4,  // 15: skywalking.v3.TraceSegmentReportService.collect:input_type -> skywalking.v3.SegmentObject
+	9,  // 16: skywalking.v3.TraceSegmentReportService.collectInSync:input_type -> skywalking.v3.SegmentCollection
+	10, // 17: skywalking.v3.SpanAttachedEventReportService.collect:input_type -> skywalking.v3.SpanAttachedEvent
+	15, // 18: skywalking.v3.TraceSegmentReportService.collect:output_type -> skywalking.v3.Commands
+	15, // 19: skywalking.v3.TraceSegmentReportService.collectInSync:output_type -> skywalking.v3.Commands
+	15, // 20: skywalking.v3.SpanAttachedEventReportService.collect:output_type -> skywalking.v3.Commands
+	18, // [18:21] is the sub-list for method output_type
+	15, // [15:18] is the sub-list for method input_type
+	15, // [15:15] is the sub-list for extension type_name
+	15, // [15:15] is the sub-list for extension extendee
+	0,  // [0:15] is the sub-list for field type_name
 }
 
 func init() { file_language_agent_Tracing_proto_init() }
@@ -1045,16 +1333,40 @@ func file_language_agent_Tracing_proto_init() {
 				return nil
 			}
 		}
+		file_language_agent_Tracing_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SpanAttachedEvent); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_language_agent_Tracing_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SpanAttachedEvent_SpanReference); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_language_agent_Tracing_proto_rawDesc,
-			NumEnums:      3,
-			NumMessages:   6,
+			NumEnums:      4,
+			NumMessages:   8,
 			NumExtensions: 0,
-			NumServices:   1,
+			NumServices:   2,
 		},
 		GoTypes:           file_language_agent_Tracing_proto_goTypes,
 		DependencyIndexes: file_language_agent_Tracing_proto_depIdxs,
diff --git a/collect/language/agent/v3/Tracing_grpc.pb.go b/collect/language/agent/v3/Tracing_grpc.pb.go
index d425bd4..556202f 100644
--- a/collect/language/agent/v3/Tracing_grpc.pb.go
+++ b/collect/language/agent/v3/Tracing_grpc.pb.go
@@ -186,3 +186,126 @@ var TraceSegmentReportService_ServiceDesc = grpc.ServiceDesc{
 	},
 	Metadata: "language-agent/Tracing.proto",
 }
+
+// SpanAttachedEventReportServiceClient is the client API for SpanAttachedEventReportService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type SpanAttachedEventReportServiceClient interface {
+	// Collect SpanAttachedEvent to the OAP server in the streaming mode.
+	Collect(ctx context.Context, opts ...grpc.CallOption) (SpanAttachedEventReportService_CollectClient, error)
+}
+
+type spanAttachedEventReportServiceClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewSpanAttachedEventReportServiceClient(cc grpc.ClientConnInterface) SpanAttachedEventReportServiceClient {
+	return &spanAttachedEventReportServiceClient{cc}
+}
+
+func (c *spanAttachedEventReportServiceClient) Collect(ctx context.Context, opts ...grpc.CallOption) (SpanAttachedEventReportService_CollectClient, error) {
+	stream, err := c.cc.NewStream(ctx, &SpanAttachedEventReportService_ServiceDesc.Streams[0], "/skywalking.v3.SpanAttachedEventReportService/collect", opts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &spanAttachedEventReportServiceCollectClient{stream}
+	return x, nil
+}
+
+type SpanAttachedEventReportService_CollectClient interface {
+	Send(*SpanAttachedEvent) error
+	CloseAndRecv() (*v3.Commands, error)
+	grpc.ClientStream
+}
+
+type spanAttachedEventReportServiceCollectClient struct {
+	grpc.ClientStream
+}
+
+func (x *spanAttachedEventReportServiceCollectClient) Send(m *SpanAttachedEvent) error {
+	return x.ClientStream.SendMsg(m)
+}
+
+func (x *spanAttachedEventReportServiceCollectClient) CloseAndRecv() (*v3.Commands, error) {
+	if err := x.ClientStream.CloseSend(); err != nil {
+		return nil, err
+	}
+	m := new(v3.Commands)
+	if err := x.ClientStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+// SpanAttachedEventReportServiceServer is the server API for SpanAttachedEventReportService service.
+// All implementations must embed UnimplementedSpanAttachedEventReportServiceServer
+// for forward compatibility
+type SpanAttachedEventReportServiceServer interface {
+	// Collect SpanAttachedEvent to the OAP server in the streaming mode.
+	Collect(SpanAttachedEventReportService_CollectServer) error
+	mustEmbedUnimplementedSpanAttachedEventReportServiceServer()
+}
+
+// UnimplementedSpanAttachedEventReportServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedSpanAttachedEventReportServiceServer struct {
+}
+
+func (UnimplementedSpanAttachedEventReportServiceServer) Collect(SpanAttachedEventReportService_CollectServer) error {
+	return status.Errorf(codes.Unimplemented, "method Collect not implemented")
+}
+func (UnimplementedSpanAttachedEventReportServiceServer) mustEmbedUnimplementedSpanAttachedEventReportServiceServer() {
+}
+
+// UnsafeSpanAttachedEventReportServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to SpanAttachedEventReportServiceServer will
+// result in compilation errors.
+type UnsafeSpanAttachedEventReportServiceServer interface {
+	mustEmbedUnimplementedSpanAttachedEventReportServiceServer()
+}
+
+func RegisterSpanAttachedEventReportServiceServer(s grpc.ServiceRegistrar, srv SpanAttachedEventReportServiceServer) {
+	s.RegisterService(&SpanAttachedEventReportService_ServiceDesc, srv)
+}
+
+func _SpanAttachedEventReportService_Collect_Handler(srv interface{}, stream grpc.ServerStream) error {
+	return srv.(SpanAttachedEventReportServiceServer).Collect(&spanAttachedEventReportServiceCollectServer{stream})
+}
+
+type SpanAttachedEventReportService_CollectServer interface {
+	SendAndClose(*v3.Commands) error
+	Recv() (*SpanAttachedEvent, error)
+	grpc.ServerStream
+}
+
+type spanAttachedEventReportServiceCollectServer struct {
+	grpc.ServerStream
+}
+
+func (x *spanAttachedEventReportServiceCollectServer) SendAndClose(m *v3.Commands) error {
+	return x.ServerStream.SendMsg(m)
+}
+
+func (x *spanAttachedEventReportServiceCollectServer) Recv() (*SpanAttachedEvent, error) {
+	m := new(SpanAttachedEvent)
+	if err := x.ServerStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
+// SpanAttachedEventReportService_ServiceDesc is the grpc.ServiceDesc for SpanAttachedEventReportService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var SpanAttachedEventReportService_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "skywalking.v3.SpanAttachedEventReportService",
+	HandlerType: (*SpanAttachedEventReportServiceServer)(nil),
+	Methods:     []grpc.MethodDesc{},
+	Streams: []grpc.StreamDesc{
+		{
+			StreamName:    "collect",
+			Handler:       _SpanAttachedEventReportService_Collect_Handler,
+			ClientStreams: true,
+		},
+	},
+	Metadata: "language-agent/Tracing.proto",
+}
diff --git a/collect/servicemesh/v3/service-mesh.pb.go b/collect/servicemesh/v3/service-mesh.pb.go
index 30ac630..b2741d2 100644
--- a/collect/servicemesh/v3/service-mesh.pb.go
+++ b/collect/servicemesh/v3/service-mesh.pb.go
@@ -125,7 +125,9 @@ type ServiceMeshMetric struct {
 	// |                 time_to_first_upstream_rx_byte               |
 	// |                                  time_to_last_downstream_tx_byte                                                               |
 	//                                                                |              internalResponseLatencyNanos                       |
-	InternalResponseLatencyNanos int64 `protobuf:"varint,17,opt,name=internalResponseLatencyNanos,proto3" json:"internalResponseLatencyNanos,omitempty"`
+	InternalResponseLatencyNanos int64                    `protobuf:"varint,17,opt,name=internalResponseLatencyNanos,proto3" json:"internalResponseLatencyNanos,omitempty"`
+	SourceInstanceProperties     []*v3.KeyStringValuePair `protobuf:"bytes,18,rep,name=sourceInstanceProperties,proto3" json:"sourceInstanceProperties,omitempty"`
+	DestInstanceProperties       []*v3.KeyStringValuePair `protobuf:"bytes,19,rep,name=destInstanceProperties,proto3" json:"destInstanceProperties,omitempty"`
 }
 
 func (x *ServiceMeshMetric) Reset() {
@@ -279,6 +281,20 @@ func (x *ServiceMeshMetric) GetInternalResponseLatencyNanos() int64 {
 	return 0
 }
 
+func (x *ServiceMeshMetric) GetSourceInstanceProperties() []*v3.KeyStringValuePair {
+	if x != nil {
+		return x.SourceInstanceProperties
+	}
+	return nil
+}
+
+func (x *ServiceMeshMetric) GetDestInstanceProperties() []*v3.KeyStringValuePair {
+	if x != nil {
+		return x.DestInstanceProperties
+	}
+	return nil
+}
+
 type TCPInfo struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -381,7 +397,7 @@ var file_service_mesh_probe_service_mesh_proto_rawDesc = []byte{
 	0x72, 0x6f, 0x62, 0x65, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x6d, 0x65, 0x73,
 	0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b,
 	0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x43,
-	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe8, 0x05, 0x0a, 0x11,
+	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa2, 0x07, 0x0a, 0x11,
 	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x68, 0x4d, 0x65, 0x74, 0x72, 0x69,
 	0x63, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01,
 	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12,
@@ -428,32 +444,44 @@ var file_service_mesh_probe_service_mesh_proto_rawDesc = []byte{
 	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4e, 0x61, 0x6e,
 	0x6f, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
 	0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63,
-	0x79, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x22, 0x4d, 0x0a, 0x07, 0x54, 0x43, 0x50, 0x49, 0x6e, 0x66,
-	0x6f, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x42, 0x79, 0x74,
-	0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76,
-	0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x74, 0x42,
-	0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x65, 0x6e, 0x74,
-	0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x4d, 0x65, 0x73, 0x68, 0x50, 0x72, 0x6f,
-	0x62, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2a, 0x27, 0x0a, 0x08,
-	0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50,
-	0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x67, 0x52, 0x50, 0x43, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03,
-	0x54, 0x43, 0x50, 0x10, 0x02, 0x32, 0x6f, 0x0a, 0x18, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
-	0x4d, 0x65, 0x73, 0x68, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x12, 0x53, 0x0a, 0x07, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x20, 0x2e, 0x73,
-	0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x68, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x1a, 0x22,
-	0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x4d,
-	0x65, 0x73, 0x68, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65,
-	0x61, 0x6d, 0x22, 0x00, 0x28, 0x01, 0x42, 0x8d, 0x01, 0x0a, 0x30, 0x6f, 0x72, 0x67, 0x2e, 0x61,
-	0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67,
-	0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x73, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x33, 0x50, 0x01, 0x5a, 0x37, 0x73,
-	0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65,
-	0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x2f, 0x67, 0x6f, 0x61, 0x70, 0x69, 0x2f,
-	0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x6d,
-	0x65, 0x73, 0x68, 0x2f, 0x76, 0x33, 0xaa, 0x02, 0x1d, 0x53, 0x6b, 0x79, 0x57, 0x61, 0x6c, 0x6b,
-	0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f,
-	0x63, 0x6f, 0x6c, 0x2e, 0x56, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x79, 0x4e, 0x61, 0x6e, 0x6f, 0x73, 0x12, 0x5d, 0x0a, 0x18, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+	0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69,
+	0x65, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61,
+	0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x72, 0x69,
+	0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x18, 0x73, 0x6f, 0x75,
+	0x72, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65,
+	0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x16, 0x64, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x73,
+	0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18,
+	0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69,
+	0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x16, 0x64, 0x65, 0x73, 0x74, 0x49, 0x6e,
+	0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73,
+	0x22, 0x4d, 0x0a, 0x07, 0x54, 0x43, 0x50, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x0a, 0x0d, 0x72,
+	0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65,
+	0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x65, 0x6e, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22,
+	0x15, 0x0a, 0x13, 0x4d, 0x65, 0x73, 0x68, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x44, 0x6f, 0x77, 0x6e,
+	0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2a, 0x27, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63,
+	0x6f, 0x6c, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04,
+	0x67, 0x52, 0x50, 0x43, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x10, 0x02, 0x32,
+	0x6f, 0x0a, 0x18, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65, 0x73, 0x68, 0x4d, 0x65,
+	0x74, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x53, 0x0a, 0x07, 0x63,
+	0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x20, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b,
+	0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4d, 0x65,
+	0x73, 0x68, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x1a, 0x22, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61,
+	0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x50, 0x72, 0x6f,
+	0x62, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x00, 0x28, 0x01,
+	0x42, 0x8d, 0x01, 0x0a, 0x30, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e,
+	0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x61, 0x70, 0x6d, 0x2e, 0x6e,
+	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x6d, 0x65,
+	0x73, 0x68, 0x2e, 0x76, 0x33, 0x50, 0x01, 0x5a, 0x37, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b,
+	0x69, 0x6e, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x72,
+	0x65, 0x70, 0x6f, 0x2f, 0x67, 0x6f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63,
+	0x74, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x33,
+	0xaa, 0x02, 0x1d, 0x53, 0x6b, 0x79, 0x57, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x4e, 0x65,
+	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x56, 0x33,
+	0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -471,23 +499,26 @@ func file_service_mesh_probe_service_mesh_proto_rawDescGZIP() []byte {
 var file_service_mesh_probe_service_mesh_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
 var file_service_mesh_probe_service_mesh_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
 var file_service_mesh_probe_service_mesh_proto_goTypes = []interface{}{
-	(Protocol)(0),               // 0: skywalking.v3.Protocol
-	(*ServiceMeshMetric)(nil),   // 1: skywalking.v3.ServiceMeshMetric
-	(*TCPInfo)(nil),             // 2: skywalking.v3.TCPInfo
-	(*MeshProbeDownstream)(nil), // 3: skywalking.v3.MeshProbeDownstream
-	(v3.DetectPoint)(0),         // 4: skywalking.v3.DetectPoint
+	(Protocol)(0),                 // 0: skywalking.v3.Protocol
+	(*ServiceMeshMetric)(nil),     // 1: skywalking.v3.ServiceMeshMetric
+	(*TCPInfo)(nil),               // 2: skywalking.v3.TCPInfo
+	(*MeshProbeDownstream)(nil),   // 3: skywalking.v3.MeshProbeDownstream
+	(v3.DetectPoint)(0),           // 4: skywalking.v3.DetectPoint
+	(*v3.KeyStringValuePair)(nil), // 5: skywalking.v3.KeyStringValuePair
 }
 var file_service_mesh_probe_service_mesh_proto_depIdxs = []int32{
 	0, // 0: skywalking.v3.ServiceMeshMetric.protocol:type_name -> skywalking.v3.Protocol
 	4, // 1: skywalking.v3.ServiceMeshMetric.detectPoint:type_name -> skywalking.v3.DetectPoint
 	2, // 2: skywalking.v3.ServiceMeshMetric.tcp:type_name -> skywalking.v3.TCPInfo
-	1, // 3: skywalking.v3.ServiceMeshMetricService.collect:input_type -> skywalking.v3.ServiceMeshMetric
-	3, // 4: skywalking.v3.ServiceMeshMetricService.collect:output_type -> skywalking.v3.MeshProbeDownstream
-	4, // [4:5] is the sub-list for method output_type
-	3, // [3:4] is the sub-list for method input_type
-	3, // [3:3] is the sub-list for extension type_name
-	3, // [3:3] is the sub-list for extension extendee
-	0, // [0:3] is the sub-list for field type_name
+	5, // 3: skywalking.v3.ServiceMeshMetric.sourceInstanceProperties:type_name -> skywalking.v3.KeyStringValuePair
+	5, // 4: skywalking.v3.ServiceMeshMetric.destInstanceProperties:type_name -> skywalking.v3.KeyStringValuePair
+	1, // 5: skywalking.v3.ServiceMeshMetricService.collect:input_type -> skywalking.v3.ServiceMeshMetric
+	3, // 6: skywalking.v3.ServiceMeshMetricService.collect:output_type -> skywalking.v3.MeshProbeDownstream
+	6, // [6:7] is the sub-list for method output_type
+	5, // [5:6] is the sub-list for method input_type
+	5, // [5:5] is the sub-list for extension type_name
+	5, // [5:5] is the sub-list for extension extendee
+	0, // [0:5] is the sub-list for field type_name
 }
 
 func init() { file_service_mesh_probe_service_mesh_proto_init() }
diff --git a/dependencies.sh b/dependencies.sh
index 059a061..6a8f72d 100644
--- a/dependencies.sh
+++ b/dependencies.sh
@@ -17,8 +17,8 @@
 # specific language governing permissions and limitations
 # under the License.
 
-export COLLECT_PROTOCOL_SHA=e89af18cc7be7dc04ec4a7c4ff75f0ae19fa929b
-export QUERY_PROTOCOL_SHA=aba0de18fc934f6a20fd075ffe1a3df01ad1c80f
+export COLLECT_PROTOCOL_SHA=3dc973f859e4dab9521bac7f5d2ede2c4f57c524
+export QUERY_PROTOCOL_SHA=6ebb10a411902cfca1b36e9fe6133f0e347433ea
 export ENVOY_SERVICE_PROTOCOL_SHA=533b32f1b390a3a88ec2008d0561e07c926d879a
 export XDS_SERVICE_PROTOCOL_SHA=25de7278fc844d392d607214f36dbedf50f167ee
 export PROTOC_VALIDATE_SHA=v0.6.1
diff --git a/go.mod b/go.mod
index 6845429..69a4fdb 100644
--- a/go.mod
+++ b/go.mod
@@ -4,9 +4,8 @@ go 1.16
 
 require (
 	github.com/google/go-cmp v0.5.6 // indirect
-	golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f // indirect
-	golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 // indirect
-	golang.org/x/text v0.3.7 // indirect
+	golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect
+	golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect
 	google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84 // indirect
 	google.golang.org/grpc v1.40.0
 	google.golang.org/protobuf v1.28.1
diff --git a/go.sum b/go.sum
index c9cc2fc..88946a5 100644
--- a/go.sum
+++ b/go.sum
@@ -71,8 +71,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY=
-golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -86,15 +86,16 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0=
-golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
+golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
diff --git a/query/schema.go b/query/schema.go
index cbd45cf..8c1d0da 100644
--- a/query/schema.go
+++ b/query/schema.go
@@ -267,6 +267,11 @@ type HeatMapColumn struct {
 	Values []int64 `json:"values"`
 }
 
+type Instant struct {
+	Seconds int64 `json:"seconds"`
+	Nanos   int   `json:"nanos"`
+}
+
 type IntValues struct {
 	Values []*KVInt `json:"values"`
 }
@@ -276,6 +281,11 @@ type KVInt struct {
 	Value int64  `json:"value"`
 }
 
+type KeyNumericValue struct {
+	Key   string `json:"key"`
+	Value int64  `json:"value"`
+}
+
 type KeyValue struct {
 	Key   string  `json:"key"`
 	Value *string `json:"value,omitempty"`
@@ -502,6 +512,20 @@ type ProfiledSpan struct {
 	Logs                []*LogEntity `json:"logs"`
 }
 
+type Record struct {
+	Name  string  `json:"name"`
+	ID    string  `json:"id"`
+	Value *string `json:"value,omitempty"`
+	RefID *string `json:"refId,omitempty"`
+}
+
+type RecordCondition struct {
+	Name         string  `json:"name"`
+	ParentEntity *Entity `json:"parentEntity,omitempty"`
+	TopN         int     `json:"topN"`
+	Order        Order   `json:"order"`
+}
+
 type Ref struct {
 	TraceID         string  `json:"traceId"`
 	ParentSegmentID string  `json:"parentSegmentId"`
@@ -560,23 +584,32 @@ type SourceInput struct {
 }
 
 type Span struct {
-	TraceID             string       `json:"traceId"`
-	SegmentID           string       `json:"segmentId"`
-	SpanID              int          `json:"spanId"`
-	ParentSpanID        int          `json:"parentSpanId"`
-	Refs                []*Ref       `json:"refs"`
-	ServiceCode         string       `json:"serviceCode"`
-	ServiceInstanceName string       `json:"serviceInstanceName"`
-	StartTime           int64        `json:"startTime"`
-	EndTime             int64        `json:"endTime"`
-	EndpointName        *string      `json:"endpointName,omitempty"`
-	Type                string       `json:"type"`
-	Peer                *string      `json:"peer,omitempty"`
-	Component           *string      `json:"component,omitempty"`
-	IsError             *bool        `json:"isError,omitempty"`
-	Layer               *string      `json:"layer,omitempty"`
-	Tags                []*KeyValue  `json:"tags"`
-	Logs                []*LogEntity `json:"logs"`
+	TraceID             string               `json:"traceId"`
+	SegmentID           string               `json:"segmentId"`
+	SpanID              int                  `json:"spanId"`
+	ParentSpanID        int                  `json:"parentSpanId"`
+	Refs                []*Ref               `json:"refs"`
+	ServiceCode         string               `json:"serviceCode"`
+	ServiceInstanceName string               `json:"serviceInstanceName"`
+	StartTime           int64                `json:"startTime"`
+	EndTime             int64                `json:"endTime"`
+	EndpointName        *string              `json:"endpointName,omitempty"`
+	Type                string               `json:"type"`
+	Peer                *string              `json:"peer,omitempty"`
+	Component           *string              `json:"component,omitempty"`
+	IsError             *bool                `json:"isError,omitempty"`
+	Layer               *string              `json:"layer,omitempty"`
+	Tags                []*KeyValue          `json:"tags"`
+	Logs                []*LogEntity         `json:"logs"`
+	AttachedEvents      []*SpanAttachedEvent `json:"attachedEvents"`
+}
+
+type SpanAttachedEvent struct {
+	StartTime *Instant           `json:"startTime,omitempty"`
+	Event     string             `json:"event"`
+	EndTime   *Instant           `json:"endTime,omitempty"`
+	Tags      []*KeyValue        `json:"tags"`
+	Summary   []*KeyNumericValue `json:"summary"`
 }
 
 type SpanTag struct {