Recevoir les alertes de son serveur sur Discord
Créer un webhook Discord, envoyer un message depuis un script bash, faire de beaux messages colorés, et brancher la sauvegarde, les mises à jour et les erreurs.
Vous avez déjà Discord sur votre téléphone ? Un webhook permet à n’importe quel script de votre serveur d’y
poster un message. Pas d’application à installer sur le serveur, juste curl. C’est l’alternative à
ntfy si vous préférez tout recevoir au même endroit.
1. Créer le webhook
- Créez un serveur Discord privé (ou utilisez le vôtre), avec un salon
#serveur. - Paramètres du salon → Intégrations → Webhooks → Nouveau webhook.
- Donnez-lui un nom (« VPS ») et copiez l’URL du webhook.
L’URL du webhook est un secret : quiconque la connaît peut écrire dans votre salon. Ne la mettez jamais dans un dépôt Git ou un forum. Rangez-la dans un fichier lisible par root seulement.
echo 'DISCORD_WEBHOOK="https://discord.com/api/webhooks/…"' | sudo tee /etc/discord-webhook
sudo chmod 600 /etc/discord-webhook
2. Un premier message
sudo bash -c 'source /etc/discord-webhook; curl -fsS -H "Content-Type: application/json" \
-d "{\"content\": \"Bonjour depuis mon serveur\"}" "$DISCORD_WEBHOOK"'
3. Une fonction réutilisable
Les guillemets dans le JSON deviennent vite un casse-tête : jq s’en occupe. Créez une petite commande discord :
sudo apt install -y jq
sudo tee /usr/local/bin/discord >/dev/null <<'EOF'
#!/bin/bash
# Usage : discord "Titre" "Message" [rouge|vert|orange|bleu]
source /etc/discord-webhook
case "${3:-bleu}" in
rouge) c=15158332 ;; vert) c=3066993 ;; orange) c=15105570 ;; *) c=3447003 ;;
esac
jq -n --arg t "$1" --arg d "${2:0:4000}" --argjson c "$c" --arg h "$(hostname)" \
'{username: "Serveur", embeds: [{title: $t, description: $d, color: $c, footer: {text: $h}, timestamp: (now | todate)}]}' |
curl -fsS -m 15 -H "Content-Type: application/json" -d @- "$DISCORD_WEBHOOK" >/dev/null
EOF
sudo chmod 700 /usr/local/bin/discord
sudo discord "Test" "Tout va bien" vert
Le message arrive avec un bandeau de couleur, la date et le nom du serveur. La description est coupée à 4 000 caractères, la limite de Discord.
4. Brancher la sauvegarde
À la fin du script de sauvegarde automatique
(/usr/local/bin/sauvegarde-serveur) :
n=$(ls /opt/backups/*_$(date +%F).tgz 2>/dev/null | wc -l)
discord "Sauvegarde" "$n archives, $(du -sh /opt/backups | cut -f1) au total" vert
5. Brancher les mises à jour
À la fin de /usr/local/bin/maj-applications, la liste de ce qui tourne :
discord "Mises à jour" "$(docker ps --format '• {{.Names}} : {{.Status}}')" bleu
6. Être prévenu quand une tâche échoue
systemd peut lancer une commande quand un service échoue. Créez un service d’alerte générique :
sudo tee /etc/systemd/system/alerte-echec@.service >/dev/null <<'EOF'
[Unit]
Description=Alerte Discord pour %i
[Service]
Type=oneshot
ExecStart=/usr/local/bin/discord "Échec : %i" "La tâche %i a échoué. Voir : journalctl -u %i" rouge
EOF
sudo systemctl daemon-reload
Puis ajoutez-le à la sauvegarde :
sudo systemctl edit sauvegarde-serveur.service
[Unit]
OnFailure=alerte-echec@%n.service
OnFailure se déclenche quand la tâche se termine en erreur ou ne peut pas démarrer. Il ne voit pas une archive ratée
au milieu d’une sauvegarde qui se termine normalement : gardez aussi le message quotidien de l’étape 4. Le matin où il
n’arrive pas, c’est un signal en soi.
7. Les bonnes pratiques
- Alertez sur les changements, pas sur les états : « le disque a dépassé 85 % » une fois, pas toutes les 15 minutes. Sinon, on finit par ignorer le salon.
- Un message « résolu » quand le problème disparaît rassure autant que l’alerte.
- Séparez les salons :
#alertes(à lire tout de suite) et#infos(sauvegardes, mises à jour). - Testez l’échec : coupez volontairement une tâche une fois, pour vérifier que l’alerte arrive.
Le guide surveiller son serveur montre comment combiner tout ça dans un watchdog.
Une commande qui ne marche pas, une explication pas claire ? Signaler une erreur dans cette page.