Jelajahi Sumber

Feature #TASK_QT-18250 解决移动端对接euspace的端到端数据

rock 9 bulan lalu
induk
melakukan
4d54196586
5 mengubah file dengan 32 tambahan dan 7 penghapusan
  1. 2 2
      Makefile2
  2. 5 3
      ebpftracer/ebpf/l7/l7.c
  3. 1 0
      ebpftracer/l7/l7.go
  4. 6 2
      ebpftracer/tracer.go
  5. 18 0
      tracing/apm_tracing.go

+ 2 - 2
Makefile2

@@ -17,12 +17,12 @@ build:
 	CGO_ENABLED=1 go build -gcflags="all=-N -l" -buildvcs=false -o euspace
 c:
 	#docker exec -it 9d928d96d4d0 sh -c 'cd /opt/github/euspace/ebpftracer && sh build.sh${PARAMS}'
-	docker exec -it 432002584cbf sh -c 'cd /opt/github/euspace/ebpftracer && make all ${PARAMS}'
+	docker exec -it 889965bb1d4a sh -c 'cd /opt/github/euspace/ebpftracer && make all ${PARAMS}'
 c-build: c
 
 go-build:
 	#ssh [email protected] 'export https_proxy=http://10.0.22.50:4780 && source ~/.g/env && cd /opt/github/euspace && make -f Makefile2 build'
-	docker exec -it 432002584cbf bash -c 'cd /opt/github/euspace && source ~/.g/env && make -f Makefile2 build'
+	docker exec -it 889965bb1d4a bash -c 'cd /opt/github/euspace && source ~/.g/env && make -f Makefile2 build'
 go: go-build
 
 run:

+ 5 - 3
ebpftracer/ebpf/l7/l7.c

@@ -94,6 +94,7 @@ struct l7_event {
 	unsigned char instance_id_from[APM_INSTANCE_ID_SIZE];
 	unsigned char app_id_from[APM_APP_ID_SIZE];
 	unsigned char span_id_from[APM_SPAN_ID_SIZE];
+    unsigned char type_from[APM_TYPE_FROM_SIZE];
 
 //    __u32 test_id;
     char payload[MAX_PAYLOAD_SIZE];
@@ -433,9 +434,10 @@ int trace_enter_write(void *ctx, __u64 fd, __u16 is_tls, char *buf, __u64 size,
 		    cw_copy_byte_arrays(cw_psc->instance_id, e->instance_id_from, APM_INSTANCE_ID_SIZE);
 		    cw_copy_byte_arrays(cw_psc->app_id, e->app_id_from, APM_APP_ID_SIZE);
 		    cw_copy_byte_arrays(cw_psc->span_id, e->span_id_from, APM_SPAN_ID_SIZE);
-//		    for (int i = 0; i < APM_APP_ID_SIZE; i++) {
-//			    bpf_printk("trace_enter_write - span_id_from = %02x", e->app_id_from[i]);
-//		    }
+            cw_copy_byte_arrays(cw_psc->type_from, e->type_from, APM_TYPE_FROM_SIZE);
+		    // for (int i = 0; i < APM_TYPE_FROM_SIZE; i++) {
+			//     bpf_printk("trace_enter_write - type_from = %02x", e->type_from[i]);
+		    // }
 	    }
         struct l7_request *req = bpf_map_lookup_elem(&active_l7_requests, &k);
         if (!req)

+ 1 - 0
ebpftracer/l7/l7.go

@@ -206,5 +206,6 @@ type RequestData struct {
 		InstanceIdFrom string
 		AppIdFrom      string
 		SpanIdFrom     string
+		TypeFrom	   string
 	}
 }

+ 6 - 2
ebpftracer/tracer.go

@@ -539,6 +539,7 @@ type l7Event struct {
 	InstanceIdFrom      HashByte
 	AppIdFrom           HashByte
 	SpanIdFrom          HashByte
+	TypeFrom          	[1]byte
 }
 
 type SocketDataBufferddd struct {
@@ -778,10 +779,13 @@ func runEventsReader(name string, r *perf.Reader, ch chan<- Event, typ perfMapTy
 				req.ParentSpanContext.InstanceIdFrom = hex.EncodeToString(v.InstanceIdFrom[:])
 				req.ParentSpanContext.AppIdFrom = hex.EncodeToString(v.AppIdFrom[:])
 				req.ParentSpanContext.SpanIdFrom = hex.EncodeToString(v.SpanIdFrom[:])
+				req.ParentSpanContext.TypeFrom = hex.EncodeToString(v.TypeFrom[:])
+				// klog.Debugf("req.ParentSpanContext.TraceIdFrom %s", req.ParentSpanContext.TraceIdFrom)
+				// klog.Debugf("req.ParentSpanContext.TypeFrom %s", req.ParentSpanContext.TypeFrom)
 				req.SAddr = ipPort(v.SAddr, v.Sport)
 				req.DAddr = ipPort(v.DAddr, v.Dport)
-				klog.Debugf("runEventsReader SAddr.String %s", req.SAddr.String())
-				klog.Debugf("runEventsReader DAddr.String %s", req.DAddr.String())
+				// klog.Debugf("runEventsReader SAddr.String %s", req.SAddr.String())
+				// klog.Debugf("runEventsReader DAddr.String %s", req.DAddr.String())
 			}
 			switch {
 			case v.PayloadSize == 0:

+ 18 - 0
tracing/apm_tracing.go

@@ -199,6 +199,14 @@ func (t *Trace) TraceEnd(r *l7.RequestData) {
 	if r.ParentSpanContext.SpanIdFrom != "0000000000000000" {
 		t.span.SetAttributes(attribute.String("server.span_id_from", r.ParentSpanContext.SpanIdFrom))
 	}
+	// klog.Debugf("r.ParentSpanContext.TypeFrom tpp %s", r.ParentSpanContext.TypeFrom)
+	if r.ParentSpanContext.TypeFrom == "10" {
+		t.span.SetAttributes(attribute.String("server.type_from", "SDK"))
+		t.span.SetAttributes(attribute.String("server.app_id_from", "-1"))
+		t.span.SetAttributes(attribute.String("server.span_id_from", r.ParentSpanContext.TraceIdFrom))
+		t.span.SetAttributes(attribute.String("server.instance_id_from", "-1"))
+		t.span.SetAttributes(attribute.String("server.call_id", "-1"))
+	}
 	// for _, v := range t.stack {
 	// 	fmt.Printf("TraceEndTraceEndTraceEnd%s\n", v)
 	// }
@@ -244,6 +252,16 @@ func (t *Trace) TraceEndEvent(r *l7.RequestData) {
 		//t.span.SetAttributes(attribute.String("server.span_id_from", r.ParentSpanContext.SpanIdFrom))
 	}
 
+
+	// klog.Debugf("r.ParentSpanContext.TypeFrom event tpp %s", r.ParentSpanContext.TypeFrom)
+	if r.ParentSpanContext.TypeFrom == "10" {
+		attr = append(attr, attribute.String("server.type_from", "SDK"))
+		attr = append(attr, attribute.String("server.app_id_from", "-1"))
+		attr = append(attr, attribute.String("server.span_id_from", r.ParentSpanContext.TraceIdFrom))
+		attr = append(attr, attribute.String("server.instance_id_from", "-1"))
+		attr = append(attr, attribute.String("server.call_id", "-1"))
+	}
+
 	attr = append(attr, attribute.String("server.src_addr", r.DAddr.String()))
 	attr = append(attr, attribute.String("server.dst_addr", r.SAddr.String()))
 	klog.Debugf("TraceEndEvent SAddr.String %s", r.SAddr.String())