使用 prometheus 优化 WireGuard 监控与可视化
2025-03-06 tech prometheus wireguard grafana 7 mins 2499 字
最近心血来潮把wireguard的监控搬到 prometheus 上来,在 Grafana 中动态展示 WireGuard 网络的健康状态,如果某条断联了,由prometheus进行告警,于是便有了这篇文章。
1. WireGuard Exporter 安装
参考:MindFlavor/prometheus_wireguard_exporter,为每一个节点安装exporter:
version: '2.4'
services:
wgexporter:
image: mindflavor/prometheus-wireguard-exporter
network_mode: host
container_name: wg-exporter
cap_add:
- NET_ADMIN
privileged: true
command: ["--prepend_sudo", "true"]
environment:
- PROMETHEUS_WIREGUARD_EXPORTER_VERBOSE_ENABLED=true
- PROMETHEUS_WIREGUARD_EXPORTER_PORT=12386
restart: always
相关的配置参考github即可。我是用了两个配置:
- PROMETHEUS_WIREGUARD_EXPORTER_VERBOSE_ENABLED,详细模式
- PROMETHEUS_WIREGUARD_EXPORTER_PORT,自定义端口
2. Prometheus 采集 WireGuard 状态
在 Prometheus 的配置文件 prometheus.yml 中添加 scrape_configs 来收集 WireGuard 的指标:
scrape_configs:
- job_name: 'wireguard_exporter'
static_configs:
- targets:
- 'wg-exporter.nanjing1.local:12386'
- 'wg-exporter.chengdu2.local:12386'
relabel_configs:
- source_labels: [__address__]
regex: 'wg-exporter\.([^.]+)\..*'
target_label: src_peer
metric_relabel_configs:
- source_labels: [allowed_ips]
regex: .*100\.100\.100\.100/32.*
action: replace
target_label: target_peer
replacement: OnePlus
此配置帮助我从每个节点的 instance 中提取出 nanjing1 或 chengdu2 作为新的 src_peer 标签,从结果中将 100.100.100.100 的节点标记为OnePlus节点,增加可读性。
这里涉及到了 relabel_configs
和 metric_relabel_configs
两个配置项,能够帮助我们灵活地重命名、修改、删除或过滤标签以及指标。常用于数据抓取(scrape_configs)和指标数据的处理(metric_relabel_configs)
- relabel_configs:当我们要修改或过滤抓取目标时使用。例如,改变目标实例的名称,或选择性地抓取某些目标。
- source_labels:一个标签列表,Prometheus 会从这些标签中提取信息进行后续处理。它的内容可以是任何来自目标的标签。
- target_label:表示你希望修改或创建的目标标签的名称。如果你想修改现有的标签值,指定该标签的名称即可。如果你想添加新的标签,则可以指定新的标签名称。
- regex:一个正则表达式,用来匹配标签的值。如果正则表达式匹配成功,就可以根据 replacement 替换值或执行其他操作。
- replacement:如果 regex 匹配成功,可以用 replacement 字符串替换标签值。如果 replacement 为一个空字符串,则会删除匹配的标签
- metric_relabel_configs:已经抓取了指标数据,但想对这些数据进行修改或过滤时使用。例如,修改指标标签的值,重命名指标,或删除一些不需要的指标。
- source_labels:一个标签列表,类似于 relabel_configs,它指定要修改的标签。
- target_label:希望修改或添加的指标标签的名称。
- regex:用于匹配标签值的正则表达式。
- replacement:当 regex 匹配成功时,用来替换标签值或创建新的标签。
- action:定义如何处理匹配的指标,可以是:
- replace:替换标签值。
- keep:保留该指标数据。
- drop:丢弃该指标数据。
3. Grafana 可视化
-
可视化握手时间
(time() - wireguard_latest_handshake_seconds{src_peer!="",target_peer!=""})
-
可视化连接速率
irate(wireguard_sent_bytes_total{node=~"a1|b1",target_peer=~"a2|b2"}[$interval])