[FR] 导入 OpenTelemetry 数据,trace 中的span 是如何跟原始数据关联起来的
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 的火焰图是割裂的,无法关联在一起,请问是哪里出现了问题
Related issues
No response
Are you willing to submit a PR?
- [ ] Yes I am willing to submit a PR!
Code of Conduct
- [X] I agree to follow this project's Code of Conduct
@jiaozi07 你的 deepflow-agent 配置是怎样的?以及 agent 和 version 分别是什么版本?
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 直接搜索一下 flow_log.l7_flow_log 表,看看有没有 signal_source = eBPF & trace_id != "" 的条目
可以基于下图修改搜索条件查看:
预期之中,应该 signal_source = eBPF / Packet 的 request log 会根据 trace_id、span_id 字段的值与 otel 的 request log 关联起来,呈现在分布式追踪火焰图中。
@jiaozi07 @sharang 您好,我遇到了同样的问题,jaeger数据导入后,jaeger otel数据和ebpf 的火焰图也是分离的! 后来解决了吗?
@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 我遇到了一个问题,为什么jaeger的trace_id只有16位,到deepflow后就变成了32位。
@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 请问,有关于如何通过看火焰图来定位问题的介绍吗?
@sharang 请问,有关于如何通过看火焰图来定位问题的介绍吗?
@yujianweilai 我们的微信「DeepFlow 视频号」中,有两个视频,可以看看:
使用博睿agent 是否有接入流程
@jiaozi07 如果博睿 agent 能输出 otlp 格式的数据的话,那可以参考 otel 的接入来操作。
https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver 我在这里没有找到 bonree 的 receiver,看起来需要做一个开发。