配置
延迟监控
让节点定时向一个目标发起 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(最省事)。先看现在的值:
shsysctl net.ipv4.ping_group_range id monitor-agent1 0就是谁都不允许(不少系统的内核默认值,实测一台 Ubuntu 云主机就是如此)。把 agent 的 gid 放进去,只放它一个:
shsysctl -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这是按网络命名空间生效的: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 可能被限速或丢弃,一次超时不代表配置有问题。