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 <[email protected]>
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 {

Reply via email to