A Dead Tunnel Is the Outage Nothing Reports
When a tunnel dies, everything behind it goes quiet - and quiet is exactly what a healthy site looks like from the outside. Fivenines watches every WireGuard peer by handshake age, every OpenVPN client by whether it is still connected, and every Tailscale node by key expiry, from the agent you already installed.
Built for teams monitoring production infrastructure
No credit card · 2-minute setup
VPN tunnels
-
The Failure That Hides Itself
A site behind a dead tunnel does not alert. Its servers stop reporting, its checks go quiet, and every dashboard reads the same as a site that is simply idle. Handshake age is the one signal that tells those two apart.
-
No Pages for Idle Peers
WireGuard only handshakes when there is traffic, so an idle peer with an old handshake is healthy by design. The alert watches peers with persistent-keepalive configured, because only those have a cadence to measure against.
-
Your Keys Stay on the Box
Private and preshared keys are never transmitted and have no column to be stored in. Even public keys are never displayed: peers show up under the alias from your wg-quick config, or a short fingerprint if it has none.
Deep dive
Why a Tunnel Needs Its Own Alert
Every other outage announces itself. A server falls over and stops sending metrics; a website goes down and a probe fails. A tunnel is different: when it dies, the machines behind it are still running perfectly and still trying to report. What breaks is the path their reports travel on, so the symptom is an absence rather than an error, and an absence is what a quiet weekend looks like too.
For an MSP that is the worst possible failure mode, because the blast radius is a whole client site rather than one host. Everything behind the tunnel goes dark at once, and nothing in the tool that is supposed to be watching it says anything is wrong.
So the tunnel gets watched as its own thing. The agent reads wg show on the host that terminates the tunnel and reports, per peer, how long ago it last completed a handshake. A peer with keepalive that has stopped handshaking has stopped carrying traffic - that is the signal, and it arrives seconds after it happens rather than whenever someone notices the client has been quiet.
What Each Collector Reports
WireGuard peers
One row per peer per interface: time since the last handshake, bytes received and sent, the current endpoint, the allowed IPs, and whether persistent-keepalive is set. Peers are identified by their public key, so renaming one in wg0.conf keeps its history and its open incident instead of minting a new peer.
WireGuard interfaces
How many peers each interface has and how many are currently active, where active means a handshake inside the last 3 minutes - one full rekey window plus margin. A zero-peer interface reports an honest zero rather than disappearing from the chart.
OpenVPN clients
One row per client per instance, keyed by the certificate Common Name - or by the login name on a server that does not verify client certificates, which is the only thing that keeps those sessions apart at all. Each carries whether it is connected right now, how long the session has been up or how long it has been down, its real and in-tunnel addresses, and its transfer counters. Several sessions sharing a name under duplicate-cn collapse into one row with a session count, so a flapping link does not restart a site's history.
OpenVPN instances
One row per daemon, keyed by its management socket rather than its name - a host running openvpn-server@office and openvpn-client@office reports two instances both called office. Each carries how many clients it has, its version, and for a client-mode instance the tunnel state machine itself, where RECONNECTING with the daemon's own reason is how a down tunnel actually shows up.
Tailscale node state
The daemon's backend state as Tailscale itself reports it, plus the node's own name. Stopped and NeedsLogin are real readings, not collection failures, so the moment a node leaves the tailnet you have a value that says so rather than a gap you have to interpret.
Tailscale key expiry
Days remaining on the node key, so you can be warned before it expires rather than after. A node with key expiry disabled in the admin console reports nothing here at all, which is the honest answer - not a countdown that would never end.
Tailnet rollups
How many peers the node can see and how many of those are online. Deliberately a rollup and not a row per peer: every node sees every other node, so per-peer data would cost hosts times tailnet-peers to describe the same small set of devices.
The host underneath
All of it sits beside the CPU, memory, disk and network figures for the same machine, so a saturated link and a flapping tunnel are on one timeline instead of in two products.
Deep dive
The Idle-Peer Problem, and Why It Is Not a Tuning Problem
WireGuard is silent by design. It does not keep a session open or send heartbeats of its own; it handshakes when there is data to send, and rekeys roughly every two minutes while traffic flows. Stop the traffic and the handshakes stop too, which means a peer that has been idle since Friday has a handshake age of three days and is in perfect health.
Alerting on handshake age alone therefore pages you for peers that are fine, and no threshold fixes it: any cutoff long enough to spare a genuinely idle peer is far too long to catch a dead one. It is a false positive by construction rather than a number that needs tuning.
The way out is to watch only the peers that have a guaranteed cadence. A peer with PersistentKeepalive set sends a packet every few seconds whether or not it has anything to say, so its handshake age genuinely does track its health - and that is the normal configuration for a site-to-site tunnel anyway, because at least one end usually sits behind NAT and needs keepalive to hold the mapping open. The alert watches those peers by default and leaves the rest alone.
The tradeoff is stated rather than hidden: a peer without keepalive is not watched by default, so set PersistentKeepalive = 25 on the NAT side of each tunnel you want covered. If your tunnels carry constant traffic you can flip the alert to watch every peer instead, and accept that idle ones will fire.
From Install to First Alert
Step 1
Install the agent
One command, about two minutes, on the host that terminates the tunnel. If you already monitor that server, skip this - the VPN collectors ride the agent you have.
Step 2
Turn the collectors on
Two toggles in the instance settings. WireGuard needs one sudoers line so the agent can run wg show all dump - it is shown under the toggle, ready to paste; Tailscale needs nothing at all. Neither takes any configuration, because both commands are fixed and the peer names come from your own wg-quick config.
Step 3
Watch it, then alert on it
Peers and clients appear on the instance page straight away, the ones in trouble first, and all 14 metrics can go on a custom dashboard. Add the VPN Tunnel Down template from the workflow gallery for WireGuard or VPN Tunnel Down (OpenVPN) for OpenVPN, and a metric threshold on Tailscale key-expiry days for the node keys.
Deep dive
Alerting on Tunnels
Two alerts ship as one-click workflow templates, one per protocol. VPN Tunnel Down watches WireGuard. It fires per peer, so a hub with thirty tunnels opens one incident for the tunnel that broke rather than one for the host, and each closes on its own when that peer handshakes again. The default threshold is 5 minutes, which is also the floor the form will accept - a rekey fires on the first packet after two minutes and the scrape adds up to another minute, so a healthy keepalive tunnel can legitimately show an age near three minutes and a tighter cutoff would flap.
VPN Tunnel Down (OpenVPN) watches OpenVPN, and it asks you for something the WireGuard one does not: the list of common names you care about. OpenVPN reports only the clients connected right now and has no marker distinguishing a site-to-site tunnel from a laptop, so a road-warrior server would otherwise page for two hundred people every evening. Name the sites; the rest are ignored. A name you list that has never connected fires too, which is the case that matters most - a tunnel configured and never brought up looks identical to no tunnel at all. An empty list watches nobody, and the builder says so rather than letting the node ship silently inert.
If wg itself stops working - the binary goes missing, the capability is dropped - the agent keeps reporting everything else, and a naive implementation would see no stale peers and close every open incident as recovered. That would be a dead tunnel reported as fixed. Instead the alert freezes: it stops paging, it stops resolving, and it waits for real data. Resolutions are worded honestly too, so a peer that was removed from the config says it is no longer reported rather than claiming it recovered. OpenVPN gets the same treatment one level finer: an instance whose management socket stops answering freezes just its own clients, while the other daemons on the same host carry on being monitored normally.
Tailscale has no dedicated trigger - you alert on it with a metric threshold, which is the same mechanism as any other metric here. The recipe worth setting up is key-expiry days below seven, so you are warned while the fix is still a login rather than after the node has already dropped off the tailnet. Node state works as a threshold too, because an off-tailnet daemon reports a real zero rather than a gap. What a threshold cannot see is a daemon that is gone entirely, since there is then no value to compare - for that, watch the tailscaled unit with a systemd trigger.
Every one of the 14 metrics can carry a threshold, with the same sustained-duration rules, escalation gates and maintenance windows as any other alert. Incidents never carry a public key: the identifier attached to one is a hash, and the notification names the peer by its alias.
Alerts go where your team works: email, Slack, Microsoft Teams, Telegram, Discord, Pushover, PagerDuty or webhooks. Which of those you can use depends on your plan - email, Telegram and Discord are on every plan, and the rest unlock as you move up.
Deep dive
Where Each Collector Runs
WireGuard monitoring is Linux-only, and that is a real boundary rather than a roadmap gap. The collector parses the output of wg show all dump, which is the Linux and BSD userspace tooling, so a Linux host is where peer data comes from. The toggle is hidden on Windows outright; on anything else it is available, and a machine without that tooling simply reports nothing rather than reporting a broken tunnel.
OpenVPN monitoring is Linux-only too, for a different reason. OpenVPN itself runs on Windows, but exposes its management interface there over a TCP port instead of a unix socket, and the collector reads only the socket - so the boundary is ours rather than the software's. It covers OpenVPN 2.x community edition: not Access Server, and not the OpenVPN 3 client, neither of which presents the same management interface. Setup is two config lines per instance and a restart, with no sudo involved - OpenVPN guards the socket with a group check instead.
Tailscale monitoring runs on Linux, Windows and macOS, because tailscale status is identical on all three. So a mixed fleet is covered for the Tailscale half wherever it runs, and for the WireGuard half wherever the tunnels actually terminate - which on a site-to-site setup is a Linux box in nearly every case.
Every collector here is off until you turn it on, per host, and enabling one does not enable the others. They also need an agent new enough to carry them: an older one will let you turn the toggle on and then simply report nothing, so update the agent if a host stays empty after you enable it.
What the agent reads, module by module, is documented in the agent security model, which lists WireGuard, OpenVPN and Tailscale alongside every other optional collector.
Common VPN Monitoring Scenarios
MSP site-to-site tunnels
One WireGuard hub, a tunnel to each client site, keepalive set on the client end. Every tunnel is a peer with its own incident, so a broken site pages once and names itself - rather than surfacing as a dozen unrelated hosts that all stopped reporting at the same time.
Remote access for a team
Laptops connecting to an office gateway. Most of those peers are idle most of the time, which is exactly the population that would flood you with false pages elsewhere; here they sit outside the watch set until you give them keepalive.
OpenVPN site-to-site
An OpenVPN server with a certificate per branch office. List those common names in the alert and each site gets its own incident; the laptops connecting to the same server stay out of it entirely, which is what makes the alert usable on a mixed server.
Tailscale-connected fleet
Machines joined to a tailnet, each with a node key that expires on a schedule you set once and then forget. A threshold on remaining days turns a silent drop-off into a warning with a week of notice.
How It Compares
| Approach | Setup | Per-Peer Health | Idle Peers | Tailscale Keys | Alerting |
|---|---|---|---|---|---|
| Prometheus + Grafana | 2-4 hours | Exporter required | Rule you write | Scrape + rule | Manual rules |
| Zabbix | 1-2 hours | Community script | Trigger you write | Community script | Supported |
| wg show / tailscale status | Built-in | Live only | Read it yourself | Live only | Not supported |
| Fivenines | 2 min | Per peer | Keepalive-aware | Days remaining | Built-in |
Included on every plan
No per-tunnel and no per-peer charge - a monitored tunnel is part of the instance the agent runs on.
Frequently Asked Questions
What does Fivenines watch on a WireGuard tunnel? +
Will it page me for an idle peer that is perfectly healthy? +
What does Fivenines watch on Tailscale? +
Does the agent ever see or send my private keys? +
What can I be alerted on, and is it included in my plan? +
Explore next
Related Features
Linux Server Monitoring
The CPU, memory, disk and network metrics of the host terminating your tunnels.
Explore ->Network Device Monitoring
The switches, routers and firewalls on either end, over SNMP.
Explore ->Server Alerts
Thresholds on any VPN metric, routed to eight notification channels.
Explore ->Workflows
Escalation gates, maintenance windows and rechecks around the tunnel alert.
Explore ->See how Fivenines compares to other tools
Read our guide to the best infrastructure monitoring tools in 2026.
Find out a tunnel died before your client does
14-day trial. No credit card required.
No credit card · 2-minute setup · Cancel anytime