接下来我们依次看看这些新特性。

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.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
    2
    3
    4
    5
    6
    7
    static_config:
    l7-protocol-advanced-features:
    extra-log-fields:
    http: # HTTP, HTTP2
    - field-name: "user-agent"
    - field-name: "cookie"
    # sub-field-names: ["SESSION", "PATH"] # 未来版本支持

    按上述配置里配置之后,你可以在调用日志中通过 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 ,体验零侵扰、全栈的可观测性。