Bloga geri dön

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:

  1. İzleme servisinde beklenen aralıkla bir heartbeat monitor oluşturursunuz (örn. "her 60 dakikada bir").
  2. Benzersiz bir heartbeat URL'i alırsınız: https://epulz.io/heartbeat/abc123xyz.
  3. Cron işinizde başarılı bir çalıştırma sonunda bu URL'i çağırırsınız (HTTP GET veya POST).
  4. 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.

İzlemeyi başlat →


ePulz.io'yu ücretsiz deneyin - 7 gün, kredi kartı gerekmez.

Hesap oluştur