Преглед изворни кода

Fixed #TASK_QT-9810 解决l7层关联tcp问题

rock пре 1 година
родитељ
комит
86ce053b2b
4 измењених фајлова са 11 додато и 10 уклоњено
  1. 2 1
      ebpftracer/ebpf/l7/l7.c
  2. 4 4
      ebpftracer/ebpf/tcp/state.c
  3. 2 2
      ebpftracer/tracer.go
  4. 3 3
      main.go

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

@@ -520,6 +520,7 @@ int trace_enter_write(void *ctx, __u64 fd, __u16 is_tls, char *buf, __u64 size,
 	    }
 	    req->protocol = PROTOCOL_HTTP;
 		req->trace_id = trace_id;
+        // cw_bpf_debug("l7.c111 addr is --------:%d,%s",conn->sport,conn->saddr);
 	    struct  apm_span_context * sc = cw_get_current_tracking_span(trace_info);
 	    if (sc) {
 		    cw_copy_byte_arrays(sc->assumed_app_id, req->assumed_app_id, APM_ASSUMED_APP_ID_SIZE);
@@ -911,7 +912,7 @@ int trace_exit_read(void *ctx, __u64 id, __u32 pid, __u16 is_tls, long int ret)
 	if (e->protocol == PROTOCOL_HTTP) {
 		__u64 trace_id = req->trace_id;
 		e->trace_id = trace_id;
-        // cw_bpf_debug("l7.c addr is --------:%d,%s,%d,%s",conn->sport,conn->saddr,conn->dport,conn->daddr);
+        cw_bpf_debug("l7.c addr is --------:%d,%s",conn->sport,conn->saddr);
         e->component_sport = conn->sport;
         e->component_dport = conn->dport;
         __builtin_memcpy(&e->component_saddr, &conn->saddr, sizeof(e->component_saddr));

+ 4 - 4
ebpftracer/ebpf/tcp/state.c

@@ -142,10 +142,6 @@ int inet_sock_set_state(void *ctx)
         conn.first_read_time = 0;
         conn.first_write_time = 0;
         conn.new_read_time = 0;
-        conn.sport = args.sport;
-        conn.dport = args.dport;
-        __builtin_memcpy(&conn.saddr, &args.saddr_v6, sizeof(conn.saddr));
-        __builtin_memcpy(&conn.daddr, &args.daddr_v6, sizeof(conn.saddr));
 
         bpf_map_delete_elem(&fd_by_pid_tgid, &id);
         bpf_map_update_elem(&connection_id_by_socket, &args.skaddr, &cid, BPF_ANY);
@@ -173,6 +169,10 @@ int inet_sock_set_state(void *ctx)
         if (args.newstate == BPF_TCP_ESTABLISHED) {
             timestamp = conn->timestamp;
             type = EVENT_TYPE_CONNECTION_OPEN;
+            conn->sport = args.sport;
+            conn->dport = args.dport;
+            __builtin_memcpy(&conn->saddr, &args.saddr_v6, sizeof(conn->saddr));
+            __builtin_memcpy(&conn->daddr, &args.daddr_v6, sizeof(conn->saddr));
         } else if (args.newstate == BPF_TCP_CLOSE) {
             bpf_map_delete_elem(&active_connections, cid);
             type = EVENT_TYPE_CONNECTION_ERROR;

+ 2 - 2
ebpftracer/tracer.go

@@ -712,8 +712,8 @@ func runEventsReader(name string, r *perf.Reader, ch chan<- Event, typ perfMapTy
 				SpanId:       hex.EncodeToString(v.SpanId[:]),
 				StartAt:      v.StartAt,
 				EndAt:        v.EndtAt,
-				ComponentSAddr: ipPort(v.SAddr,v.Sport),
-				ComponentDAddr: ipPort(v.DAddr,v.Dport),
+				ComponentSAddr: ipPort(v.ComponentSAddr,v.ComponentSport),
+				ComponentDAddr: ipPort(v.ComponentDAddr,v.ComponentDport),
 			}
 			if req.Protocol == l7.ProtocolHTTP{
 				klog.Infof("runEventsReader ComponentSAddr.String %s", req.ComponentSAddr.String())

+ 3 - 3
main.go

@@ -306,9 +306,9 @@ func main() {
 		}
 		log.Infoln("netdata is:", string(jsonData))
 		// 创建请求  
-		urlRoute := "/api/v2/ebpf/receive"
-		// req, err := http.NewRequest("POST", "http://10.0.7.115:18080/api/v2/ebpf/receive", bytes.NewBuffer(jsonData))
-		req, err := http.NewRequest("POST", *flags.DataServer + urlRoute, bytes.NewBuffer(jsonData))  
+		// urlRoute := "/api/v2/ebpf/receive"
+		req, err := http.NewRequest("POST", "http://10.0.7.115:18080/api/v2/ebpf/receive", bytes.NewBuffer(jsonData))
+		// req, err := http.NewRequest("POST", *flags.DataServer + urlRoute, bytes.NewBuffer(jsonData))  
 		if err != nil {  
 			fmt.Println("Error:", err)  
 			return