Aller au contenu
Monitorizer

Guide : les heartbeats

Sachez quand une tâche cron, une sauvegarde ou une tâche planifiée s’arrête sans bruit

La plupart des tâches planifiées échouent en silence : la sauvegarde ne tourne plus et personne ne le remarque avant le jour où on en a besoin. Un heartbeat attend que votre tâche se manifeste, et vous alerte quand elle ne le fait pas.

Fonctionnement

Les moniteurs de sites et de serveurs vérifient de l’extérieur. Une tâche qui tourne selon son propre horaire n’a rien à visiter : un heartbeat fonctionne donc dans l’autre sens, c’est la tâche qui appelle Monitorizer.

Votre tâche se manifeste

Chaque heartbeat a une adresse privée. Votre tâche cron, sauvegarde ou script l’appelle quand elle se termine, avec curl, PowerShell ou toute requête HTTP.

Monitorizer sait quand l’attendre

Vous indiquez quand la tâche s’exécute : toutes les 15 minutes, chaque jour, chaque lundi, le 1er de chaque mois, ou selon n’importe quel horaire cron.

Vous êtes alerté quand elle ne le fait pas

Quand un appel est en retard, que la tâche signale un échec ou qu’une tâche commencée ne se termine jamais, votre Mac vous alerte sur vos canaux habituels.

Mise en place en trois étapes

  1. 1

    Ajoutez un moniteur heartbeat

    Sur le site : Moniteurs, Ajouter un moniteur, Heartbeat. Dans l’app Mac : Ajouter, Heartbeat. Donnez-lui un nom clair, comme « Sauvegarde nocturne, serveur boutique ». Les heartbeats demandent votre compte, puisque les appels arrivent sur le site.

  2. 2

    Collez votre ligne crontab

    Collez la ligne de la tâche depuis crontab -e : l’horaire, un nom et un délai de grâce sont remplis pour vous. Pas de ligne crontab (Windows, GitHub Actions) ? Réglez l’intervalle ou l’horaire à la main. Vérifiez le fuseau horaire : celui de la machine qui exécute la tâche.

  3. 3

    Recopiez la ligne

    Enregistrez. La page du moniteur vous rend la ligne avec le signal ajouté, en version simple ou avec signalement des échecs. Remplacez l’ancienne ligne par celle-ci : le premier signal apparaît quelques secondes après la prochaine exécution.

Intervalle ou horaire cron ?

À intervalle fixe

Pour les tâches qui tournent toutes les N minutes, heures, jours ou semaines, à compter du dernier appel. Si la tâche tourne toutes les 6 heures, choisissez 6 heures. Le prochain appel est attendu 6 heures après le dernier, quelle que soit son heure.

Selon un horaire cron

Pour les tâches à heure fixe : chaque jour à 03:00, en semaine seulement, chaque lundi, le 1er ou le dernier jour de chaque mois. Aucun intervalle fixe ne correspond à une tâche mensuelle (les mois ont de 28 à 31 jours) : utilisez un horaire. Collez les mêmes cinq champs que dans votre crontab.

Un horaire cron a cinq champs, séparés par des espaces :

┌───────── minute (0 à 59)
│ ┌─────── heure (0 à 23)
│ │ ┌───── jour du mois (1 à 31, L = dernier)
│ │ │ ┌─── mois (1 à 12)
│ │ │ │ ┌─ jour de la semaine (0 à 6, dimanche = 0)
│ │ │ │ │
0 3 1 * *
HoraireSignification
*/5 * * * *Toutes les 5 minutes
0 * * * *Toutes les heures
0 3 * * *À 03:00
30 8 * * 1-5À 08:30, de lundi à vendredi
0 3 * * 1À 03:00, uniquement le lundi
0 3 1 * *À 03:00, le 1 du mois
0 3 L * *À 03:00, le dernier jour du mois
0 4 1 */3 *À 04:00, le 1 du mois, tous les 3 mois
*/15 9-17 * * 1-5Toutes les 15 minutes, de 09:00 à 17:59, de lundi à vendredi

Choisissez le fuseau horaire de la machine qui exécute la tâche, pour que « 03:00 » veuille dire la même chose des deux côtés. Les changements d’heure sont gérés pour vous.

Choisir le délai de grâce

Le délai de grâce est le temps pendant lequel un appel peut encore arriver après l’heure prévue. Il couvre la durée de la tâche et les petits retards. Trop court, il donne de fausses alertes ; trop long, il retarde les vraies.

  • Une tâche rapide (quelques secondes) toutes les 5 à 15 minutes : 5 minutes.
  • Une tâche horaire de quelques minutes : 15 à 30 minutes.
  • Une sauvegarde nocturne de 20 minutes : 1 heure.
  • Une tâche hebdomadaire ou mensuelle qui peut durer des heures : 2 à 6 heures.
  • En règle générale : la plus longue durée jamais observée, plus une marge.

L’adresse de signal

Les requêtes GET, POST et HEAD fonctionnent toutes : tout outil capable d’ouvrir une adresse web peut envoyer un signal.

/hb/<adresse>La tâche s’est bien terminée. C’est le seul appel nécessaire.
/hb/<adresse>/startFacultatif, au début de la tâche. Vous voyez alors la durée de chaque exécution, et une tâche commencée mais jamais terminée est signalée.
/hb/<adresse>/failLa tâche a échoué. Vous êtes alerté aussitôt, sans attendre la fin du délai de grâce.
Corps POST ou ?msg=Ce que la tâche envoie (par exemple la fin de son journal) est conservé avec le signal et affiché dans l’alerte. Les 1 000 derniers caractères sont gardés.

Gardez l’adresse privée, comme un mot de passe : quiconque la connaît peut envoyer des appels pour ce moniteur. Si elle fuit, supprimez le moniteur et créez-en un nouveau, qui aura une nouvelle adresse.

Exemples

Remplacez YOUR-ADDRESS par l’adresse affichée sur la page de votre moniteur (avec des boutons pour la copier).

Crontab (Linux, macOS)
# L’appel n’est fait que si la sauvegarde a réussi (&&).
0 3 * * * /home/me/backup.sh && curl -fsS -m 10 --retry 3 -o /dev/null https://monitorizer.ai.tn/hb/YOUR-ADDRESS
Script crontab avec durée et échecs
#!/bin/sh
# Signale le début, la fin, et un échec avec la fin du journal.
HB=https://monitorizer.ai.tn/hb/YOUR-ADDRESS
curl -fsS -m 10 -o /dev/null $HB/start
if /home/me/backup.sh > /tmp/backup.log 2>&1; then
  curl -fsS -m 10 -o /dev/null $HB
else
  tail -c 1000 /tmp/backup.log | curl -fsS -m 10 -o /dev/null --data-binary @- $HB/fail
fi
Minuteur systemd
# /etc/systemd/system/backup.service
[Service]
Type=oneshot
ExecStart=/home/me/backup.sh
ExecStartPost=/usr/bin/curl -fsS -m 10 -o /dev/null https://monitorizer.ai.tn/hb/YOUR-ADDRESS
Planificateur de tâches Windows (PowerShell)
# Lancez ce script depuis la tâche planifiée.
& "C:\Scripts\backup.ps1"
if ($?) { Invoke-RestMethod https://monitorizer.ai.tn/hb/YOUR-ADDRESS }
else { Invoke-RestMethod -Method Post -Body "Backup failed" https://monitorizer.ai.tn/hb/YOUR-ADDRESS/fail }
GitHub Actions
# .github/workflows/nightly.yml
on:
  schedule:
    - cron: "0 3 * * *"
jobs:
  nightly:
    runs-on: ubuntu-latest
    steps:
      - run: ./nightly.sh
      - run: curl -fsS -m 10 ${{ secrets.HEARTBEAT_URL }}
      - if: failure()
        run: curl -fsS -m 10 ${{ secrets.HEARTBEAT_URL }}/fail
PHP ou WordPress
<?php
// À la fin de la tâche planifiée.
run_my_task();
file_get_contents('https://monitorizer.ai.tn/hb/YOUR-ADDRESS');
// WordPress: wp_remote_get('https://monitorizer.ai.tn/hb/YOUR-ADDRESS');
Node.js
try {
  await runJob();
  await fetch("https://monitorizer.ai.tn/hb/YOUR-ADDRESS");
} catch (error) {
  await fetch("https://monitorizer.ai.tn/hb/YOUR-ADDRESS/fail", { method: "POST", body: String(error) });
}
Python
import urllib.request

try:
    run_job()
    urllib.request.urlopen("https://monitorizer.ai.tn/hb/YOUR-ADDRESS", timeout=10)
except Exception as error:
    urllib.request.urlopen("https://monitorizer.ai.tn/hb/YOUR-ADDRESS/fail", data=str(error).encode(), timeout=10)

Questions

Que se passe-t-il si mon Mac est éteint ?

Les appels sont quand même reçus et conservés par le site. Les alertes sont envoyées par votre Mac : un appel manqué est signalé dès que le Mac est rallumé. Pour être alerté à toute heure, gardez un Mac toujours allumé connecté à votre compte.

Et si la tâche échoue mais appelle quand même l’adresse ?

Placez l’appel après la tâche avec && (ou vérifiez le résultat, comme dans les exemples), pour qu’il ne soit fait qu’en cas de réussite. Ou appelez /fail en cas d’échec, pour être alerté aussitôt.

Un heartbeat compte-t-il dans mon forfait ?

Oui, chaque heartbeat compte comme un moniteur.

Puis-je voir les appels passés ?

La page du moniteur liste les derniers appels avec leur heure, leur résultat, leur durée, leur message et l’adresse d’où ils viennent. Sa disponibilité et ses incidents fonctionnent comme pour tout autre moniteur.

Puis-je changer l’horaire plus tard ?

Oui, sur le site ou dans l’app Mac. L’adresse de signal reste la même : la tâche n’a pas à changer.

Y a-t-il une limite d’appels ?

Jusqu’à 120 appels par minute et par adresse, bien plus que ce dont une tâche planifiée a besoin.

Surveillez votre première tâche en deux minutes

Ajoutez un heartbeat, collez une ligne dans votre crontab, et ne vous demandez plus si la sauvegarde de la nuit a tourné.

Créer un heartbeat