AutoTracing - 支持 bRPC 协议,增强 gRPC、Dubbo、HTTP 协议
2024-06-13AutoTracing 在 v6.5 中对 RPC/HTTP 类型的协议进行了增强,包括:
- 新增支持 bRPC 协议
- 增强 gRPC 协议,支持 Streaming 模式
- 增强 Dubbo 协议,支持 Kyro 序列化
- 增强 HTTP/HTTP2 协议,支持自定义采集 HTTP 头
接下来我们依次看看这些新特性。
0x0: 支持 bRPC 协议
Apache bRPC 是用 C++ 语言编写的工业级 RPC 框架,常用于搜索、存储、机器学习、广告、推荐等高性能系统。
在 v6.5 中,deepflow-agent 默认会采集 bRPC 协议的如下字段:
- service_name
- method_name
- correlation_id
- status_code
- error_code
- error_text
- log_id
详细的字段映射关系请参考 DeepFlow 文档。
0x1: 支持 gRPC Streaming 模式
感谢 ZhuoZhuoCrayon@Tencent
的 FR #6042。在 gRPC 的单次服务调用中,客户端和服务端在 HTTP/2 连接中使用相同的流 ID(Stream Identifier)进行通信,即在两端之间,帧(Frame)所携带的流 ID 相同。gRPC 支持的 RPC 类型有以下几种(RPC life cycle):
- Unary RPC:最简单的 RPC 类型,客户端请求,服务端应答
- Server Streaming RPC:服务端返回信息流(多个 DATA 帧)以响应客户端请求
- Client Streaming RPC:客户端向服务端发送信息流(多个 DATA 帧),服务端通常在接收到所有客户端请求后,以一条消息进行响应
- Bidirectional Streaming RPC:由客户端发起调用,客户端和服务端可以按任意顺序读写消息,在这种模式下,可以是服务端接收到客户端所有消息后再写入消息,或者基于一答一应的模式进行处理。
在此之前,DeepFlow 仅支持 Unary RPC。在腾讯的业务场景中涉及到了所有四类 RPC,在 FR #6042 的推动下,我们支持了剩余三种 Streaming 模式的 RPC。
v6.5 支持 gRPC Streaming 模式
相比 v6.4,支持 gRPC Streaming 带来的好处包括:
- 对于 Server Streaming RPC 或 Bidirectional Streaming RPC,DeepFlow 的调用日志能体现整个调用的结束时间和耗时
- 对于三种 Streaming RPC,DeepFlow 增加了
_DATA
和_HEADER
类型的调用日志,支持呈现在分布式追踪结果中以表征请求、响应发生的时间
0x2: 支持 Kyro 序列化的 Dubbo 协议
v6.5 发布后,deepflow-agent 可解析的 Dubbo 协议序列化类型有:
- Hessian
- Kyro 新增支持
关于 Dubbo 协议的序列化方式,可参考 Apache Dubbo 文档。
0x3: 支持自定义采集 HTTP/HTTP2 头字段
DeepFlow 默认只会采集关键的 HTTP/HTTP2 头部字段。当你希望获取特定头部字段时,以往的做法是使用 WebAssembly 插件来进行协议解析增强。现在我们提供了一种更为便捷的方式,支持配置 l7-protocol-advanced-features
.extra-log-fields
即可完成采集。
1 | static_config: |
按上述配置里配置之后,你可以在调用日志中通过 attribute
.user_agent
和 attribute.cookie
查看这些字段。
未来,我们也有计划持续迭代此项能力,欢迎大家提交 Feature Request。可能的演进包括:
- 支持提取 HTTP URL 中的参数
- 支持配置
sub-field-names
从复合字段中提取子字段的值
0x4: 什么是 DeepFlow
DeepFlow 是云杉网络开发的一款可观测性产品,旨在为复杂的云原生及 AI 应用提供深度可观测性。DeepFlow 基于 eBPF
实现了应用性能指标、分布式追踪、持续性能剖析等观测信号的零侵扰(Zero Code
)采集,并结合智能标签(SmartEncoding
)技术实现了所有观测信号的全栈(Full Stack
)关联和高效存取。使用 DeepFlow,可以让云原生及 AI 应用自动具有深度可观测性,从而消除开发者不断插桩的沉重负担,并为 DevOps/SRE 团队提供从代码到基础设施的监控及诊断能力。
GitHub 地址:https://github.com/deepflowio/deepflow
访问 DeepFlow Demo,体验零侵扰、全栈的可观测性。