DeepFlow 开源项目旨在为复杂的云原生和 AI 应用提供深度可观测性。
DeepFlow 通过 eBPF 实现了零代码数据采集,涵盖指标、分布式追踪、请求日志和函数分析,并进一步集成了 SmartEncoding,实现全栈关联和高效访问所有可观测数据。借助 DeepFlow,云原生和 AI 应用自动获得深度可观测性,免去了开发者持续在代码中埋点的繁重负担,为 DevOps/SRE 团队提供从代码到基础设施的监控和诊断能力。
假设您对 eBPF 有基本了解,eBPF 是一种通过在沙箱中运行程序来扩展内核功能的安全高效技术,相较于传统修改内核源码和编写内核模块的方法是一项革命性创新。eBPF 程序是事件驱动的,当内核或用户程序经过 eBPF Hook 时,会执行加载在该 Hook 点的对应 eBPF 程序。
Linux 内核预定义了一系列常用的 Hook 点,也可以通过 kprobe 和 uprobe 技术动态添加内核和应用程序的自定义 Hook 点。
得益于即时编译(JIT)技术,eBPF 代码的执行效率可媲美原生内核代码和内核模块。
得益于验证机制,eBPF 代码运行安全,不会导致内核崩溃或进入死循环。
DeepFlow 由两个组件组成,Agent 和 Server。Agent 运行在每个 K8s 节点、传统主机和云主机上,负责采集主机上所有应用进程的 AutoMetrics 和 AutoTracing 数据。
Server 运行在 K8s 集群中,提供 Agent 管理、标签注入、数据摄取和查询服务。
DeepFlow 中的 eBPF 功能(AutoTracing、AutoProfiling)对内核版本有以下要求:
| 架构 | 发行版 | 内核版本 | kprobe | Golang uprobe | OpenSSL uprobe | perf |
|---|---|---|---|---|---|---|
| X86 | CentOS 7.9 | 3.10.0 1 | Y | Y 2 | Y 2 | Y |
| RedHat 7.6 | 3.10.0 1 | Y | Y 2 | Y 2 | Y | |
| * | 4.9-4.13 | Y | ||||
| 4.14 3 | Y | Y 2 | Y | |||
| 4.15 | Y | Y 2 | Y | |||
| 4.16 | Y | Y | Y | |||
| 4.17+ | Y | Y | Y | Y | ||
| ARM | CentOS 8 | 4.18 | Y | Y | Y | Y |
| EulerOS | 5.10+ | Y | Y | Y | Y | |
| KylinOS V10 SP2 | 4.19.90-25.24+ | Y | Y | Y | Y | |
| KylinOS V10 SP3 | 4.19.90-52.24+ | Y | Y | Y | Y | |
| 其他发行版 | 5.8+ | Y | Y | Y | Y |
内核版本补充说明:
RedHat 声明:> Red Hat Enterprise Linux 7.6 中的 eBPF 作为技术预览提供,因此不具备完整支持,不适合生产环境部署。其主要目的是扩大曝光度,未来可能转为完全支持。Red Hat Enterprise Linux 7.6 中的 eBPF 仅启用用于追踪,允许将 eBPF 程序附加到探针、tracepoint 和 perf 事件。
DeepFlow 中的 MySQL 和 ClickHouse 需要由 Storage Class 提供的持久卷存储。
有关存储配置的更多信息,请参阅存储文档。
访问 Customer Portal 下载 DeepFlow 软件包。
如果您无法访问 Customer Portal,请联系技术支持。
使用 violet 工具将软件包发布到平台。
有关该工具的详细使用说明,请参阅CLI。
进入 管理员 > Marketplace > 集群插件。
在插件列表中搜索“Alauda Container Platform Observability with DeepFlow”。
点击 安装,打开安装配置页面。
根据需要填写配置参数。各参数详细说明见下表。
等待插件状态变为 已安装。
表格:配置参数
| 参数 | 可选 | 说明 |
|---|---|---|
| Replicas | 否 | ClickHouse 服务器和 DeepFlow 服务器的副本数。建议设置为大于等于 3 的奇数,以保证高可用性。 |
| Storage Class | 是 | 用于创建 MySQL 和 ClickHouse 持久卷的 Storage Class。如果未设置,则使用默认 Storage Class。 |
| MySQL Storage Size | 否 | MySQL 持久卷大小。 |
| ClickHouse Storage Size | 否 | ClickHouse 存储大小。 |
| ClickHouse Data Storage Size | 否 | ClickHouse 数据存储大小。 |
| Username | 否 | Grafana Web 控制台用户名。 |
| Password | 否 | Grafana Web 控制台密码。强烈建议首次登录后修改该密码。 |
| Confirm Password | 否 | 确认 Grafana Web 控制台密码。 |
| Ingress Class Name | 是 | 用于创建 Grafana Web 控制台 Ingress 的 Ingress Class 名称。如果未设置,则使用默认 Ingress Class。 |
| Ingress Path | 否 | Grafana Web 控制台的 Ingress 服务路径。 |
| Ingress TLS Secret Name | 是 | Grafana Web 控制台 Ingress 使用的 TLS Secret 名称。 |
| Ingress Hosts | 是 | Grafana Web 控制台 Ingress 使用的主机列表。 |
| Agent Group Configuration | 否 | 默认 DeepFlow agent 组的配置。 |
您可以通过安装时配置的 Ingress 中指定的主机和服务路径访问 Grafana Web UI,使用用户名和密码登录。
强烈建议首次登录后修改密码。
DeepFlow 提供 Grafana 监控面板,用于可视化网络和应用性能指标,以及基于 eBPF 技术的自动追踪功能。
要访问 DeepFlow 的 Grafana 监控面板,需从 Marketplace 安装 DeepFlow 插件。安装完成后,可通过安装时配置的 Ingress 访问 Grafana Web UI。访问 Grafana Web UI 需要登录凭据。
有关 Grafana 监控面板的更多使用信息,请参阅Grafana 文档。
登录 Grafana Web UI 需要以下信息,这些信息在安装 DeepFlow 插件时配置:
首次登录后,强烈建议出于安全考虑修改密码。
在 Grafana Web UI 中导航至 监控面板 部分,访问 DeepFlow 提供的各种预配置监控面板。监控面板分布在两个文件夹:DeepFlow System 和 DeepFlow Template。
该文件夹包含名为 DeepFlow Agent 的监控面板,展示部署了 DeepFlow agent 的节点状态和性能。
关于网络可观测性,包含以下指标:
| 指标 | 面板 |
|---|---|
| 所有选定 Agent 的带宽统计 | 带宽 |
| 按平均带宽排序的 Top <agent, signal> | |
| 按总带宽排序的 Top agents | |
| NIC 内核计数器(仅供参考) | 接口丢包 |
| 接口 bps | |
| 接口 pps | |
| [dispatcher] AF_PACKET/cBPF 收集器 | 每秒数据包数 |
| 🔥[注意] 内核数据包丢弃(Agent 无法处理) | |
| 内核时间戳倒退 > 1ms(仅供参考) | |
| TCP 性能量化 | 忽略的异常 TCP 标志包 |
| TCP 重传不合格包 | |
| 未识别的 L7 协议包 |
注意:标有 🔥 的面板表示可能存在需要关注的问题。
该文件夹包含多种监控面板,包括网络/L4 指标、应用/L7 指标和自动追踪面板。
以下是与网络可观测性相关的监控面板:
| 目录 | 监控面板 | 说明 | 指标/面板 |
|---|---|---|---|
| 网络/L4 | 网络 - 云主机 | 提供集群主机的网络/L4 指标,包括带宽、数据包、流量和 TCP 性能。 | 吞吐量 (bps) |
| 重传率 | |||
| TCP 连接建立失败率 | |||
| TCP 连接建立延迟 | |||
| 网络 - 云主机拓扑图 | 可视化集群主机的网络拓扑,展示它们之间的连接和流量。 | 云主机拓扑图 | |
| 吞吐量 (bps) | |||
| TCP 重传率 (%) | |||
| TCP 连接建立失败率 (%) | |||
| TCP 连接建立延迟 (ms) | |||
| 网络 - K8s Pod | 提供 Kubernetes Pod 的网络/L4 指标,包括带宽、数据包、流量和 TCP 性能。 | 吞吐量 (bps) | |
| 重传率 | |||
| TCP 连接建立失败率 | |||
| TCP 连接建立延迟 | |||
| 网络 - K8s Pod 拓扑图 | 可视化 Kubernetes Pod 的网络拓扑,展示它们之间的连接和流量。 | Pod 拓扑图 | |
| 吞吐量 (bps) | |||
| TCP 重传率 (%) | |||
| TCP 连接建立失败率 (%) | |||
| TCP 连接建立延迟 (ms) | |||
| 网络 - 流日志 | 展示 Kubernetes Pod 网络流量的详细流日志,包括源/目的 IP、端口、协议等。 | 汇总计数 | |
| 错误计数 | |||
| TCP 连接建立延迟分布 | |||
| TCP 数据延迟分布 | |||
| 流日志 | |||
| 网络 - 流日志 - 云端 | 展示集群主机网络流量的详细流日志,包括源/目的 IP、端口、协议等。 | 汇总计数 | |
| 错误计数 | |||
| TCP 连接建立延迟分布 | |||
| TCP 数据延迟分布 | |||
| 流日志 | |||
| 应用/L7 | 应用 - 云主机 | 提供集群主机的应用/L7 指标,包括请求率、错误率和各种协议(HTTP、DNS、MySQL、Redis、MongoDB)的延迟。 | 请求数 |
| 服务器错误 | |||
| 延迟 | |||
| 应用 - 云主机拓扑图 | 可视化集群主机的应用拓扑,展示不同应用之间的连接和流量。 | 云主机拓扑图 | |
| 请求数 | |||
| 服务器错误 | |||
| 延迟 | |||
| 应用 - K8s Pod | 提供 Kubernetes Pod 的应用/L7 指标,包括请求率、错误率和各种协议(HTTP、DNS、MySQL、Redis、MongoDB)的延迟。 | 请求数 | |
| 服务器错误 | |||
| 延迟 | |||
| 应用 - K8s Pod 拓扑图 | 可视化 Kubernetes Pod 的应用拓扑,展示不同应用之间的连接和流量。 | Pod 拓扑图 | |
| 请求数 | |||
| 服务器错误 | |||
| 延迟 | |||
| 应用 - 请求日志 | 展示 Kubernetes Pod 中运行的应用的详细请求日志,包括源/目的 IP、URL、响应码等。 | 汇总计数 | |
| 错误计数 | |||
| 延迟直方图 | |||
| 请求日志 | |||
| 应用 - 请求日志 - 云端 | 展示主机网络中运行的应用的详细请求日志,包括源/目的 IP、URL、响应码等。 | 汇总计数 | |
| 错误计数 | |||
| 延迟直方图 | |||
| 请求日志 | |||
| 应用 - K8s Ingress | 提供 Kubernetes Ingress 资源的应用/L7 指标,包括 HTTP 流量的请求率、错误率和延迟。 | 上游请求拓扑图 | |
| 请求数 | |||
| 延迟 | |||
| 错误 | |||
| 吞吐量 | |||
| 应用 - DNS 监控 | 监控 DNS 查询和响应,提供 DNS 性能和潜在问题的洞察。 | DNS 拓扑图 | |
| 延迟 | |||
| 错误率 | |||
| 请求数 | |||
| 日志分析 | |||
| 应用 - SQL 监控 - K8S | 监控 Kubernetes Pod 中运行的数据库(如 MySQL、PostgreSQL、MongoDB)的 SQL 查询和性能。 | SQL 拓扑图 | |
| 连接数 | |||
| 延迟 | |||
| 错误 | |||
| 吞吐量 | |||
| SQL 分析 | |||
| 应用 - SQL 监控 - 云端 | 监控主机网络中运行的数据库(如 MySQL、PostgreSQL、MongoDB)的 SQL 查询和性能。 | SQL 拓扑图 | |
| 连接数 | |||
| 延迟 | |||
| 错误 | |||
| 吞吐量 | |||
| SQL 分析 | |||
| 应用 - Redis 监控 - K8S | 监控 Kubernetes Pod 中运行的 Redis 实例的命令和性能。 | Redis 拓扑图 | |
| 连接数 | |||
| 延迟 | |||
| 错误 | |||
| 吞吐量 | |||
| 日志分析 | |||
| 应用 - Redis 监控 - 云端 | 监控主机网络中运行的 Redis 实例的命令和性能。 | Redis 拓扑图 | |
| 连接数 | |||
| 延迟 | |||
| 错误 | |||
| 吞吐量 | |||
| 日志分析 | |||
| 应用 - Dubbo 监控 - K8S | 监控 Kubernetes Pod 中运行的 Dubbo 服务的 RPC 调用和性能。 | Dubbo 拓扑图 | |
| 连接数 | |||
| 延迟 | |||
| 错误 | |||
| 日志分析 | |||
| 自动追踪 | 分布式追踪 | 为 Kubernetes Pod 中运行的应用提供分布式追踪功能,允许追踪请求在各服务和组件间的传播。 | 请求列表 |
| 火焰图 | |||
| 分布式追踪 - 云端 | 为主机网络中运行的应用提供分布式追踪功能,允许追踪请求在各服务和组件间的传播。 | 请求列表 | |
| 火焰图 |
总结,DeepFlow 提供了全面的监控面板,用于监控和分析 Kubernetes Pod 及主机网络中的网络和应用性能。
DeepFlow 的分布式追踪功能允许您追踪应用中请求在各服务和组件间的传播,帮助识别性能瓶颈、理解服务交互并优化应用性能。
在分布式追踪监控面板中,您可以查看每个请求的详细信息,包括:
您可以基于命名空间、工作负载、trace ID、span ID、请求资源和时间范围等多种条件过滤和搜索特定请求。
以下是请求列表示例:

点击某个请求可查看其火焰图中的详细追踪信息:

火焰图由多个条形块组成,每个块代表一个 span。
x 轴表示时间,y 轴表示调用栈深度。span 按调用顺序从上到下显示。
具体说明如下:
A
应用 span,通过 OpenTelemetry 协议采集,覆盖业务代码和框架代码。S
系统 span,通过 eBPF 零侵入采集,覆盖系统调用、应用函数(如 HTTPS)、API Gateway 和服务网格 Sidecar。N
网络 span,通过 BPF 从网络流量采集,覆盖容器网络组件如 iptables、ipvs、OvS 和 LinuxBridge。DeepFlow 支持解析应用注入的唯一请求 ID(例如几乎所有网关都会注入 X-Request-ID),并将不同请求中相同请求 ID 关联为同一条追踪。
要添加您的请求 ID 头进行解析,可以在安装或更新 DeepFlow 插件时修改 DeepFlow agent 组配置。
配置项为 processors.request_log.tag_extraction.tracing_tag.x_request_id,接受一个头名称列表。
示例配置片段:
有关 DeepFlow agent 配置的更多详情,请参阅DeepFlow Agent 配置文档。