Sari la conținut
Documentație · Monitoare heartbeat

DocumentațieMonitorizare

Monitoare heartbeat (cron)

Monitorizează joburi cron, backupuri, cozi și workeri cu URL-uri heartbeat — configurare, perioadă de grație și exemple pentru crontab, curl, wget, PowerShell și timere systemd.

Pe această pagină

Unele lucruri nu pot fi verificate din exterior: un backup nocturn, un worker care procesează o coadă, un script pe un server din spatele unui firewall. Un monitor heartbeat inversează rolurile — jobul tău apelează un URL unic la fiecare rulare, iar noi te alertăm când un apel nu ajunge la timp.

Cum funcționează#

  1. Creează un monitor de tip Heartbeat și setează intervalul la cât de des rulează jobul (de exemplu 1 oră pentru un job orar, 24 de ore pentru unul nocturn).
  2. Setează perioada de grație (graceSeconds, 0–86.400 de secunde, implicit 60): cât de mult poate întârzia un apel înainte să fie considerat ratat. Joburile cu durată variabilă au nevoie de mai multă grație.
  3. Salvează. Monitorul îți arată URL-ul heartbeat:
text
https://api.isituprightnow.com/api/v1/heartbeat/<token>
  1. Apelează acest URL la finalul fiecărei rulări reușite, cu GET, POST sau HEAD. Răspunsul este 200 ok.

Dacă niciun apel nu sosește în interval + grație de la cel precedent, căderea monitorului este confirmată, se deschide un incident și se aplică regulile de alertă. Următorul apel îl marchează din nou ca funcțional și rezolvă incidentul.

Răspunsuri#

Răspuns Ce înseamnă
200 ok Apelul a fost înregistrat.
200 ok (paused) Monitorul este în pauză; nu se înregistrează nimic.
404 Token necunoscut (monitorul a fost șters sau URL-ul este greșit).
429 Mai mult de 60 de apeluri pe minut pentru acest monitor.

Apelurile sunt ieftine, iar endpointul acceptă orice origine, așa că îl poți apela și din funcții serverless sau din pipeline-uri CI.

Exemple#

Înlocuiește <token> cu tokenul monitorului sau copiază URL-ul complet din pagina monitorului.

crontab + curl#

Trimite apelul doar dacă jobul a reușit (&&), cu reîncercări și timeout, ca o problemă scurtă de rețea să nu strice jobul:

bash
# m h dom mon dow  comandă
30 2 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 --retry 3 -o /dev/null https://api.isituprightnow.com/api/v1/heartbeat/<token>

wget#

bash
/usr/local/bin/backup.sh && wget -q -T 10 -t 3 -O /dev/null https://api.isituprightnow.com/api/v1/heartbeat/<token>

Într-un script shell#

bash
#!/usr/bin/env bash
set -euo pipefail

pg_dump --format=custom mydb > /backups/mydb.dump

# Se ajunge aici doar dacă toate comenzile de mai sus au reușit.
curl -fsS -m 10 --retry 3 -o /dev/null "https://api.isituprightnow.com/api/v1/heartbeat/<token>"

PowerShell (Windows Task Scheduler)#

powershell
& "C:\jobs\export.ps1"
if ($LASTEXITCODE -eq 0) {
    Invoke-RestMethod -Uri "https://api.isituprightnow.com/api/v1/heartbeat/<token>" -Method Post -TimeoutSec 10
}

Timer systemd#

Trimite apelul dintr-o unitate separată, care rulează doar dacă unitatea jobului s-a terminat cu succes:

ini
# /etc/systemd/system/backup.service
[Unit]
Description=Backup nocturn
OnSuccess=backup-heartbeat.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
ini
# /etc/systemd/system/backup-heartbeat.service
[Unit]
Description=Raportează backupul către isituprightnow

[Service]
Type=oneshot
ExecStart=/usr/bin/curl -fsS -m 10 --retry 3 -o /dev/null https://api.isituprightnow.com/api/v1/heartbeat/<token>
ini
# /etc/systemd/system/backup.timer
[Unit]
Description=Rulează backupul în fiecare noapte

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true

[Install]
WantedBy=timers.target

Activează-l cu systemctl enable --now backup.timer. (OnSuccess= necesită systemd 249 sau mai nou; pe sisteme mai vechi adaugă în backup.service o linie ExecStartPost= cu comanda curl.)

Kubernetes CronJob#

yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: nightly-report
spec:
  schedule: "0 3 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: report
              image: registry.example.com/report:latest
              command: ["/bin/sh", "-c"]
              args:
                - ./run-report && wget -q -T 10 -O /dev/null https://api.isituprightnow.com/api/v1/heartbeat/<token>

Sfaturi#

  • Trimite apelul la final, nu la început. Un apel la început dovedește doar că jobul a pornit.
  • Joburi lungi: setează intervalul după programare și perioada de grație la cea mai lungă durată normală de rulare.
  • Joburi neregulate (de exemplu un worker de coadă): trimite apelul din bucla principală a workerului, cel mult o dată pe minut, și folosește un interval de câteva minute.
  • Pauză: pune monitorul pe pauză înainte să dezactivezi jobul, ca apelurile lipsă să nu deschidă un incident.

Nu ai găsit ce căutai? Scrie-ne.