3. 网络观测核心概念:网络延迟、吞吐量、丢包率、连接跟踪、流表
在构建 eBPF 网络观测体系时,必须精确理解五个核心度量与状态管理概念。它们是诊断发布窗口查询延迟回归的基石。下面逐一拆解其定义、度量方式及在 eBPF 观测中的映射关系。
3.1 网络延迟 (Latency)
网络延迟指数据包从源端发出到目标端接收所经过的总时间。在 eBPF 观测中,我们通常关注 往返时间 (RTT) 和 服务端处理时间 两个维度。
| 延迟类型 | 定义 | eBPF 观测点 | 回归影响 |
|---|---|---|---|
| 网络 RTT | 数据包从发送到收到 ACK 的时间 | tc/egress + tracepoint/tcp/destroy_sock | 查询响应时间基线偏移 |
| 内核处理延迟 | 数据包在协议栈内的排队与处理耗时 | kprobe/tcp_v4_do_rcv | CPU 软中断升高导致抖动 |
| 应用延迟 | 从 socket 读取到业务逻辑返回的时间 | uprobe/uretprobe 挂载查询函数 | 制品库查询接口变慢 |
观测要点: 在发布窗口内,应重点监控 P99 延迟的突变。eBPF 可以通过 BPF_MAP_TYPE_HASH 按五元组聚合,实时输出延迟直方图,避免传统 tcpdump 全量抓包带来的性能开销。
3.2 吞吐量 (Throughput)
吞吐量衡量单位时间内成功传输的数据量。在制品库发布场景中,吞吐量下降直接导致查询延迟上升。
- bps (bits per second):链路层吞吐,eBPF 通过
BPF_MAP_TYPE_PERCPU_ARRAY在 XDP/tc 层累加字节数。 - pps (packets per second):包转发率,小包场景下的关键指标,eBPF 可在驱动层直接计数。
- ops (operations per second):应用层吞吐,如每秒查询次数 (QPS),通过 uprobe 挂载查询处理函数统计。
回归关联: 吞吐量骤降通常伴随延迟飙升。eBPF 可以同时采集吞吐与延迟,在
BPF_MAP_TYPE_HASH 中建立关联映射,快速定位是网络瓶颈还是应用瓶颈。
3.3 丢包率 (Packet Loss)
丢包率是导致查询延迟回归的常见根因。eBPF 提供了比传统 netstat -s 更细粒度的丢包观测能力。
| 丢包阶段 | 典型原因 | eBPF 探测方法 |
|---|---|---|
| 驱动层 | 环形缓冲区满 | XDP 程序返回 XDP_DROP 时计数 |
| TC 层 | qdisc 队列溢出 | tracepoint/net:net_dev_queue |
| IP 层 | 路由查找失败 | kprobe/ip_rcv_finish 返回值检查 |
| TCP 层 | 接收窗口满、重传超时 | tracepoint/tcp:tcp_retransmit_skb |
| Socket 层 | 接收缓冲区满 | kprobe/sock_rcvmsg 丢弃计数 |
回归检查重点: 发布窗口内若观察到 TCP 重传率 > 2% 或任意层丢包率 > 0.1%,应立即关联延迟指标。eBPF 可以按连接维度输出丢包计数器,避免全局统计掩盖单连接问题。
3.4 连接跟踪 (Connection Tracking)
连接跟踪是网络状态管理的核心机制,记录所有活跃连接的五元组及状态。在 eBPF 观测中,连接跟踪数据直接决定流表聚合的准确性。
3.5 流表 (Flow Table)
流表是网络观测中用于聚合和存储流记录的数据结构。eBPF 程序通常使用 BPF_MAP_TYPE_HASH 或 BPF_MAP_TYPE_LRU_HASH 实现流表,按五元组聚合统计信息。
| 流表属性 | 说明 | eBPF 实现方式 |
|---|---|---|
| Key | 五元组 (src_ip, dst_ip, src_port, dst_port, proto) | struct flow_key { __u32 saddr; __u32 daddr; __u16 sport; __u16 dport; __u8 proto; } |
| Value | 统计计数器 (包数、字节数、时间戳、延迟直方图) | struct flow_metrics { __u64 packets; __u64 bytes; __u64 ts_first; __u64 ts_last; __u64 latency_hist[10]; } |
| 老化策略 | 超时自动删除,防止内存泄漏 | BPF_MAP_TYPE_LRU_HASH 自动驱逐最久未使用条目 |
| 用户态读取 | 周期性 dump 或事件推送 | perf_event_array 或 ring_buffer 输出流记录 |
回归检查实践: 在制品库发布窗口,流表条目数会急剧增长。eBPF 流表应设置合理的最大容量(如 65536 条),并监控
map_oom_count 指标。若流表溢出,将导致新流无法创建,查询请求被静默丢弃,延迟直接飙升到超时阈值。
3.6 五维指标关联分析
单一指标无法完整描述网络健康状态。在回归检查中,必须建立五维指标的关联分析模型:
- 延迟升高 + 吞吐下降 + 丢包增加 → 网络链路拥塞或硬件故障
- 延迟升高 + 吞吐不变 + 丢包正常 → 应用层处理变慢(如数据库查询变慢)
- 延迟升高 + 连接跟踪表满 + 流表溢出 → 并发连接数超过系统容量
- 延迟抖动 + 重传率升高 + 吞吐波动 → 网络路径不稳定或中间设备引入抖动
eBPF 优势: 传统工具(netstat、ss、tcpdump)只能提供全局或单点视图。eBPF 可以在内核中同时采集延迟、吞吐、丢包、连接状态和流表数据,通过
BPF_MAP_TYPE_HASH 按连接维度关联,输出结构化的观测事件,直接用于回归检测引擎。