fancx

Results 9 comments of fancx

@TomatoMr 您好,感谢您的回复,我按照你上述说的内容,重新进行了尝试,有一些进展但又遇到了新的问题。 先总结一下之前的问题: **问题1:** 打开了golang的uprobe,有EbpfTypeGoHttp2Uprobe类型的数据,但是**没有EbpfTypeGoHttp2UprobeDATA的数据**,后面有详细流程。 **问题2,3,4:** 需求是解析grpc的body,因为proto文件太多几百个,通过OnCheckPayload无法区分使用哪个proto文件去UnmarshalVT解析payload,然后通过uprobe后的payload数据和不uprobe的payload数据不一样,不是很了解这里的区别差异,后面会有详细内容。 问题5:通过ip和端口过滤payload是一个办法,我们实际场景会存在端口相同的微服务(已吐槽设计不规范),所以也很难有效过滤,不过也是一个好办法。 新的进展:启用uprobe,稍微修改go_http2_uprobe.go代码,执行。 ```yaml agent_group_id: g-b085d39249 wasm_plugins: - wasm # agent-group-config 中加入了golang的uprobe配置 static_config: ebpf: uprobe-process-name-regexs: golang: "^show.*|^devopssvr.*" # 正则过滤规则 ``` agent端生效:golang uprobe生效log,日志太多,截取一个服务的完整log ``` [2024-08-07...

@TomatoMr 感谢您的回复,我又做了一些新的尝试 回复上面内容 **问题1**:这个非常有可能是一个官方的bug,受限时间有限,我看看后续能否补充一下 **问题2,3**:相对于使用uprobe解包,我翻看了之前[腾讯游戏的实践文章](https://www.deepflow.io/blog/zh/059-tencent-games-achieves-zero-code-observability%20-based-on-deepflow/index.html),给了我启发,将关键内容放到gRPC的header中,然后再通过新版本的特性,`static_config.l7-protocol-advanced-features.extra-log-fields.http2` 去进行解析,而且可以不使用wasm的方式采集成功,并且在ck表中可以查到自定义的内容,但是此时有遇到了奇怪的问题,我又开启了uprobe wasm插件,但却无法捕获到header自定义头,tcpdump在pod上抓包分析是有的,这里很奇怪,目前看来也可能是官方的一个bug。 **问题4**: 这有点难度,尽管wasm没有报错,目前我使用vtprotobuf还没有办法成功解析内容,message内容是空的,code一直都是0(int变量默认值),很明显解析没成功,这个地方也不是很好排障定位到底代码哪里写的有问题,后续有时间计划弄个脱敏的服务在k8s上验证,这样可以开源出来给你们验证。 新的想法和思路: **1.解析gRPC**:换成将body的部分`code`和`message`内容插入到header(metadata),然后通过新的特性自动采集,优点:官方功能支持,效果快,应用改动成本低 **缺点:** 返回内容请求会变大,有些服务的resp的data是需要保留的,特殊隧道协议链路断开,自定义的头需要从body中采集,改header的方案不行。 综合采用改header的方案,对于有差异的再研究wasm去适配私有协议。

你可以尝试将traceId放到header中使用x-request-id 中透传相同的id,然后deepflow中的x-request-id-0就会带上,trace的时候就会有上下文的关联,尽管看了很多资料,不确定是否是一个稳定可靠的方案,但是经过测试链路是关联起来了。

@gbling A(x-request-id=123456) --> B(x-request-id:123456) --> C(x-request-id:123456),可以看下deepflow论文的部分,你用x-request-id就行,要不然用wasm实现协议解析适配也行(不推荐麻烦),如果你只实现链路追踪x-request-id简单做就行了

@gbling 文章来源都有:https://www.deepflow.io/blog/zh/053-high-performance-decoding-of-http2-compressed-headers-using-ebpf-kprobe/ ![image](https://github.com/user-attachments/assets/5760983d-175c-4d80-b3eb-2bbf50c073f1) 6.4之前都不支持这个功能

@gbling http1.1 可以用wasm插件解析去实现,不需要用到这个特性

@gbling 你多看看文档,文档里面都写了 ``` ## Configuration to extract the customized header fields of HTTP, HTTP2, GRPC protocol etc #extra-log-fields: ## for example: ## http: ## - field-name: "user-agent" ## - field-name:...

uprobe插桩其实并不容易,建议你改服务的代码比搞这个uprobe来的快,而且官方搞了那么久,也没说很多语言适配,不同的版本等等,是基于kprobe做的协议采集,是存在很多落地难度的,如果你想搞可以自己写个ebpf程序跑一下。

@taloric v6.5版本能否同步修复一下,https://github.com/deepflowio/deepflow-app/pull/301