Skip to content

Webhook Alerts

Native webhook delivery for alerts - Slack, Discord, Microsoft Teams, ntfy, or a generic JSON endpoint. Sits parallel to the existing Email / Apprise / Ntfy integrations: pick whichever fits the team's incident workflow.

Supported Targets

Slack

Posts to an Incoming Webhook URL. Severity-styled attachments (red / orange / yellow / green), markdown formatting, deep-links back to the affected resource in PegaProx.

Discord

Discord webhooks/{id}/{token}. Embed-style payload with color sidebar matching severity, alert title, fields for cluster / node / VMID, footer with timestamp.

Microsoft Teams

Office 365 connector / Adaptive Card payload. Compatible with the new Teams Workflows webhook URLs (the old outlook.office.com/webhook/... endpoint and the new prod-XX.westeurope.logic.azure.com URLs).

ntfy

Posts to https://ntfy.sh/<topic> or self-hosted. Supports priority headers, click action, attachment URL.

Generic JSON

POSTs a flat JSON body to any URL. Useful for in-house bots, PagerDuty events v2, OpsGenie, or a webhook receiver in n8n / Make / Zapier.

Payload Shape (Generic JSON)

{
  "alert_id": "evt_2026042619_aa12",
  "severity": "critical",
  "title": "Node pve3 unreachable",
  "message": "SSH probe to 10.10.0.13:22 timed out for 3 consecutive checks.",
  "cluster_id": "homelab",
  "cluster_name": "HomeLab",
  "node": "pve3",
  "vmid": null,
  "timestamp": "2026-04-26T19:42:11Z",
  "deep_link": "https://pegaprox.local/#/clusters/homelab/nodes/pve3",
  "labels": { "rack": "A1", "site": "FRA" },
  "source": "PegaProx",
  "version": "0.9.8"
}

Reliability

  • Timeout: 6 s per POST - keeps a slow webhook from stalling the alert pipeline.
  • Isolation: each channel is sent in its own try/except, so one dead webhook cannot block the others.
  • SSRF protection: the URL is checked: loopback, link-local and private addresses (10.x, 172.16-31.x, 192.168.x and, from 1.4.0, 100.64.0.0/10) are refused. There is no switch for an internal webhook target yet. See Outbound Requests and Private Addresses.
  • Secret redaction: webhook URLs whose path embeds a secret (Slack services/…, Discord api/webhooks/…, Teams, Splunk HEC) are redacted from log output. From 1.3 an ntfy topic is masked too, in the channel list and in the log.

Access

  • Channels are installation-wide, so creating, changing and deleting them needs admin.settings. Reading the masked list stays on alert.manage.
  • From 1.3, sending a test message to a channel needs admin.settings as well.

Which events raise alerts (thresholds and, from 1.3, failed tasks, Ceph, replication, ZFS, old snapshots, guests without backup, rolling updates) is described under Automation & Scheduling.