本文目录导读:

- 方案一:Prometheus + Blackbox Exporter(推荐,适合多节点)
- 方案二:Telegraf + InfluxDB + QuickQ(适合已有 InfluxDB)
- 关键注意事项
- 总结步骤
通过 QuickQ 监控 WireGuard 全网延迟,通常需要结合 ICMP Ping、TCP 端口探测 或 自定义脚本 来实现,由于 QuickQ 本身是一个轻量级的数据可视化工具(类似 Grafana),它不具备网络探测功能,因此你需要依赖 Prometheus + Blackbox Exporter 或 Telegraf 等数据采集器来获取延迟数据,再通过 QuickQ 展示。
以下是两种主流实现方案,推荐使用方案一(Prometheus + Blackbox Exporter)。
Prometheus + Blackbox Exporter(推荐,适合多节点)
此方案通过 ICMP ping 或 TCP 连接测试 WireGuard 对端延迟,并将数据存储到 Prometheus,最后通过 QuickQ 连接 Prometheus 数据源进行可视化。
部署 Blackbox Exporter
在 QuickQ 服务器或任意一台能访问 WireGuard 网络的机器 上部署。
-
Docker 部署(推荐):
docker run -d --name blackbox_exporter -p 9115:9115 \ -v /path/to/blackbox.yml:/config/blackbox.yml \ prom/blackbox-exporter --config.file=/config/blackbox.yml
-
配置文件
blackbox.yml示例(启用 ICMP 和 TCP 探测):modules: icmp: prober: icmp timeout: 5s icmp: preferred_ip_protocol: "ip4" tcp_connect: prober: tcp timeout: 5s tcp: preferred_ip_protocol: "ip4"
配置 Prometheus
在 Prometheus 的 prometheus.yml 中添加 WireGuard 节点的探测任务。
scrape_configs:
- job_name: 'wireguard_ping'
metrics_path: /probe
params:
module: [icmp] # 使用 ICMP 模块
static_configs:
- targets:
- 10.0.0.1 # WireGuard 对端 IP
- 10.0.0.2 # WireGuard 对端 IP
- fd00::1 # IPv6 地址
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.1.100:9115 # Blackbox Exporter 地址
- 参数说明:
targets:填写 WireGuard 隧道 IP(非公网 IP),确保 Blackbox Exporter 能通过 WG 隧道访问这些 IP。replacement:替换为你的 Blackbox Exporter 实际地址和端口。
启动 Prometheus 并验证
- 重启 Prometheus:
systemctl restart prometheus或docker restart prometheus - 检查 Targets 状态:访问
http://prometheus:9090/targets,查看wireguard_ping任务是否 UP。 - 查看延迟指标:在 Prometheus 查询
probe_duration_seconds(响应时间)和probe_success(成功/失败)。
QuickQ 数据源与面板配置
- 添加 Prometheus 数据源:在 QuickQ -> 数据源 -> Add data source -> Prometheus,填入 Prometheus 地址(如
http://192.168.1.100:9090)。 - 创建 Dashboard:
- 添加一个 Stat 面板,展示每个节点的平均延迟:
- 查询:
avg(probe_duration_seconds{job="wireguard_ping"}) by (instance) - 单位:
s(秒)
- 查询:
- 添加一个 Table 面板,显示所有节点的延迟、丢包率:
- 查询:
probe_duration_seconds{job="wireguard_ping"},可加上topk(10, ...)限制。
- 查询:
- 添加一个 Alert 面板,对延迟过高或无响应(
probe_success == 0)的节点告警。
- 添加一个 Stat 面板,展示每个节点的平均延迟:
Telegraf + InfluxDB + QuickQ(适合已有 InfluxDB)
如果你已使用 Telegraf 收集网络数据,可通过 ping 插件 直接探测 WireGuard 节点。
配置 Telegraf 的 ping 插件
编辑 /etc/telegraf/telegraf.conf,添加以下内容:
[[inputs.ping]] urls = ["10.0.0.1", "10.0.0.2", "fd00::1"] # WireGuard 隧道 IP count = 3 # 每次探测发送的包数 ping_interval = 5.0 # 探测间隔(秒) timeout = 2.0 # 超时(秒) interface = "wg0" # 指定通过 wg0 接口(可选) # 仅统计成功响应 dead_collector = false
- 注意:Telegraf 的 ping 插件需要
root权限(或cap_net_raw),确保 Telegraf 用户有权限执行 ping。
启动 Telegraf 并验证
systemctl restart telegraf # 查看 Logs 确保无错误 journalctl -u telegraf -f
- 测试数据写入 InfluxDB:
curl -G 'http://localhost:8086/query?db=telegraf' --data-urlencode 'q=SELECT * FROM ping LIMIT 5'
QuickQ 数据源与面板配置
- 添加 InfluxDB 数据源:QuickQ -> 数据源 -> Add data source -> InfluxDB,填写数据库名(如
telegraf)。 - 创建延迟面板:
- 选择
ping测量。 - 查询字段:
mean("response_time_ms"),按url分组。 - 单位:
ms。 - 添加
max("response_time_ms")和min("response_time_ms")作为对比。
- 选择
关键注意事项
-
必须通过 WireGuard 隧道 IP 探测:
- 你的探测器(Blackbox Exporter / Telegraf)必须能通过 WireGuard 接口访问对端 IP(
0.0.2),而非公网 IP,否则检测的是公网延迟,不是 WG 隧道延迟。 - 如果探测器和 WG 节点不在同一台机器,需确保探测器的路由表包含 WG 子网,或者探测节点本身是 WireGuard 客户端。
- 你的探测器(Blackbox Exporter / Telegraf)必须能通过 WireGuard 接口访问对端 IP(
-
权限问题:
- ICMP 探测需要
CAP_NET_RAW能力,如果使用 Docker 部署 Blackbox Exporter,建议添加--privileged或--cap-add=NET_RAW。 - Telegraf 需以
root用户运行 ping,或通过setcap cap_net_raw+ep /usr/bin/telegraf赋予能力。
- ICMP 探测需要
-
数据粒度与存储:
- 建议设置合理的 Scrape 间隔(Prometheus 中
scrape_interval: 15s),避免对 WG 节点造成过大压力。 - 对于大量节点(>100),考虑使用
honor_labels: true并降低探测频率。
- 建议设置合理的 Scrape 间隔(Prometheus 中
-
告警配置:
- 在 QuickQ 中设置阈值告警:例如当
probe_duration_seconds > 1或probe_success == 0时触发通知(邮件、Webhook 等)。
- 在 QuickQ 中设置阈值告警:例如当
总结步骤
- 确定 WireGuard 隧道 IP 列表。
- 部署 Blackbox Exporter(方案一)或 Telegraf(方案二)作为探测工具。
- 配置 Prometheus 或 InfluxDB 存储延迟数据。
- 在 QuickQ 中添加对应的数据源,创建 Dashboard 和面板。
- 验证显示是否包含所有 WireGuard 节点的实时延迟和丢包率。
推荐使用 方案一(Prometheus + Blackbox Exporter),因为它对 ICMP/TCP 探测支持更好,且 Prometheus 作为时序数据库在 QuickQ 中兼容性更佳。