基于Azure Monitor、Victoria Metrics、Grafana实现S2S VPN隧道告警自动化
解决方案:将S2S VPN隧道断开告警接入Victoria Metrics+Grafana栈
因为Azure VPN网关没有直接暴露隧道断开的原生指标,我们可以通过将诊断日志转换为自定义指标的方式接入现有监控栈,具体步骤如下:
1. 确保TunnelDiagnosticLog持续收集到Log Analytics
确认你的VPN网关已配置诊断设置,将TunnelDiagnosticLog类别发送到Log Analytics工作区——你现有日志查询能返回结果,说明这一步已完成,只需确保配置未被修改。
2. 配置Azure Monitor metrics Exporter生成自定义指标
该Exporter支持从Log Analytics查询结果生成Prometheus格式指标,修改其配置文件,添加日志查询规则:
配置示例(exporter config.yaml)
# 基础Azure认证配置(按现有Exporter配置保持一致) logs: - name: azure_vpn_tunnel_disconnected query: | AzureDiagnostics | where TimeGenerated > ago(5m) | where Category == "TunnelDiagnosticLog" and OperationName == "TunnelDisconnected" | summarize count() by Resource, remoteIP_s, stateChangeReason_s metricName: azure_vpn_tunnel_disconnected_total labels: resource: Resource remote_ip: remoteIP_s reason: stateChangeReason_s type: counter
- 该配置每5分钟执行一次日志查询,将断开事件计数生成为
counter类型指标,同时携带隧道资源、远端IP、断开原因等标签。 - 若需监控隧道实时状态(而非断开次数),可调整查询生成
gauge类型指标:最近5分钟内有断开事件则设为1,否则为0。
3. 让Victoria Metrics抓取自定义指标
在Victoria Metrics的scrape配置中,添加对Azure Monitor metrics Exporter的抓取任务,确保指标能被VM收集:
Scrape配置示例
scrape_configs: - job_name: 'azure-metrics-exporter' static_configs: - targets: ['<exporter-ip>:<exporter-port>'] # 替换为你的Exporter地址 scrape_interval: 5m # 和日志查询周期保持一致
4. 在Grafana中配置告警规则
基于Victoria Metrics中的自定义指标,创建告警规则:
告警PromQL示例(检测最近5分钟内的断开事件)
increase(azure_vpn_tunnel_disconnected_total[5m]) > 0
- 将该规则关联到你现有的邮件+webhook通知通道,触发断开事件时自动告警。
- 利用
resource、remote_ip等标签在告警消息中携带具体隧道信息,方便调度团队快速定位。
额外优化建议
- 在Grafana仪表盘添加
gauge类型面板,用0/1数值直观展示隧道当前状态(1=断开,0=正常)。 - 借助
stateChangeReason_s标签统计常见断开原因,比如密钥过期、网络波动等,辅助问题排查。
内容的提问来源于stack exchange,提问作者codenamebazinga
相关产品推荐
相关产品推荐

