deepflow icon indicating copy to clipboard operation
deepflow copied to clipboard

[FR] 导入 OpenTelemetry 数据,trace 中的span 是如何跟原始数据关联起来的

Open jiaozi07 opened this issue 1 year ago • 12 comments

Search before asking

  • [X] I had searched in the issues and found no similar feature requirement.

Description

otel 中的数据跟ebpf 的火焰图是割裂的,无法关联在一起

Use case

目前的架构: trace(agent) --> OpenTelemetry --> deepflow agent --> deepflow server 现象是otel 中的数据跟ebpf 的火焰图是割裂的,无法关联在一起,请问是哪里出现了问题

image

Related issues

No response

Are you willing to submit a PR?

  • [ ] Yes I am willing to submit a PR!

Code of Conduct

jiaozi07 avatar Jul 02 '24 08:07 jiaozi07

@jiaozi07 你的 deepflow-agent 配置是怎样的?以及 agent 和 version 分别是什么版本?

sharang avatar Jul 09 '24 01:07 sharang

deepflow-ctl agent-group-config list g-ba4afb713c -o yaml vtap_group_id: g-ba4afb713c external_agent_http_proxy_enabled: 1 # required external_agent_http_proxy_port: 38086 # optional, default 38086

/ # deepflow-server -v Name: deepflow-server community edition Branch: v6.5 CommitID: 5b57b89343b1281be513a2fda17c914a5ed22526 RevCount: 10673 Compiler: go version go1.21.12 linux/amd64 CompileTime: 2024-07-08 10:20:27

deepflow-agent -v 10658-e4122adefd9879e394eee5f5fd6398bfce95a70b Name: deepflow-agent community edition Branch: v6.5 CommitId: e4122adefd9879e394eee5f5fd6398bfce95a70b RevCount: 10658 Compiler: rustc 1.77.1 (7cf61ebde 2024-03-27) CompileTime: 2024-07-04 12:01:24

jiaozi07 avatar Jul 09 '24 07:07 jiaozi07

@jiaozi07 直接搜索一下 flow_log.l7_flow_log 表,看看有没有 signal_source = eBPF & trace_id != "" 的条目

可以基于下图修改搜索条件查看:

image

sharang avatar Jul 10 '24 00:07 sharang

预期之中,应该 signal_source = eBPF / Packet 的 request log 会根据 trace_id、span_id 字段的值与 otel 的 request log 关联起来,呈现在分布式追踪火焰图中。

sharang avatar Jul 10 '24 00:07 sharang

@jiaozi07 @sharang 您好,我遇到了同样的问题,jaeger数据导入后,jaeger otel数据和ebpf 的火焰图也是分离的! 后来解决了吗?

liu1004010308 avatar Jul 16 '24 09:07 liu1004010308

@jiaozi07 @sharang 您好,我遇到了同样的问题,jaeger数据导入后,jaeger otel数据和ebpf 的火焰图也是分离的! 后来解决了吗?

@liu1004010308 在 request log 中用一个 trace_id 来查询,看看能否出现 span_id 相同的、signal_source = eBPF/OTel 的两个 span。预期应该能出现。如果没有出现的话,可能的原因是 trace_id/span_id 在 HTTP header 中太靠后的位置,将此配置增大尝试一下:

https://www.deepflow.io/docs/zh/best-practice/agent-performance-tuning/#%E9%99%8D%E4%BD%8E%E5%8E%9F%E5%A7%8B%E6%95%B0%E6%8D%AE%E7%9A%84%E9%95%BF%E5%BA%A6

l7_log_packet_size

sharang avatar Jul 16 '24 14:07 sharang

@sharang 我遇到了一个问题,为什么jaeger的trace_id只有16位,到deepflow后就变成了32位。 image

liu1004010308 avatar Jul 26 '24 08:07 liu1004010308

@liu1004010308 你用的什么 agent?根据 otel 规范,trace_id 应该是 16 byte,你这里只有 8byte? https://github.com/open-telemetry/opentelemetry-proto-go/blob/main/otlp/trace/v1/trace.pb.go#L455 我们当做 16 byte 转换了。

sharang avatar Jul 28 '24 11:07 sharang

@sharang 请问,有关于如何通过看火焰图来定位问题的介绍吗?

yujianweilai avatar Aug 15 '24 05:08 yujianweilai

@sharang 请问,有关于如何通过看火焰图来定位问题的介绍吗?

@yujianweilai 我们的微信「DeepFlow 视频号」中,有两个视频,可以看看:

image

sharang avatar Aug 21 '24 10:08 sharang

使用博睿agent 是否有接入流程

jiaozi07 avatar Sep 04 '24 09:09 jiaozi07

@jiaozi07 如果博睿 agent 能输出 otlp 格式的数据的话,那可以参考 otel 的接入来操作。

https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver 我在这里没有找到 bonree 的 receiver,看起来需要做一个开发。

sharang avatar Sep 06 '24 08:09 sharang