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ă#
- 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).
- 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. - Salvează. Monitorul îți arată URL-ul heartbeat:
https://api.isituprightnow.com/api/v1/heartbeat/<token>- Apelează acest URL la finalul fiecărei rulări reușite, cu
GET,POSTsauHEAD. Răspunsul este200 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:
# 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#
/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#
#!/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)#
& "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:
# /etc/systemd/system/backup.service
[Unit]
Description=Backup nocturn
OnSuccess=backup-heartbeat.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh# /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># /etc/systemd/system/backup.timer
[Unit]
Description=Rulează backupul în fiecare noapte
[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true
[Install]
WantedBy=timers.targetActivează-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#
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.