全部文档

零侵入采集原理

Diting 不修改应用代码,也不往应用进程里注入探针。信号来自三个地方:内核、网络协议、运行时本身。

两条采集通道

  • tc_ebpf:在网络层抓包,适合吞吐大的场景
  • socket_syscall:在系统调用层抓取,能拿到进程与 socket 的对应关系

两条通道同时开启时,agent 会按 socket claim 去重,避免同一份 L7 数据被记两次。任意一条不可用时,会自动回退到另一条。

协议解析

L7 解析在 agent 本地完成,支持 18 个协议族:

  • HTTP/1、HTTP/2、gRPC
  • MySQL、PostgreSQL、Oracle、ClickHouse、MongoDB
  • Redis、Kafka、RocketMQ、AMQP、MQTT、ZooKeeper
  • Dubbo、S3、DNS、TLS

解析结果只带结构化字段,原始 payload 不必离开主机。

TLS 明文

Go 与 OpenSSL 的 TLS 明文通过 uprobe 读取,默认按需开启,带资源上限。老内核上只支持经典的 SSL_read / SSL_write,_ex 钩子会标记为跳过。

容器身份

通过 cgroup 识别容器:

  • cgroup v2
  • cgroup v1
  • 混合模式
  • Docker 与 kubepods 的目录布局

容器 ID、Pod、命名空间会写进每条数据,用于后续关联。

前端会话

会话回放不需要前端改代码。agent 在 nginx 或容器层注入 RUM 脚本,覆盖率可以在控制台按应用查看。

边界

  • 强隔离容器运行时(gVisor、Kata)不在支持范围
  • 没有 root 权限的主机只能拿到部分能力
  • 应用内部的业务事件,如果只能通过改代码产生,Diting 不会替你造

降级

任何一项能力失败,agent 会继续运行,并在心跳和 /kernel-capabilities 里说明原因。这条规则适用于所有采集通道。

相关文档:数据模型与信号、主机接入与内核要求。