deepflow icon indicating copy to clipboard operation
deepflow copied to clipboard

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

Open yujianweilai opened this issue 1 year ago • 10 comments

Search before asking

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

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?

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

Code of Conduct

yujianweilai avatar Sep 02 '24 04:09 yujianweilai

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

yujianweilai avatar Sep 02 '24 05:09 yujianweilai

今天将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时,报错: <Error> CertificateReloader: Cannot obtain modification time for certificate file /etc/clickhouse-server/server.crt, skipping update. errno: 2, strerror: No such file or directory image 我到ck 容器的/etc/clickhouse-server/下确认,/etc/clickhouse-server/server.key文件确实不存在,但是重启前他也是不存在的 下面是clickhouse-console的日志 deepflow_deepflow-clickhouse-0_clickhouse.log

7 使用Distributed Tracing,查询火焰图时,绘图很慢

【答复】该问题,研发正则优化。https://github.com/deepflowio/deepflow/issues/7816

yujianweilai avatar Sep 04 '24 12:09 yujianweilai

@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。如果是这种模型那图里呈现也符合逻辑

taloric avatar Sep 05 '24 05:09 taloric

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

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

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

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

yujianweilai avatar Sep 05 '24 09:09 yujianweilai

@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功能

1473371932 avatar Sep 05 '24 15:09 1473371932

@yujianweilai

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

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

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

taloric avatar Sep 06 '24 02:09 taloric

@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产生的呢?

yujianweilai avatar Sep 06 '24 03:09 yujianweilai

@yujianweilai

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

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

taloric avatar Sep 06 '24 06:09 taloric

8 Grafana相关视图使用问题

8.1 Network - Flow Log 视图

【问题】 Network - Flow Log视图中,有一些异常报错数据中,他们的send 和Rece 都是0,推测是连接长时间没有数据传递,超时断开了。这些错误信息过多,会干扰正常信息显示。因为这两列数据都是metric,我无法再where语句中进行条件判断,请问有什么办法能过滤掉这部分数据? image 【解决方案】 使用 close_type 过滤 WHERE !: Timeout

8.2 Applicaiton - Service List 视图

【问题】 auto_service的下来菜单中,展示的容器服务、云主机信息不全或信息重复 image image image 【解决方案】 研发待排查

【问题】 Endpoint属性值是类似29999564u 这样的内容,这是什么意思? image 【解决方案】 gRPC协议的属性。

【问题】 如何理解Client Error Ratio 和 Server Error Ratio,一下图的第一行为例,我是否可以理解成:cx-application-admin这个容器,他作为server端接受请求时,错误率是21.22% ;他作为client去向外发出请求时,自己出错的概率是0%,说明他主动发出去的请求,都得到成功的返回。 image 【解决方案】 Client Error Ratio:表示服务端返回的4xx错误码占比(属于客户端错误) Server Error Ratio:表示服务端返回的5xx错误码占比(属于服务端错误)

8.3 Application - Request Log 视图

【问题】 k8s集sta编排服务,在workload下拉菜单中,找不到。比如下图中,minio这个daemonset类型的服务,在下拉菜单中找不到 ![image]tps://github.com/user-attachments/assets/341c5b13-b795-447c-ac1c-6187667a91ba) image image 【解决方案】 使用了主机网络的编排服务,deepflow会认为该服务是云主机,需要从“Application - Request Log - Cloud 视图”查询信息。 image

8.4 Application - Request Log - Cloud 视图

【问题】 发现 Application - Request Log - Cloud 视图中,主机的DNS信息采集不全 image 【解决方案】 研发在排查。。。

【问题】 有关数据库的错误信息,是如何探测到的,我们业务数据库版本是mysql5.7 ,比如SHOW ALL SLAVES STATUS 这类命令,在我们mysql上无法正常运行 image 【解决方案】 怀疑是数据库自身问题,deepflow不会主动向数据库发起查询请求。

8.5 Application - K8s Pod视图

【问题】Client error与Server error 含义不明 image 【解决方案】 Client Error :表示服务端返回的4xx错误码占比(属于客户端错误) Server Error :表示服务端返回的5xx错误码占比(属于服务端错误)

【问题】Protocol列是N/A,是何原因,如何进行问题排查? image 【解决方案】 略

8.6 IO Event视图

【问题】大部分k8s pod 或者 服务的IO数据是没有的 image 【解决方案】 可以看下 deepflow ns 下面有没有数据,如果有的话,就说明你现在选择的这个服务,没有 io 事件。

yujianweilai avatar Oct 31 '24 09:10 yujianweilai

8 Grafana相关视图使用问题

8.1 Network - Flow Log 视图

【问题】 Network - Flow Log视图中,有一些异常报错数据中,他们的send 和Rece 都是0,推测是连接长时间没有数据传递,超时断开了。这些错误信息过多,会干扰正常信息显示。因为这两列数据都是metric,我无法再where语句中进行条件判断,请问有什么办法能过滤掉这部分数据? image

8.2 Applicaiton - Service List 视图

【问题】 auto_service的下来菜单中,展示的容器服务、云主机信息不全或信息重复 image image image

【问题】 Endpoint属性值是类似29999564u 这样的内容,这是什么意思? image 【问题】 如何理解Client Error Ratio 和 Server Error Ratio,一下图的第一行为例,我是否可以理解成:cx-application-admin这个容器,他作为server端接受请求时,错误率是21.22% ;他作为client去向外发出请求时,自己出错的概率是0%,说明他主动发出去的请求,都得到成功的返回。 image

8.3 Application - Request Log 视图

【问题】 k8s集sta编排服务,在workload下拉菜单中,找不到。比如下图中,minio这个daemonset类型的服务,在下拉菜单中找不到 ![image]tps://github.com/user-attachments/assets/341c5b13-b795-447c-ac1c-6187667a91ba) image image

8.4 Application - Request Log - Cloud 视图

【问题】 发现 Application - Request Log - Cloud 视图中,主机的DNS信息采集不全 image 【问题】 有关数据库的错误信息,是如何探测到的,我们业务数据库版本是mysql5.7 ,比如SHOW ALL SLAVES STATUS 这类命令,在我们mysql上无法正常运行 image

8.5 Application - K8s Pod视图

【问题】Client error与Server error 含义不明 image 【问题】Protocol列是N/A,是何原因,如何进行问题排查? image

8.6 IO Event视图

【问题】大部分k8s pod 或者 服务的IO数据是没有的 image

  1. 如果觉得 timeout 是干扰项的话,直接用 close_type 过滤 WHERE !: *Timeout* 就好了

  2. 确认下没搜到的服务当前时间段是否有流量,如果有的话直接去 l7 flow log 过滤对应的 pod,然后看看他的 aotu_service 值; 用 l7_protocol 看协议,去官网找对应 endpoint 协议对应的字段即可 Snipaste_2024-11-04_15-25-13

  3. 确认这个时间段,此应用是否有流量经过

  4. 如果时间范围没问题的话,看 DeepFlow Alert Analysis 这个面板是否有数据

  5. 没识别到这些协议,不在目前可以识别的协议中

  6. 可以看下 deepflow ns 下面有没有数据,如果有的话,就说明你现在选择的这个服务,没有 io 事件

1473371932 avatar Nov 04 '24 07:11 1473371932