浏览代码

Feature #TASK_QT-15938 EBPF-euspace容器化部署-l7事件计数器不准确问题修复

Tom.Li 1 年之前
父节点
当前提交
b0b74bbfda
共有 2 个文件被更改,包括 6 次插入2 次删除
  1. 2 1
      containers/registry.go
  2. 4 1
      ebpftracer/ebpf/l7/l7.c

+ 2 - 1
containers/registry.go

@@ -407,6 +407,7 @@ func (r *Registry) handleEvents(ch <-chan ebpftracer.Event) {
 				if e.L7Request == nil {
 					continue
 				}
+
 				if c := r.containersByPid[e.Pid]; c != nil {
 					//fmt.Println("EventTypeL7Request", e.Pid, c.checkL7AttachReady())
 					//a, _ := json.Marshal(e.L7Request)
@@ -483,7 +484,7 @@ func (r *Registry) getOrCreateContainer(pid uint32) *Container {
 			klog.Infoln("ignoring without persisting", "cg", cg.Id, "pid", pid)
 		} else {
 			klog.Infoln("ignoring", "cg", cg.Id, "pid", pid)
-			r.containersByPid[pid] = nil
+			//r.containersByPid[pid] = nil
 		}
 		return nil
 	}

+ 4 - 1
ebpftracer/ebpf/l7/l7.c

@@ -248,7 +248,7 @@ void send_event(void *ctx, struct l7_event *e, __u32 pid, __u64 fd) {
     e->pid = pid;
     long error = bpf_perf_event_output(ctx, &l7_events, BPF_F_CURRENT_CPU, e, sizeof(*e));
 	if (error ==0){
-		cw_add_event_count(e->trace_id);
+	        cw_add_event_count(e->trace_id);
 	}
 }
 
@@ -593,6 +593,7 @@ int trace_enter_write(void *ctx, __u64 fd, __u16 is_tls, char *buf, __u64 size,
         e->method = METHOD_HTTP2_CLIENT_FRAMES;
         e->duration = bpf_ktime_get_ns();
         e->payload_size = size;
+        e->trace_id = get_apm_trace_id(pid, tid);
         COPY_PAYLOAD(e->payload, size, payload);
         send_event(ctx, e, k.pid, k.fd);
         return 0;
@@ -681,6 +682,7 @@ int trace_exit_read(void *ctx, __u64 id, __u32 pid, __u16 is_tls, long int ret)
     e->method = METHOD_UNKNOWN;
     e->statement_id = 0;
     e->payload_size = 0;
+    e->trace_id = 0;
 	__u8 b[8];
 	bpf_read(payload, b);
 //    __u32 k0 = 0;
@@ -796,6 +798,7 @@ int trace_exit_read(void *ctx, __u64 id, __u32 pid, __u16 is_tls, long int ret)
             e->method = METHOD_HTTP2_SERVER_FRAMES;
             e->duration = bpf_ktime_get_ns();
             e->payload_size = ret;
+            e->trace_id = get_apm_trace_id(pid, tid);
             COPY_PAYLOAD(e->payload, ret, payload);
             send_event(ctx, e, k.pid, k.fd);
             return 0;