Centralized Monitoring
An agent on every VPN server and one dashboard to watch and control them all.
What Centralized Monitoring is
Monitoring and control for a fleet of VPN servers. A small Flask agent on each server reports its health and can start, stop or restart the VPN service on request. A dashboard behind a login gathers every server, grouped by region, into one screen: system resources, bandwidth split between WireGuard and OpenVPN, VPN user counts, and PDF reports for any time range.
Centralized Monitoring features
What it actually does.
An agent per server
A small Flask API on each host answers health, status and info requests, so the dashboard asks instead of logging in.
Remote control
Start, stop or restart the OpenVPN service on any server from the dashboard. The agent runs the command and reports back.
One screen for the fleet
Every server, added by name, region and address, with its CPU, memory and state refreshed on an interval.
Bandwidth by protocol
Traffic split between WireGuard and OpenVPN, with VPN user statistics, charted per server.
Reports
Pick a start and an end time and a report type, and download it as a PDF.
Behind a login
The dashboard has its own sign-in, and WireGuard peer configurations are created and removed by script rather than by hand.
How to use Centralized Monitoring
From a fresh install to the thing working.
1 How it fits together
- The agent runs on each VPN server as a small Flask service.
- The dashboard runs on a web server behind Apache, with its own database of servers and users.
- Servers are added from the dashboard with a name, a region and an address.
2 Day to day
- Open the dashboard and sign in.
- Each server shows its resources, bandwidth by protocol and user counts, refreshed on an interval.
- Restart a misbehaving VPN service from its card instead of opening an SSH session.
3 Reporting
- Choose Generate Report, then set the time range and the report type.
- Download the PDF.
Built with
Licence
Made by Kencypher. Not open source.
Centralized Monitoring was written by Kencypher. The source is not published and is not licensed for reuse. You have permission to run it — that is the whole of it.
You may
- Run it on as many of your own machines as you like
- Use it for anything, including commercial work
- Pass an unmodified copy to a friend, free
You may not, without asking
- Sell it or charge for access
- Re-upload or mirror it anywhere
- Rebrand it or publish it as your own
- Decompile it or lift its assets
This is enforced. Re-uploading it, repackaging it, stripping the author's name off it or passing it off as your own is copyright infringement — protected without registration under the Berne Convention — and is pursued with DMCA takedowns to the host, CDN, app store and search engine, platform reports for impersonation, and legal proceedings where the infringement is commercial, repeated, or involves falsely claiming authorship.
Asking first is free, and the answer is usually yes — kencypher56@gmail.com. The only official source is this store; a copy from anywhere else is not one Kencypher published.
Good to know
- Built alongside the Zabbix, Grafana and Wazuh deployments it sits next to.
- The agent accepts only start, stop and restart, so the dashboard cannot be used to run arbitrary commands on a server.
- VPN traffic and the server’s own traffic are counted separately: the tunnel interface is read on its own, and everything that is not the tunnel or loopback is added up beside it. A backup running over the public interface therefore never shows up as VPN usage.
- Connected users are counted from the routing table in OpenVPN’s status log rather than from the connection list, because the connection list keeps sessions that have already gone away.
- The agent holds the current figures in memory and streams them to the dashboard as they change, so an open dashboard is not asking every server for a fresh answer every few seconds.
- It is not published. This page describes it.