This Free Tool Gives Proxmox the Monitoring Dashboard It Always Needed

Pulse proxmox monitoring

I think all of us are looking for very cool tools that can add modern dashboards to Proxmox and to help monitor what is going on with your Proxmox host, cluster hosts, VMs, and LXC containers. There is a new open source project that can do just that. It is called Pulse. Pulse is a new and exciting community tool that is available for monitoring Proxmox. Let’s take a look at the features and capabilities that Pulse brings to the table.

What is Pulse?

So, Pulse is an open-source monitoring platform that you can run for free for monitoring. It was built specifically for Proxmox VE Server. It has hooks built-in that talk directly to the Promxox API and gives you a clean dashboard where you can see metrics from your nodes and virtual machines. But it doesn’t stop there.

Pulse proxmox monitoring dashboard
Pulse proxmox monitoring dashboard

You can also add and monitor Docker hosts as well along with your Docker containers using Pulse. I love this as I think it covers exactly what a lot of home labbers and self-hosters are looking to monitor in the home lab. Most are probalby running Proxmox VE Server these days and also running Docker containers to self-host apps.

What Pulse does and features

The idea with Pulse is pretty simple. It lets you take the detailed data from the Proxmox backend that exists there and display this in a single web interface. The interface is very streamlined and easy to read. Once you connect Pulse to your cluster, it will start to automatically gather data and visualize the live metrics in the dashboard.

You will see things like system resource usage, health of VMs and containers, and other metrics. The other neat thing about Pulse is that it is super lightweight. It doesn’t need an external database or other services. Everything is found in a single deployment. So, you can deploy it in a small VM or even run it in an LXC or Docker container.

Note the following highlights of the features list:

  • Auto-discovery – Finds Proxmox nodes automatically with one-line installation scripts
  • Cluster monitoring – You can monitor Proxmox clusters
  • Enterprise security – It has good security, including encrypted credentials, CSRF protection, rate limiting, secure sessions, and bcrypt password hashing
  • Detailed audit logging – It tracks logins, configuration changes, and alert history
  • Live monitoring – You can view real-time performance for VMs, containers, storage, and nodes
  • Alerts to modern services – Get notifications using email or webhooks (Discord, Slack, Telegram, Teams, ntfy.sh, Gotify)
  • Adaptive thresholds – You can set dynamic alert levels with customizable triggers and resets
  • Alert timeline and analytics – It has an alert history, shows trends, and acknowledgment states
  • Ceph integration – Ceph health, including pool utilization, and daemon status automatically
  • Backup visibility – Get visibility of PBS backups, snapshots, and Proxmox backups with analytics
  • Mail gateway insights – You can monitor mail volume, spam trends, and quarantine health for PMG
  • Optional Docker monitoring – Lightweight agent support for container metrics
  • Configuration management – Export and import encrypted configs with authentication
  • Automatic updates – Safe, stable updates with rollback option
  • Modern UI – Dark and light themes, responsive, built with Go for minimal resource usage

Installing Pulse monitoring in a Docker container

Installation is fairly simple. However, I ran into a bit of an issue with the Docker monitoring side that I will detail below. You can check out the official documentation for the project here: https://github.com/rcourtman/Pulse

Below is an example Docker compose file that I used in my home lab. I set the initial auth_user and auth_pass in the file like you see below. Also, I pre-generated an API token for agents/webhooks and this seemed to work as an initial seed of the API token.

# docker-compose.yml
services:
  pulse:
    image: rcourtman/pulse:latest
    container_name: pulse
    restart: unless-stopped
    ports:
      - "7655:7655"
    environment:
      # First-boot admin (plain text; Pulse will bcrypt-hash it internally)
      PULSE_AUTH_USER: admin
      PULSE_AUTH_PASS: Letmein1$

      # Pre-generated API token for agents/webhooks
      API_TOKEN: 1bd764fae4c664d7f6158a814f8bf718f9e32e0c88b85fadb3ae2980eeea05f8

      # Optional: limit network discovery scope (example)
      # DISCOVERY_SUBNET: "192.168.50.0/24"
    volumes:
      - /home/linuxadmin/homelabservices/pulse/data:/data

Now, just run the command:

docker compose up -d
Bringing up the docker container for pulse open source monitoring
Bringing up the docker container for pulse open source monitoring

After the container spins up, you should be able to browse to port 7655 on your Docker host where you spun up the container.

Pulse initial login box
Pulse initial login box

This works just file to get Pulse up and running in Docker.

Adding a Proxmox node to Pulse monitoring

Now that we have Pulse up and running, we can add our first Proxmox node to the solution. Go to Settings.

No proxmox nodes are added to pulse monitoring
No proxmox nodes are added to pulse monitoring

On Proxmox VE nodes we click the +Add PVE Node to begin the process to add a new PVE node.

Adding a pve node
Adding a pve node

On the Add Proxmox VE node dialog box, we enter the Node Name and Host URL. You won’t see the command to copy unless you click the Copy button on the right of the box. Then the command will appear.

Copying the generated command after adding the name and url
Copying the generated command after adding the name and url

Now, I have copied the command and logged into the PVE host node, opened the shell prompt and pasted in the command. Run the command. You will see the script stop and prompt you if you want to Enable hardware temperature monitoring for this node? Enter Yes.

Running the script on the pve node and enabling temperature and hardware monitoring
Running the script on the pve node and enabling temperature and hardware monitoring

It will install the modules needed. Finally, we see the Node successfully registered with Pulse monitoring.

Monitoring is successfully installed in proxmox
Monitoring is successfully installed in proxmox

Now, we see the node listed in our PVE nodes.

Proxmox node is successfully added to the environment
Proxmox node is successfully added to the environment

Right after adding the node to monitoring, we start seeing alerts that are triggered come through. Very good information like disk space alerts, memory pressure alerts, etc.

Viewing alerts for the proxmox node
Viewing alerts for the proxmox node

In the Overview page of the Pulse monitoring dashboard, we see the node and VMs listed. I think this view is really great. One downside to mention is you can’t really click on any of the VMs to “drill” into them. These are just non clickable stats, but they update in real-time. It would be great to see a future enhancement add this capability to drill into the virtual machines and node itself to get more granular details.

Viewing the proxmox dashboard in pulse monitoring
Viewing the proxmox dashboard in pulse monitoring

You also have a Storage view.

Viewing storage of the pve node in pulse monitoring
Viewing storage of the pve node in pulse monitoring

Then finally a Backups view.

Viewing the backups for a specific pve node
Viewing the backups for a specific pve node

Adding a Docker host to Pulse

Now, the other side of the solution is visibility on your Docker containers running on Docker hosts. This is the monitoring that was a bit more cumbersome to spin up compared to Proxmox. It all came down to trickiness with the API key for some reason.

In the Docker compose code I have shown above, you can see the API token code:

API_TOKEN: 1bd764fae4c664d7f6158a814f8bf718f9e32e0c88b85fadb3ae2980eeea05f8

This seems to work to get the container spun up. However, I couldn’t for some reason use this token for the Docker container API token piece to onboard a Docker host. I kept troubleshooting and it came down to needing to create an .env file in the data directory of Pulse in the Docker compose. I thought this was optional if you just wanted to use an .env file to protect your secrets. However, it looks like even if you use full Docker compose with the secrets configured in there, you still need an .env file with the information so it can use this to initialize the security “backend” of the container. Without this file, it will give you an error.

So, what I did was change to the data directory and created the file there with these commands:

# Navigate to your Pulse data directory
cd /home/linuxadmin/homelabservices/pulse/data

# Fix permissions if needed
sudo chown -R linuxadmin:linuxadmin /home/linuxadmin/homelabservices/pulse/data

# Create the .env file
sudo tee .env > /dev/null << 'EOF'
PULSE_AUTH_USER=admin
PULSE_AUTH_PASS=Letmein1$
API_TOKEN=1bd764fae4c664d7f6158a814f8bf718f9e32e0c88b85fadb3ae2980eeea05f8
EOF

# Restart Pulse
cd /home/linuxadmin/homelabservices/pulse
docker compose restart

Next, I was able to navigate to the Settings > Security configuration inside the UI and Generate New Token from that screen.

Generate new token for ;use in onboarding docker host
Generate new token for ;use in onboarding docker host
New api token generated
New api token generated
Command was available to copy from the screen for docker host in pulse monitoring
Command was available to copy from the screen for docker host in pulse monitoring

However, the command running on a Docker host, resulted in this error. The package seemed to not be found.

Error trying to install the docker monitoring agent
Error trying to install the docker monitoring agent

Workaround: Manually download the agent and created the systemd service

Instead, I found the workaround was to manually download the agent from GitHub and create the systemd service to go along with it.

Download the agent:

# Download the agent from GitHub releases
cd /tmp
wget https://github.com/rcourtman/Pulse/releases/download/v4.22.0-rc.1/pulse-v4.22.0-rc.1-linux-amd64.tar.gz

# For ARM64 systems, use:
# wget https://github.com/rcourtman/Pulse/releases/download/v4.22.0-rc.1/pulse-v4.22.0-rc.1-linux-arm64.tar.gz

# Extract the archive
tar -xzf pulse-v4.22.0-rc.1-linux-amd64.tar.gz

# Install the agent binary
sudo cp ./bin/pulse-docker-agent /usr/local/bin/
sudo chmod +x /usr/local/bin/pulse-docker-agent

# Verify installation
/usr/local/bin/pulse-docker-agent --help

Create the Systemd service. Below just change the specific environment URLs in the systemd service for your environment.

sudo tee /etc/systemd/system/pulse-docker-agent.service > /dev/null << 'EOF'
[Unit]
Description=Pulse Docker Agent
After=network.target docker.service
Requires=docker.service

[Service]
Type=simple
Environment=PULSE_URL=http://10.1.149.26:7655
Environment=PULSE_TOKEN=8385e508d31aa93ca2efd7fe1bd4662a0daaf4527d39788720bc41ded8ed0bd8
ExecStart=/usr/local/bin/pulse-docker-agent --interval 30s
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

Start and enable the service on your Docker host:

# Reload systemd to pick up the new service
sudo systemctl daemon-reload

# Enable the service to start on boot
sudo systemctl enable pulse-docker-agent

# Start the service
sudo systemctl start pulse-docker-agent

# Check the status
sudo systemctl status pulse-docker-agent

After downloading the agent from the repo and starting the service using the commands above, I was able to see it show up in the Pulse Docker dashboard.

Pulse proxmox monitor can also monitor docker containers
Pulse proxmox monitor can also monitor docker containers

Why Pulse is a good fit for Proxmox and Docker monitoring in the home lab

I think this is a great solution for monitoring your home lab running on Proxmox and Docker. I think most right now in their home labs are hosting things in Proxmox as virtual machines or LXC containers or in Docker containers for applications.

Pulse is small, lightweight, and it is an efficient solution for monitoring that doesn’t run into a lot of complexity. You don’t have to install other clients or tools to view the monitoring data.

Also, you can turn on an option to view metrics in iFrame for home lab dashboards, which I thought is a really nice feature:

Option to embed iframes from pulse monitoring
Option to embed iframes from pulse monitoring

How it compares with other Proxmox monitoring solutions

Proxmox has a basic set of graphs and statistics, but these are limited in what they can show. If you want more than the basics, the typical route is to try something open-source like Prometheus and Grafana, which are awesome tools for Promox monitoring. I have a blog covering it here: InfluxDB Grafana Docker-Compose Configuration: Proxmox Monitoring Example.

Another great tool is Netdata, which provides system-level metrics and alerts. However, it does not have built-in awareness of Proxmox clusters or virtual machines natively. You can have it monitor Debian Linux which Proxmox is built on. Also, Netdata does natively monitor Docker.

I think the advantage here with Pulse is it is designed from the ground up for Proxmox. So it understands the platform’s structure and automatically maps nodes, VMs, and containers. It also is extremely efficient compared to other platforms. Just with a single container you can monitor Proxmox, VMs, LXCs, and Docker containers.

Wrapping up

This is a great new option for monitoring your Proxmox environment that is built expressly for Proxmox. Also, you have Docker monitoring built-in as well. So, all-in-all, I think most home labbers are steering towards Proxmox for self-hosting and of course Docker for containerized applications. This makes this a monitoring solution that has an almost perfect balance of functionality that most would be looking for in their home lab. Let me know in the comments if you have tried Pulse out for Proxmox. What are your thoughts? What are you currently using?

About The Author

5 1 vote
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments