After jumping into the Proxmox rabbit hole ages ago, I began experimenting with virtual guests en masse. Now that I’ve finally put together a setup comprising my favorite LXCs and VMs on powerful PVE nodes (including cursed nested setups), I’ve realized the utility of maintenance apps. Documentation tools like Trilium Notes and NetBox help me keep detailed records of my experiments, while Proxmox Backup Server lets me preserve snapshots of my virtual guests.
Then there are monitoring utilities, which keep a weather eye on my apps and server rigs. Speaking of, I recently came across a self-hosted tool called Pulse that’s designed to keep tabs on Proxmox workstations. Having used it for a few days, I must admit that it’s one of the best companions for my PVE nodes.
Pulse is a sleek monitoring tool for Proxmox
That knocks all competition out of the park
I consider Uptime Kuma the ol’ reliable for my self-hosted suite. It works well, doesn’t require a lot of steps to set up, and barely consumes any resources. However, it’s only good for tracking the uptime of my server utilities, and doesn’t capture the resource utilization of my LXC and VM army. Plus, it’s a pain to add all my virtual guests manually – especially since I tinker with a couple of applications and services every week.
Meanwhile, Beszel is great at tracking the resource consumption of my workstation nodes, but it can’t capture the statistics of individual services. In its defense, Beszel is meant for monitoring servers, not their virtual guests. That’s a bummer, since I’ve got multiple services scattered across different PVE nodes.
Luckily, Pulse was exactly the tool I was looking for all this time. After deploying it as a container, Pulse immediately scans the Proxmox nodes on a network, and once paired with a PVE-powered system, the app automatically pulls several statistics from it. And I don’t just mean the uptime or CPU, memory, and disk utilization of the underlying Proxmox node, either. Pulse also records the resource consumption and disk + network speeds of every LXC and VM in a PVE workstation, and displays all the data inside a slick dashboard that’s pure eye candy for graph lovers such as myself.
It also meshes well with Proxmox Backup Server
If you prefer using PBS with your PVE nodes as much as I do, you’ll be glad to know that Pulse can even connect with Proxmox’s first-party backup utility. Pairing Pulse with a Proxmox Backup Server instance is fairly simple (and I’ll go over it in a bit). Plus, the app tracks the frequency of backup operations and even displays concise records of recently-added snapshots.
Pulse doubles as a neat dashboard utility
All thanks to guest management URLs
Like most other home labbers, I love a good dashboard – partly because it offers an easy way to access my self-hosted suite, and also because I get a kick out of taking a look at my arsenal of virtual guests. Pulse satisfies my cravings pretty well, and it even lets me launch the web UIs of my apps from the dashboard.
You see, the Guest Management URL section allows me to add hyperlinks for every LXC and VM on my Proxmox workstation – though I have to type the URLs manually.
Built-in notification support
It can even send alerts to Gotify
A monitoring utility is incomplete if it can’t send notifications when virtual guests cease functioning, and Pulse has an inbuilt alert system to help me stay on top of my LXC and VM status. The Notifications tab within Alert Configuration can send emails once you link it to an SMTP server, and you can even connect Pulse with Discord, Slack, Telegram, and Microsoft Teams using the Webhooks functionality. Me? As a fan of self-hosted services, I prefer hooking my Pulse server with Gotify.
Since Pulse can record a lot more statistics than Uptime Kuma, its notification settings are also just as customizable. For instance, I can force the container to send alerts if a VM, LXC, or PVE node consumes an unusual amount of system resources. Likewise, I can also assign utilization thresholds for my storage volumes, and if my nodes exceed this percentage, Pulse will notify me immediately.
Setting up a Pulse container
And pairing it with PVE and PBS nodes
With the theory part out of the way, it’s time to get the Pulse server up and running. Technically, there are a couple of ways to do this, but I prefer using the script that deploys Pulse as a container. Ideally, you’d want to run it inside a separate, bare-metal system, as the monitoring server will become inaccessible if the underlying Proxmox node crashes.
Since I’ve set up a separate Proxmox server specifically for my mission-critical experiments, I decided to deploy my Pulse container on top of it. Spinning up the LXC is fairly simple, as all I had to do was navigate to its Console tab and enter the following command:
curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/install.sh | bash
After running the command, you can either go for Quick or Advanced installation. I went with the latter since I wanted to fine-tune my Pulse setup, though I ended up going with the default options. Once the script had done its magic, the URL to access the web UI became visible. Inside the Pulse UI, I had to set up the admin user and password. Soon, Pulse created an API token, which I pasted into my Vaultwarden container for safekeeping.
The next step was to add my Proxmox nodes to Pulse using the PVE Nodes section within the Configuration tab. Luckily for me, Pulse can automatically detect Proxmox machines deployed on a local network. To further simplify things, I used the API token method, which involves copying the code generated by Pulse and executing it inside the Console tab of the nodes I wanted to connect with the monitoring utility. Pairing Proxmox Backup Server with Pulse is just as simple, except I had to use the PBS Nodes tab instead.
Pulse is worth setting up if you’re a Proxmox user
All in all, I’m glad I encountered Pulse during my excursions into the endless expanse of GitHub projects. Despite its sleek interface and solid alert provisions, Pulse is fairly lightweight and consumes minimal resources. The only caveat is that it’s not compatible with other container runtimes or virtualization platforms. It’s not a dealbreaker by any means, but I would’ve loved to pair my Podman containers and Harvester virtual machines with Pulse.
