deepflowio / deepflow

eBPF Observability - Distributed Tracing and Profiling
https://deepflow.io
Apache License 2.0
2.8k stars 308 forks source link

[QA] Skywalking接入Deepflow后,试用问题汇总(持续更新) #8020

Open yujianweilai opened 1 week ago

yujianweilai commented 1 week ago

Search before asking

DeepFlow Component

Server

What you expected to happen

我们的业务微服务,之前是使用skywalking做apm,为了体验deepflow的全链路追踪能力,以及对trace数据进行标准化,我们将apm架构改造为skywalking-agent->otel-collector-> deepflow 。现在已经参考https://www.deepflow.io/docs/zh/integration/input/tracing/skywalking/ 将skywalking-agent采集到的业务trace数据,传到了deepflow,然后我尝试做一次业务请求,业务日志如下: image 使用traceid=2044a11911124f94882c1e30351fdd51.121.17252493541140007,去deepflow查询,查到了几十条链路数据 image 然后点击“Trace ID”,画出火焰图,但是火焰图显示上,如下图,每条链路间调用是断开的,没有办法直观的查看链路调用的整体情况 image 烦请研发老师,帮忙看一下,是哪里的问题,非常感谢。

How to reproduce

No response

DeepFlow version

[root@staging-cetccx-master1 ~]# kubectl exec -it -n deepflow deploy/deepflow-server -- deepflow-server -v Name: deepflow-server community edition Branch: v6.5 CommitID: https://github.com/deepflowio/deepflow/commit/9bb16a8ff644a9279300aa7220edcc2f21321d80 RevCount: 10821 Compiler: go version go1.21.13 linux/amd64 CompileTime: 2024-08-12 06:11:31 [root@staging-cetccx-master1 ~]# kubectl exec -it -n deepflow ds/deepflow-agent -- deepflow-agent -v 10805-c6a440e933afb1de0242f55c7aecaa6e6086e69a Name: deepflow-agent community edition Branch: v6.5 CommitId: https://github.com/deepflowio/deepflow/commit/c6a440e933afb1de0242f55c7aecaa6e6086e69a RevCount: 10805 Compiler: rustc 1.77.1 (7cf61ebde 2024-03-27) CompileTime: 2024-08-07 05:01:34 [root@staging-cetccx-master1 ~]#

DeepFlow agent list

No response

Kubernetes CNI

calico ipip模式

Operation-System/Kernel version

[root@staging-cetccx-master1 ~]# more /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [root@staging-cetccx-master1 ~]# uname -a Linux staging-cetccx-master1 5.16.13-1.el7.elrepo.x86_64 #1 SMP PREEMPT Tue Mar 8 08:32:26 EST 2022 x86_64 x86_64 x86_64 GNU/Linux [root@staging-cetccx-master1 ~]#

Anything else

No response

Are you willing to submit a PR?

Code of Conduct

yujianweilai commented 1 week ago

clickhouse里,traceid=2044a11911124f94882c1e30351fdd51.121.17252493541140007的数据,我导出为html了,有需要可以下载,见附件: 20240902-134026.zip

yujianweilai commented 1 week ago

今天将deepflow部署到了预发布环境(离上产线又近了一步),预发布环境的服务器配置比之前的测试环境高,部署架构也更贴近产线环境。今天试用了一下deepflow,发现一些问题(也可能是配置问题),还请研发老师协助排查一下,非常感谢~ 具体问题如下:

1 产生的火焰图,中间有空行,如下图所示。是什么原因导致程序绘制火焰图时,产生空行呢 ?

image

2 我的k8s环境使用的ingress-nginx,deepflow-agent捕获到了nginx上的请求,很厉害,但是deepflow捕获到的url是/msg/v1/messages/835735839043648,而实际业务发起的请求url是/v1/messages/835735839043648,二者不一致,这是为何?

image

image

3 火焰图中,个别链路的start_time不准,使得整个火焰图被拆分成两部分。

image

如图,右侧部分,其中一个链路的start_time=2024-09-04 19:06:44.141000 , 而从elk日志平台上看,cx-im-message-processor这个微服务,traceid=1b52dd588d164d639b7e1e2663061545.116.17254480018150159 的链路调用时间是2024-09-04 19:06:41,不是19:06:44,为何有这个时间差呢?

image

image

以上问题,是基于traceid=1b52dd588d164d639b7e1e2663061545.116.17254480018150159进行的总结,该traceid的所有链路信息,已导出为csv,供研发分析使用。 1b52dd588d164d639b7e1e2663061545.116.17254480018150159.csv

4 如果有个别非核心的微服务,不想采集他的链路信息,请问deepflow如何配置呢

5 helm方式安装的deepflow套件,会被k8s随机编排到集群的某个节点上运行,如果我想用一台单独的k8s节点,运行deepflow套件,用helm方式如何安装?

6 clickhouse重启报错

helm方式部署的deepflow,部署后clickhouse启动正常,但是当手动重启clickhouse pod时,报错:

CertificateReloader: Cannot obtain modification time for certificate file /etc/clickhouse-server/server.crt, skipping update. errno: 2, strerror: No such file or directory ![image](https://github.com/user-attachments/assets/f3cb8398-737d-4cd6-b437-d91a660077dc) 我到ck 容器的/etc/clickhouse-server/下确认,/etc/clickhouse-server/server.key文件确实不存在,但是重启前他也是不存在的 下面是clickhouse-console的日志 [deepflow_deepflow-clickhouse-0_clickhouse.log](https://github.com/user-attachments/files/16883864/deepflow_deepflow-clickhouse-0_clickhouse.log) ## 7 使用Distributed Tracing,查询火焰图时,绘图很慢 【答复】该问题,研发正则优化。https://github.com/deepflowio/deepflow/issues/7816
taloric commented 1 week ago

@yujianweilai

Q1: 这里的 csv 不包含空行前的 span,可以确认下。 这里断开有个空行,一般是因为空行上下的 span 没有字段关联。可以确认下这里上下两个 span 的 [span_id, parent_span_id] 是否没有任何一个关系是相等的 image

Q2: 可以实际抓流确认下就行。一般抓的就是 http 流的内容,因为也不可能编一个 /msg/。估计是 nginx 配的入向路径 (location) 是 /msg,可以看看

Q3:

如图,右侧部分,其中一个链路的start_time=2024-09-04 19:06:44.141000 , 而从elk日志平台上看,cx-im-message-processor这个微服务,traceid=1b52dd588d164d639b7e1e2663061545.116.17254480018150159 的链路调用时间是2024-09-04 19:06:41,不是19:06:44,为何有这个时间差呢?

这里注意下是 trace 的启动时间为 [2024-09-04 19:06:41],经过三秒发生 [2024-09-04 19:06:44.141000] 这个 span,前者是整个 trace 的启动时间,后者是单个 span 的发生时间,逻辑上没有矛盾

如果是想说左右两侧时间差异太大,可以看下这里消息队列的 span 是否异步的,即:左边接收请求,请求结束,产生左侧的 span,然后生成一个写队列任务,3s 后被调度,产生右侧的 span。如果是这种模型那图里呈现也符合逻辑

yujianweilai commented 1 week ago

@taloric 感谢您的回复。 Q1: 因为昨天的数据清理掉了,所以traceid=1b52dd588d164d639b7e1e2663061545.116.17254480018150159的记录现在查不到了,我重新做了一个业务请求(traceid=1b52dd588d164d639b7e1e2663061545.125.17255223575910235),也有类似空行的问题。 image 按您提供的方式查了一下,空行上面的_id=7411062091836839336 下面的_id=7411062091836889697, 两个span信息,确实对应不上, image 这是什么原因?

Q2: 是我这边的问题,ng里用了rewrite,所以有msg。该问题,不是问题,请忽略。

Q3: 我咨询了一下我们研发,如您所说,我们确认有个“历史数据保存”的异步操作。

另外,Q4-6 也请您有时间给看看,谢谢。

1473371932 commented 1 week ago

@taloric 感谢您的回复。 Q1: 因为昨天的数据清理掉了,所以traceid=1b52dd588d164d639b7e1e2663061545.116.17254480018150159的记录现在查不到了,我重新做了一个业务请求(traceid=1b52dd588d164d639b7e1e2663061545.125.17255223575910235),也有类似空行的问题。 image 按您提供的方式查了一下,空行上面的_id=7411062091836839336 下面的_id=7411062091836889697, 两个span信息,确实对应不上, image 这是什么原因?

Q2: 是我这边的问题,ng里用了rewrite,所以有msg。该问题,不是问题,请忽略。

Q3: 我咨询了一下我们研发,如您所说,我们确认有个“历史数据保存”的异步操作。

另外,Q4-6 也请您有时间给看看,谢谢。

Q4:DeepFlow 默认为全量采集,不支持去除指定资源的采集,但可以去除部分数据类型,例如: 拉黑某个端口,不要对应端口的 eBPF 数据: https://github.com/deepflowio/deepflow/blob/main/server/agent_config/example.yaml#L1307

拉黑调用日志 uri,可以忽略一些健康检测的探测: https://github.com/deepflowio/deepflow/blob/main/server/agent_config/example.yaml#L1073

忽略部分协议采集 https://github.com/deepflowio/deepflow/blob/main/server/agent_config/example.yaml#L1020

关掉 l4 的部分采集点: https://github.com/deepflowio/deepflow/blob/main/server/agent_config/example.yaml#L423

关掉 l7 的部分采集点: https://github.com/deepflowio/deepflow/blob/main/server/agent_config/example.yaml#L453

或者可以单方面全部关掉 l4/7 的采集点: https://github.com/deepflowio/deepflow/blob/main/server/agent_config/example.yaml#L416 https://github.com/deepflowio/deepflow/blob/main/server/agent_config/example.yaml#L423

关闭指定端口采集 cbpf 数据: https://github.com/deepflowio/deepflow/blob/main/server/agent_config/example.yaml#L135

Q5:可在提供的 helm chart 包中 value 文件开启allInOneLocalStorage: true功能

taloric commented 1 week ago

@yujianweilai

空行上面的_id=7411062091836839336 下面的_id=7411062091836889697, 两个span信息,确实对应不上,

确认一下,这里【空行上面】的 span 是一个什么样的 span?即它在哪个服务里采集的? 按你上面提供的信息,初步看它应该是在 ingress-nginx 内采集的客户端 span 。(如理解错误请纠正我)

如果是 nginx ,确认下插码(即 skywalking-agent 的启动位置)是从什么位置开始的,这里看 nginx 有 trace_id 却没有 span_id,是否从更前的位置发起请求产生 trace_id,但不完整遵循 sw8 协议?

yujianweilai commented 1 week ago

@taloric

@yujianweilai

空行上面的_id=7411062091836839336 下面的_id=7411062091836889697, 两个span信息,确实对应不上,

确认一下,这里【空行上面】的 span 是一个什么样的 span?即它在哪个服务里采集的? 按你上面提供的信息,初步看它应该是在 ingress-nginx 内采集的客户端 span 。(如理解错误请纠正我)

如果是 nginx ,确认下插码(即 skywalking-agent 的启动位置)是从什么位置开始的,这里看 nginx 有 trace_id 却没有 span_id,是否从更前的位置发起请求产生 trace_id,但不完整遵循 sw8 协议?

目前我们研发,只在自研的业务容器里使用了skywalking-agent插装,没有使用sky给nginx插装(对于ng的插装,我理解运维可以通过配置实现,后期我会完善),但是ng服务器上是部署了deepflow-agent的,所以nginx上的trace_id 会不会是deepflow-agent产生的呢?

taloric commented 1 week ago

@yujianweilai

目前我们研发,只在自研的业务容器里使用了skywalking-agent插装,没有使用sky给nginx插装(对于ng的插装,我理解运维可以通过配置实现,后期我会完善),但是ng服务器上是部署了deepflow-agent的,所以nginx上的trace_id 会不会是deepflow-agent产生的呢?

deepflow-agent 不会产生 trace_id,也不会在采集过程中获取到后续链路 trace_id。总结下来如果插桩了就不会有这个空行,如果能实现这是比较直接简单的解决方案