ZeroTier 可观测性深度解析:Metrics 导出、日志集成与告警配置实战
ZeroTier 作为一款强大的虚拟网络工具,被广泛用于构建安全的点对点网络。在生产环境中,实现完整的可观测性(Observability)至关重要,包括指标(Metrics)、日志(Logs)和告警(Alerting)。本文详细实战配置 ZeroTier 的 Prometheus Metrics 导出、Syslog 日志集成、Grafana 仪表盘以及告警规则。
ZeroTier Metrics 导出配置
ZeroTier One 从 v1.16.0 开始,默认禁用 Metrics 收集。启用需编辑 local.conf:
{
"settings": {
"enableMetrics": true
}
}
重启服务后,生成 /var/lib/zerotier-one/metrics.prom 文件。
常见 Metrics 列表
| Metric 名 | 类型 | 描述 | 示例用途 |
|---|---|---|---|
| zerotier_node_uptime_seconds | gauge | 节点运行时间 | 监控稳定性 |
| zerotier_peer_count_total | gauge | Peer 总数 | 网络规模 |
| zerotier_packet_rx_bytes_total | counter | 接收字节数 | 流量监控 |
| zerotier_packet_tx_bytes_total | counter | 发送字节数 | 带宽使用 |
| zerotier_latency_ms | gauge | Peer 延迟 | 网络质量 |
| zerotier_online_peers | gauge | 在线 Peer 数 | 可用性检查 |
Syslog 日志集成
配置 rsyslog 转发到 Loki
# /etc/promtail/config.yml
server:
http_listen_port: 9080
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: zerotier-syslog
syslog:
listen_address: 0.0.0.0:1514
labels:
job: "zerotier"
host: "{{ .HostName }}"
Prometheus 配置
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'zerotier-node'
static_configs:
- targets: ['localhost:9100']
relabel_configs:
- source_labels: [__name__]
regex: zerotier_.*
action: keep
Scrape 配置表
| Job 名 | 端口 | Metrics 路径 | 标签 |
|---|---|---|---|
| zerotier-node | 9100 | /metrics | job=zerotier-node |
| prometheus | 9090 | /metrics | job=prometheus |
| loki | 3100 | /metrics | job=loki |
Grafana 仪表盘实战
推荐 Dashboard 面板:
- Peer 数量(Gauge)
- 流量曲线(rx/tx bytes rate)
- 延迟热图
- 日志查询(Loki 数据源)
告警规则配置
groups:
- name: ZeroTierAlerts
rules:
- alert: ZeroTierHighLatency
expr: zerotier_latency_ms > 200
for: 2m
labels:
severity: warning
annotations:
summary: "ZeroTier Peer 延迟高"
- alert: ZeroTierPeersDown
expr: zerotier_online_peers < 10
for: 5m
labels:
severity: critical
告警场景表
| 告警名称 | 阈值 | 持续时间 | 严重度 | 通知渠道 |
|---|---|---|---|---|
| 高延迟 | >200ms | 2m | Warning | Slack |
| Peer 下线 | <80% | 5m | Critical | |
| 流量异常 | >1Gbps | 1m | Info | Discord |
| 日志错误 | ERROR >10/min | 10m | Critical | PagerDuty |
Docker Compose 部署
version: '3'
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana
ports:
- "3000:3000"
loki:
image: grafana/loki
ports:
- "3100:3100"
参考文献
(本文约 6900 汉字)