Cron işlerini ve arka plan worker'larını heartbeat ile izleme
· 6 dk okuma
Kısaca: Klasik HTTP izleme, fatura gönderen veya veri senkronize eden gece cron'unuzun düştüğünü tespit etmez. Heartbeat pattern iletişim yönünü tersine çevirir - cron izlemeye haber verir, ve beklenen zamanda aramazsa uyarı alırsınız.
Kısaca: Klasik HTTP izleme, fatura gönderen veya veri senkronize eden gece cron'unuzun düştüğünü tespit etmez. Heartbeat pattern iletişim yönünü tersine çevirir - cron izlemeye haber verir, ve beklenen zamanda aramazsa uyarı alırsınız.
Sorun: HTTP endpoint'siz arka plan görevleri
Tipik bir backend'in yolları vardır:
- Web istekleri (sunucuya HTTP/HTTPS) - uptime check ile izlersiniz.
- Cron işleri (günlük backup, aylık faturalama, saatlik sync) - HTTP endpoint'i yoktur, harici izleme onları görmez.
- Bir queue tüketen Worker'lar (Celery, BullMQ, Sidekiq) - onlar da HTTP'siz.
Cron düşerse (crontab'ı değiştirirsiniz ve yazım hatası yaparsınız, sunucunun diski yok, environment variable eksik, dependency upgrade import'u kırdı), kimse sizi uyarmaz - pazartesi sabahı hafta sonu fatura gönderilmediğini fark edene kadar.
Heartbeat pattern: cron izlemeyi pingler
Prensip normal izlemenin tam tersidir:
- İzleme servisinde beklenen aralıkla bir heartbeat monitor oluşturursunuz (örn. "her 60 dakikada bir").
- Benzersiz bir heartbeat URL'i alırsınız:
https://epulz.io/heartbeat/abc123xyz. - Cron işinizde başarılı bir çalıştırma sonunda bu URL'i çağırırsınız (HTTP GET veya POST).
- Ping beklenen zamanda gelmezse (+ grace period), izleme sizi uyarır.
Pratik örnek: bash cron
# /etc/crontab
0 3 * * * www-data /usr/local/bin/backup.sh && curl -fsS -m 10 \
https://epulz.io/heartbeat/abc123xyz > /dev/null
Anahtar &&'dır - heartbeat yalnızca backup.sh exit code 0 ile bitiyorsa gönderilir. Script başarısız olursa ping gelmez ve bir saat içinde uyarı alırsınız.
İpucu: Daha kapsamlı koruma için ayrıca bir "start" heartbeat ekleyin:
curl -fsS -m 10 https://epulz.io/heartbeat/abc123xyz/start > /dev/null
/usr/local/bin/backup.sh
EXIT=$?
curl -fsS -m 10 "https://epulz.io/heartbeat/abc123xyz?exit=$EXIT" > /dev/null
İzleme bundan sonra "başladı ve bitirmedi" (script dondu) ile "hiç başlamadı" (cron işi çalışmadı) arasında ayrım yapar.
Python: requests + try/except
import os, requests
HEARTBEAT_URL = os.environ["HEARTBEAT_URL"]
def sync_data():
# sizin mantığınız
pass
try:
sync_data()
requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
# Heartbeat gönderilmiyor - izleme sizi uyaracak
raise
Node.js: async / await
const HEARTBEAT_URL = process.env.HEARTBEAT_URL;
async function nightlyJob() {
await processInvoices();
await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}
nightlyJob().catch(err => {
console.error(err);
process.exit(1);
});
Grace period: uyarıdan önce ne kadar süre vermeli
Heartbeat monitor'ün toleransa ihtiyacı var - cron bazen normalden uzun çalışır, ağın latency'si var, NTP sync biraz kaymış olabilir. Grace period, beklenen aralıktan sonra izlemenin hâlâ beklediği süredir.
Pratik değerler:
- Hourly cron: aralık 60 dk + grace 10 dk
- Daily backup (ortalama 20 dk): aralık 1440 dk + grace 60 dk
- Weekly report: aralık 10080 dk + grace 360 dk (6 sa)
Çok dar grace = false-positive uyarılar. Çok geniş = gerçekten düştüğünde gecikmeli uyarı.
Heartbeat pattern'in en çok yardım ettiği yerler
- Gece DB backup'ları
- Harici API'lerle senkronizasyon (CRM, accounting, payment)
- Rapor hesaplamaları
- Cleanup görevleri (eski session'lar, log'lar, geçici dosyalar silinmesi)
- Uzun süreli worker'ların healthcheck döngüsü
- Planlanmış email'ler, newsletter'lar, faturalama
Sonuç
Arka plan görevleri sıklıkla web'in kendisinden daha kritiktir ama izlemenin kör noktası olarak kalır. Heartbeat pattern 5 dakikalık uygulama gerektirir (cron satırının sonuna curl eklemek) ve frontend için uptime izlemenin verdiği aynı huzuru sağlar.
Cron işlerini izlemeye başlayın
ePulz.io yapılandırılabilir grace period ile heartbeat check'leri destekler. 7 gün ücretsiz.
ePulz.io'yu ücretsiz deneyin - 7 gün, kredi kartı gerekmez.
Hesap oluştur