PROJECT ID · PRJ-003
NETMON PROBE:主动探测与告警基座
把"用户报障"变成"监控先发现":每个机架一个探针点,主动测量到关键目标的时延分布,而不是等某个接口丢包率越线。
目标
原来的监控只有两种数据:接口计数器和 ICMP 通断。这两样都是结果—— 它们告警的时候,问题已经发生并且已经在影响业务了。
这个项目要做的是第三种:从一个机架的真实位置出发,主动测量到关键目标的 时延分布。平均时延好看而 P99 已经不可用,这种情况只有看分布才能发现。
采集链路
上图是当前的采集链路。探针在每个机架上各一个,测量结果先到采集器,再进时序库; 只有越过阈值的才变成告警。
为什么用 eBPF 而不是 ping
ping 测的是 ICMP 的处理路径,与业务流量的路径在多数设备上是不同队列。
要测业务真的怎么走,只能在数据包上量:
# 探针挂载点:按目标地址取样,只读,不改包
tc filter show dev eth0 egress
# 每个流保留 P50/P99 与重传计数,聚合后上报
代价是需要较新的内核,且探针本身要能读到网卡。好处是测得准—— 这个项目的第一个结论就是”网络没问题”的那些告警,大多是 ICMP 路径没问题。
部署
# 单机起停(生产用 systemd unit,同一条命令)
netmon-probe --config /etc/netmon/probe.toml --rack rack-01
netmon-probe --self-test # 打印本机到各目标的当前分位数,不写库
阈值按机架分别配置。三个机架的物理路径不同,用一套阈值只会让其中一个机架 长期误报——这是上线初期最主要的告警噪音来源。
已知限制
- 只覆盖三个机架。 其余机架没有探针点,也就没有这层数据。
- 时序库保留 90 天。 更长时间的对比需要另外归档,目前没做。
- 探针是被动的旁观者。 它不参与转发,探针本身挂掉不会有任何现象, 只能靠它自己的心跳上报发现——这条心跳是必须的,不是可选的。