Spot Monitor

配置

延迟监控

让节点定时向一个目标发起 TCP 连接,记录握手用时。公开页的节点详情里画出每个监控的延迟曲线和丢包率。

添加监控

延迟页点「添加监控」:

字段说明
名称显示在公开页的图例上
目标地址host:port,如 1.1.1.1:443、example.com:80;IPv6 写成 [2606:4700:4700::1111]:443
间隔5–3600 秒,默认 60
运行节点由哪些节点去连,逐个勾选,或「全选」「清空」「反选」

保存后立即下发到在线的节点,不用重启 agent。每个节点最多运行 64 个监控。

怎么测

  • 每个节点各自连接目标,测的是这台机器到目标的耗时。默认是 TCP 握手时间;选了 ICMP 就是回显往返时间,见下面的 ICMP 延迟检测
  • 目标是域名时先解析再计时,解析用时不算进延迟;一轮里解析超过 900 ms 的,这一轮不记录,也不算丢包
  • 解析出多个地址时依次尝试,最多 3 个,每个等 900 ms。都没有完成握手(超时或被拒绝)记为丢包

探测只做 TCP 与 ICMP 两种,不做 HTTP 探测,见设计哲学。

公开页能看到什么

监控的名称和延迟数据公开可见,目标地址和运行节点只在后台。节点的详情里只出现在它上面运行的监控。

延迟记录和其他历史数据一样按保留天数清理,见数据与备份。

ICMP 延迟检测

探测方式除了默认的 TCP ping,还可以选 ICMP ping(回显请求)。区别:

TCP ping(默认)ICMP ping
测什么与目标端口建立连接要多久目标 IP 层是否可达、往返多久
目标写法host:port,如 1.1.1.1:443只写主机名或 IP,如 1.1.1.1、example.com
需要权限不需要通常需要,见下
常见用途关心某个服务本身(Web、DNS、游戏服)关心主机与线路是否通,不关心服务

选 ICMP 时目标不要带端口:回显没有端口的概念,写了会被 hub 拒绝并提示正确写法。

权限怎么办

agent 以无特权的 monitor-agent 用户运行,所以 ICMP 需要下面之一:

  • 宿主机允许非特权 ICMP(最省事)。先看现在的值:

    sysctl net.ipv4.ping_group_range
    id monitor-agent
    sh

    1 0 就是谁都不允许(不少系统的内核默认值,实测一台 Ubuntu 云主机就是如此)。把 agent 的 gid 放进去,只放它一个:

    sysctl -w net.ipv4.ping_group_range="985 985"          # 985 换成 id monitor-agent 的 gid
    echo 'net.ipv4.ping_group_range = 985 985' > /etc/sysctl.d/99-monitor-agent.conf
    sh

    这是按网络命名空间生效的:agent 若跑在容器里,要改的是那个容器的 ✓

  • 给服务能力:服务单元里加 AmbientCapabilities=CAP_NET_RAW。单元由 install.sh 生成,所以已装过的机器要重装/升级一次才会带上这一行。

  • IPv6 的 ICMP 需要 CAP_NET_RAW:ping_group_range 只管 IPv4。

权限不足不会静默成丢包:原因会显示在延迟页的任务行下方,所以看到 100% 丢包时先看那一行。

先自检,再建任务

在目标机器上直接跑:

monitor-agent --ping 1.1.1.1      # IPv4
monitor-agent --ping ::1          # IPv6 回环,用它确认 v6 路径
sh

打印解析到的地址、尝试方式与往返耗时或确切原因;退出码:成功 0、探测失败 1、用法错误 2。偶尔超时就再跑一次——公网 ICMP 可能被限速或丢弃,一次超时不代表配置有问题。

在 GitHub 上修改这一页最后更新 2026-10-02