<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Notifications on rHomelab</title><link>https://rhomelab.com/tags/notifications/</link><description>Recent content in Notifications on rHomelab</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Mon, 02 Nov 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://rhomelab.com/tags/notifications/index.xml" rel="self" type="application/rss+xml"/><item><title>Proxmox Notifications: Setting Up Alerts for Backups, Replication, and Node Health Before Something Breaks Silently</title><link>https://rhomelab.com/proxmox/proxmox-notifications-alerting-setup/</link><pubDate>Mon, 02 Nov 2026 00:00:00 +0000</pubDate><guid>https://rhomelab.com/proxmox/proxmox-notifications-alerting-setup/</guid><description>How Proxmox&amp;#39;s built-in notification system works, why the default mail-only setup fails silently in most homelabs, and how to wire matchers and targets so a failed backup or replication job actually reaches you.</description><content:encoded><![CDATA[<p>Every other article on this site that mentions a scheduled Proxmox job, backups, replication, HA, eventually says some version of &ldquo;check the GUI periodically to make sure it&rsquo;s still running.&rdquo; That&rsquo;s fine advice until the day you stop checking, which is also usually the day it matters most. Proxmox has had a real, built-in notification system since 8.1 that can push a failed backup, a broken replication job, or a flapping node straight to email, a webhook, Slack, Discord, or whatever else you already watch, and most homelabs never turn it on past whatever came configured by default. This is the setup that closes that gap.</p>
<h2 id="why-the-default-setup-doesnt-actually-notify-you">Why the default setup doesn&rsquo;t actually notify you</h2>
<p>Fresh Proxmox installs ship with a <code>mail-to-root</code> notification target wired to the <code>smtp-default</code> relay, which on a typical homelab node means local sendmail trying to deliver to <code>root@&lt;hostname&gt;</code>, a mailbox nobody reads, going out through a mail transport that was never configured to actually relay anywhere. The notification system isn&rsquo;t broken; it&rsquo;s just configured to shout into a room with nobody in it. The fix isn&rsquo;t learning a new system, it&rsquo;s pointing the one that&rsquo;s already there at somewhere you&rsquo;ll actually see it.</p>
<h2 id="the-two-pieces-targets-and-matchers">The two pieces: targets and matchers</h2>
<p>Proxmox&rsquo;s notification system (<code>Datacenter &gt; Notifications</code> in the GUI, or <code>pvesh</code> and the <code>/etc/pve/notifications.cfg</code> file underneath it) splits into two separate concepts, and understanding the split is most of what makes the rest of the configuration make sense.</p>
<p><strong>Targets</strong> are destinations: where a notification actually gets sent. Proxmox supports several target types out of the box:</p>
<ul>
<li><strong>SMTP</strong> - standard email via an external relay (Gmail, a real SMTP provider, or your own mail server), not the local sendmail-to-root default.</li>
<li><strong>Sendmail</strong> - local MTA delivery, the legacy default, fine only if you&rsquo;ve actually got mail flowing somewhere from this host already.</li>
<li><strong>Webhook</strong> - a generic HTTP POST with a configurable URL, headers, and body template, which is the one that matters most because it&rsquo;s the bridge into everything else: Slack, Discord, ntfy, Gotify, a Home Assistant automation, or any other endpoint that accepts a webhook. Discord and Slack both take a webhook target directly once you format the body to match what they expect.</li>
<li><strong>Gotify</strong> - a dedicated target type for self-hosted Gotify push notifications, no generic webhook wrapping needed.</li>
</ul>
<p><strong>Matchers</strong> are rules: which events, at which severity, get routed to which target. A matcher can filter on the notification&rsquo;s metadata (the calling service, like <code>backup</code> or <code>replication</code>), on severity (<code>info</code>, <code>warning</code>, <code>error</code>), and on time windows if you don&rsquo;t want 3 AM alerts for things that self-heal. Without a matcher pointed at it, a target configured but unused does nothing, which is a common first mistake: adding a webhook target, confirming the test notification worked, and never actually building the matcher that routes real events to it.</p>
<h2 id="setting-up-a-target-that-reaches-you">Setting up a target that reaches you</h2>
<p>For most homelabs, a webhook into something you already have open (Discord, ntfy, a Gotify app on your phone) beats email, since email requires its own working relay as a prerequisite and most homelab nodes don&rsquo;t have one configured for anything else. ntfy in particular is close to zero-setup: self-host it or use the public instance, pick a topic name, and a webhook target with a plain POST to <code>https://ntfy.sh/&lt;your-topic&gt;</code> (or your own instance) with the message in the body gets a push notification to your phone&rsquo;s ntfy app with no API key or account needed.</p>
<p>From the GUI: <code>Datacenter &gt; Notifications &gt; Add &gt; Webhook</code>, give it a name, the target URL, and a body template. Proxmox&rsquo;s webhook body supports placeholders for the notification title and message text, so the template just needs to map those into whatever JSON shape the destination expects, a single <code>{&quot;text&quot;: &quot;{{ title }}: {{ message }}&quot;}</code> style body is enough for Discord, Slack, and ntfy&rsquo;s JSON publish format alike, with minor field-name differences between them (Discord wants <code>content</code>, Slack wants <code>text</code>, ntfy accepts either plain text or its own JSON schema). Test it with the GUI&rsquo;s built-in &ldquo;Send test notification&rdquo; button before building anything on top of it. If the test doesn&rsquo;t arrive, the problem is almost always the URL or the field name in the body template, not Proxmox&rsquo;s side of the pipe.</p>
<p>For Discord specifically: create a webhook in the target channel&rsquo;s integration settings, copy the webhook URL Discord gives you, and use that directly as the target URL with a body of <code>{&quot;content&quot;: &quot;{{ title }}: {{ message }}&quot;}</code>.</p>
<h2 id="setting-up-a-matcher-that-actually-routes-something">Setting up a matcher that actually routes something</h2>
<p>A matcher with no filters catches everything, which is a reasonable starting point for a homelab where &ldquo;everything&rdquo; is a manageable volume: backup job results, replication job results, and cluster health events. From <code>Datacenter &gt; Notifications &gt; Add Matcher</code>, point it at the target created above, leave the calling-service filter open initially, and optionally add a severity filter so routine <code>info</code>-level success notifications don&rsquo;t bury the <code>warning</code> and <code>error</code> ones you actually care about on a busy day.</p>
<p>Once the volume of notifications makes that noisy, which happens fast on a cluster with several nightly backup jobs, tighten it: a matcher scoped to calling service <code>backup</code> with severity <code>warning</code> or higher catches failed and partially-failed backups without also pinging you every time a backup job finishes normally. A second matcher on calling service <code>replication</code> catches the silently-failing replication job scenario covered in this site&rsquo;s storage replication article, which is exactly the kind of failure this whole system exists to surface before the RPO gap grows for days unnoticed.</p>
<h2 id="whats-actually-wired-into-this-system">What&rsquo;s actually wired into this system</h2>
<p>The notification system isn&rsquo;t just for backups. It&rsquo;s the same pipe behind:</p>
<ul>
<li><strong>Backup job results</strong> - success, failure, and partial failure (some guests backed up, others skipped or errored) all generate distinct notifications.</li>
<li><strong>Replication job failures</strong> - exactly the silent-failure mode called out as the biggest practical risk of relying on <code>pvesr</code> for near-HA.</li>
<li><strong>Cluster and node health</strong> - fencing events, a node dropping out of quorum, and other cluster-level state changes that otherwise only show up if you happen to be looking at the GUI at the right moment.</li>
<li><strong>Package updates available</strong> - a periodic check-in, lower priority but useful for not drifting too far behind on patches, especially relevant given the upgrade-lifecycle gotchas covered in this site&rsquo;s Proxmox upgrade article.</li>
</ul>
<p>Each of these fires with its own calling-service identifier, which is what matchers filter on, so a homelab running one node with light backup needs and a homelab running a three-node cluster with replication and HA can both use the same underlying system, just with different matcher scopes.</p>
<h2 id="a-sane-homelab-setup-end-to-end">A sane homelab setup, end to end</h2>
<p>For a typical single-node or small-cluster homelab, this is the whole thing in practice:</p>
<ol>
<li>Pick one low-friction target type (ntfy if you want zero email infrastructure, a Discord webhook if you&rsquo;re already living in a Discord server for the homelab).</li>
<li>Add that target, test it, confirm the notification actually arrives on the device you&rsquo;ll notice it on.</li>
<li>Add a matcher scoped to <code>backup</code> and <code>replication</code> (if applicable) at <code>warning</code> severity and above, pointed at that target.</li>
<li>Add a second, broader matcher at <code>error</code> severity only, with no calling-service filter, as a catch-all for anything else that goes seriously wrong that the narrower matcher didn&rsquo;t anticipate.</li>
<li>Leave the default <code>mail-to-root</code> target alone rather than deleting it; it&rsquo;s harmless if nothing routes to it, and removing built-in defaults tends to cause more confusion later than leaving an unused one in place.</li>
</ol>
<p>That&rsquo;s a complete alerting setup for the two failure modes that actually bite homelabs silently: a backup job that&rsquo;s been failing for a week because a target disk filled up, and a replication job that stopped syncing because a node was briefly unreachable and nobody noticed the retry never caught up. Both of those are a five-minute notification setup away from being a phone buzz instead of a surprise during the actual outage.</p>
<h2 id="bottom-line">Bottom line</h2>
<p>The Proxmox notification system is already installed, already wired to every backup and replication job on the host, and already failing to reach anyone by default because it&rsquo;s pointed at a mailbox nobody reads. Pointing one webhook target at something you&rsquo;ll actually see, and one or two matchers at the events that matter, converts every other &ldquo;remember to check the GUI&rdquo; caveat in this site&rsquo;s Proxmox coverage from a manual habit into something that just taps you on the shoulder when it&rsquo;s actually needed.</p>
]]></content:encoded></item></channel></rss>