Notifications natives : cibles mail, webhook, Gotify, matchers¶
Configurez Proxmox VE pour que les échecs de sauvegarde, de réplication, les isolements de nœud (fencing) et les alertes disque arrivent à la bonne équipe, par mail SMTP authentifié ou par webhook vers votre outil de messagerie ou de ticketing. Le système repose sur deux objets : des cibles (targets, où envoyer) et des matchers (quels événements envoyer à quelles cibles).
Notions clés¶
| Objet | Rôle | Remarque |
|---|---|---|
| Cible sendmail | Mail via le sendmail local (Postfix) |
File d'attente et nouvelles tentatives assurées par Postfix |
| Cible smtp | Mail directement vers un relais SMTP (TLS, STARTTLS, authentification) | Pas de file d'attente : un relais indisponible = notification perdue |
| Cible gotify | Push vers un serveur Gotify (URL + jeton) | Respecte le proxy HTTP du Datacenter |
| Cible webhook | Requête HTTP (POST, PUT ou GET) avec en-têtes et corps en gabarit Handlebars | Teams, Slack, Discord, ntfy, outil de ticketing |
| Matcher | Règle : si l'événement correspond, notifier les cibles listées | Un matcher sans règle correspond à tout |
Configuration commune au cluster : /etc/pve/notifications.cfg ; secrets (mot de passe SMTP, jeton Gotify, secrets de webhook) dans /etc/pve/priv/notifications.cfg, lisible par root uniquement.
Comportement par défaut. Une installation fournit une cible sendmail mail-to-root, qui écrit à l'adresse mail de l'utilisateur root@pam (saisie à l'installation), et un matcher default-matcher qui envoie tous les événements vers cette cible. Le courrier local adressé à root (ZED, cron, smartd) est intercepté par proxmox-mail-forward et devient un événement de type system-mail. Si Postfix n'est pas configuré pour relayer vers l'extérieur, ces mails ne partent nulle part.
Événements et champs utilisables¶
| Événement | type |
Sévérité | Autres champs |
|---|---|---|---|
| Sauvegarde réussie / en échec | vzdump |
info / error |
hostname, job-id (jobs planifiés) |
| Réplication en échec | replication |
error |
hostname, job-id |
| Nœud isolé (fenced) par la HA | fencing |
error |
hostname |
| Mises à jour disponibles | package-updates |
info |
hostname |
| Mail système pour root (ZED, smartd…) | system-mail |
unknown |
hostname |
Règles d'un matcher : match-field exact:type=vzdump (plusieurs valeurs séparées par des virgules) ou regex:hostname=^pve0[1-3]$, match-severity warning,error, match-calendar mon..fri 8-18. mode all (défaut, toutes les règles) ou mode any (au moins une), invert-match pour inverser.
Avant de toucher la prod
- Relais SMTP identifié (serveur, port, mode TLS, compte de service) ou URL de webhook fournie par l'équipe destinataire.
- Flux sortant ouvert depuis les nœuds vers le relais (TCP 465 ou 587) ou vers l'URL du webhook.
- Adresse de destination validée : une boîte d'équipe, jamais une boîte personnelle.
- Copie de la configuration actuelle :
cp /etc/pve/notifications.cfg /root/notifications.cfg.bak. - Liste des alertes attendues par le MSP (contrats N2/N3 : le MSP reçoit souvent une copie, ne supprimez pas sa cible).
Étapes¶
Exemple : une cible SMTP mail-exploit pour l'équipe, une cible webhook teams-astreinte pour les erreurs, et deux matchers.
- Datacenter → Notifications → Notification Targets → Add → SMTP.
- Endpoint Name :
mail-exploit; Server :smtp.client.fr; Encryption : TLS (port 465) ou STARTTLS (port 587). - Authenticate coché, Username, Password ; From Address :
pve@client.fr. - Recipient(s) : utilisateurs PVE ou Additional Recipient(s) :
exploitation@client.fr.
- Endpoint Name :
- Cliquer Test sur la cible : le mail de test doit arriver en moins d'une minute.
-
Add → Webhook : Endpoint Name
teams-astreinte, MethodPOST, URL fournie par l'outil, en-têteContent-Type: application/json, corps par exemple :Placer la partie confidentielle de l'URL dans Secrets et l'appeler par
{{ secrets.<nom> }}. Tester. -
Notification Matchers → Add :
erreurs-astreinte, Match Rules : Match Severity =error; Targets to notify :teams-astreinteetmail-exploit. - Add :
info-exploit, règle Match Fieldtype=vzdump,package-updates,system-mail; ciblemail-exploit. - Éditer
default-matcher: le désactiver (Enable décoché) ou remplacer sa cible parmail-exploit, pour éviter les doublons et les mails perdus vers root. - Datacenter → Backup → chaque job → Edit → Notification mode : Notification system. Les anciens réglages Send email to sont alors ignorés.
Le fichier peut être édité directement ; il est répliqué par pmxcfs sur tous les nœuds.
# /etc/pve/notifications.cfg
smtp: mail-exploit
server smtp.client.fr
mode tls
username pve-notif
from-address pve@client.fr
mailto exploitation@client.fr
comment Equipe exploitation
gotify: gotify-astreinte
server https://gotify.client.fr
matcher: erreurs-astreinte
match-severity error
target gotify-astreinte
target mail-exploit
matcher: info-exploit
mode all
match-field exact:type=vzdump,package-updates,system-mail
target mail-exploit
# /etc/pve/priv/notifications.cfg
smtp: mail-exploit
password <mot-de-passe>
gotify: gotify-astreinte
token <jeton>
pvesh get /cluster/notifications/targets # cibles connues
pvesh create /cluster/notifications/targets/mail-exploit/test # envoi de test
vzdump 101 --storage pbs-local --notification-mode notification-system
Les webhooks se créent de préférence par la GUI (gabarits et secrets).
Recommandations MSP¶
- Deux canaux pour les erreurs : un mail d'équipe et un canal temps réel (webhook ou Gotify).
- Ne filtrez pas
system-mail: c'est le canal des alertes ZFS (ZED) et SMART. Voir Scrub, SMART, alertes ZED. match-calendarsert à router vers l'astreinte hors heures ouvrées, pas à taire des erreurs.- PBS 4 dispose du même système (Configuration → Notifications) : configurez-y les échecs de GC, verify et sync, utiles pour RB-14 et RB-15.
Vérifications
- Test sur chaque cible : message reçu.
vzdump 101 --storage pbs-localsur une petite VM : notification info reçue surmail-exploituniquement.- Sur un nœud de test,
printf 'Subject: test root\n\ntest\n' | sendmail root: mail reçu sur la cible associée àsystem-mail. grep -c '^matcher' /etc/pve/notifications.cfgcohérent avec ce qui est attendu.
Rollback
Restaurer la copie : cp /root/notifications.cfg.bak /etc/pve/notifications.cfg, ou réactiver default-matcher dans la GUI. Les jobs repassés en Notification system peuvent revenir en Default (Auto).
Pièges vus en support
- Cible smtp et relais en panne : la notification est perdue sans nouvelle tentative. Gardez un second canal.
- Désactiver
default-matchersans créer de matcher couvrantsystem-mail: plus aucune alerte disque. - Job de sauvegarde en mode Auto avec une adresse Send email to remplie : c'est l'ancien envoi par sendmail qui s'applique, pas vos matchers.
- Adresse mail de
root@pamjamais modifiée depuis l'installation (boîte d'un ancien prestataire) : Datacenter → Permissions → Users →root→ E-Mail. - Matcher en
mode allavec deuxmatch-fieldsur des types différents : ne correspond jamais.
Quand ouvrir un ticket iTop
Test qui échoue alors que le relais répond depuis le nœud, notifications de fencing jamais reçues, besoin d'un webhook vers l'outil du MSP : P3. Joignez /etc/pve/notifications.cfg (sans le fichier priv) et journalctl -u pvedaemon --since "1 hour ago".