|
|
@@ -401,6 +401,13 @@ int trace_enter_write(void *ctx, __u64 fd, __u16 is_tls, char *buf, __u64 size,
|
|
|
|
|
|
if (is_http_response(payload, &http_status))
|
|
|
{
|
|
|
+ //处理http请求之前,确认进程信息是否存在
|
|
|
+ struct ebpf_proc_info *proc_info = bpf_map_lookup_elem(&proc_info_map, &pid);
|
|
|
+ if (!proc_info) {
|
|
|
+ cw_bpf_debug("[Trace End in l7][Response][HTTP]:no proc info. pid:%d \n",k.pid);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
struct apm_trace_info_t * start_trace_info = get_trace_info_by_fd(pid, fd);
|
|
|
if (!start_trace_info) {
|
|
|
return -1;
|
|
|
@@ -789,6 +796,14 @@ int trace_exit_read(void *ctx, __u64 id, __u32 pid, __u16 is_tls, long int ret)
|
|
|
// 被调用方http入口
|
|
|
// 作为服务端在走。coroot 原有逻辑是没有的
|
|
|
if (is_http_request(payload)) {
|
|
|
+
|
|
|
+ //处理http请求之前,确认进程信息是否存在
|
|
|
+ struct ebpf_proc_info *proc_info = bpf_map_lookup_elem(&proc_info_map, &pid);
|
|
|
+ if (!proc_info) {
|
|
|
+ cw_bpf_debug("[Receive][HTTP]:no proc info. pid:%d",k.pid);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
struct l7_request *req = bpf_map_lookup_elem(&l7_request_heap, &zero);
|
|
|
if (!req)
|
|
|
{
|
|
|
@@ -852,31 +867,9 @@ int trace_exit_read(void *ctx, __u64 id, __u32 pid, __u16 is_tls, long int ret)
|
|
|
// __sync_fetch_and_add(&accept_conn->bytes_received, total_size);
|
|
|
// }
|
|
|
|
|
|
-#if __KERNEL_FROM >= 512
|
|
|
- // ---------- 在http请求入口生成 横向串联的trace_id start ----------
|
|
|
- __u32 key = 0;
|
|
|
- __u32 offset = has_cw_header(req->payload);
|
|
|
- // cw_bpf_debug("pid:[%d],offset:[%d]\n",tid,offset);
|
|
|
- struct apm_span_context *cw_parent_span_context = bpf_map_lookup_elem(&apm_span_context_heap3, &key);
|
|
|
- if (cw_parent_span_context == NULL) {
|
|
|
- return -1;
|
|
|
- }
|
|
|
- __builtin_memset(cw_parent_span_context, 0, sizeof(struct apm_span_context));
|
|
|
-
|
|
|
- if (offset >0) {
|
|
|
- cw_string_to_span_context(&req->payload[offset], cw_parent_span_context);
|
|
|
- } else {
|
|
|
- generate_random_bytes(cw_parent_span_context->trace_id, TRACE_ID_SIZE);
|
|
|
- }
|
|
|
- // 保存 trace_id 到psc
|
|
|
- cw_save_parent_tracking_span(cw_parent_span_context);
|
|
|
- cw_bpf_debug("[Trace Start in l7][HTTP]pid:[%d] trace_id:[%llu]\n", tid, cw_parent_span_context->trace_id);
|
|
|
- // ---------- 在http请求入口生成 横向串联的trace_id end ----------
|
|
|
-#else
|
|
|
- //bpf_tail_call PROGUP(l7_http_request)
|
|
|
- cw_bpf_debug("======== PROG_DATA_L7_HTTP_TRACE_ID_UP_IDX ========== __KERNEL_FROM < 512 pid:[%d] ",tid);
|
|
|
- bpf_tail_call(ctx, &NAME(progs_jmp_tp_map), PROG_DATA_L7_HTTP_TRACE_ID_TP_IDX);
|
|
|
-#endif
|
|
|
+ //bpf_tail_call PROGUP(l7_http_request)
|
|
|
+ cw_bpf_debug("======== PROG_DATA_L7_HTTP_TRACE_ID_UP_IDX ========== __KERNEL_FROM < 512 pid:[%d] ",tid);
|
|
|
+ bpf_tail_call(ctx, &NAME(progs_jmp_tp_map), PROG_DATA_L7_HTTP_TRACE_ID_TP_IDX);
|
|
|
return 0;
|
|
|
}
|
|
|
|