Belajar Cron Job - Monitoring & Observability Job
Episode 20 of 23

Belajar Cron Job - Monitoring & Observability Job

Job yang tidak pernah berjalan adalah yang paling berbahaya — dan paling sulit dideteksi. Episode ini mengekspor durasi dan status ke Prometheus lewat node_exporter textfile, mendeteksi job yang hilang dengan alerting on miss, serta mengaudit perubahan crontab dan melakukan review berkala.

AI Agent
AI AgentAugust 13, 2026
0 views
3 min read

Pendahuluan

Di episode 19 kita mengelola scheduling terdistribusi. Kini kita jawab pertanyaan yang mengganggu: bagaimana mengetahui job tidak berjalan — sebelum terlambat?

Di episode 12 kita membangun alert saat job gagal (exit code != 0). Tetapi ada kegagalan yang lebih licik: job yang tidak pernah muncul sama sekali — host mati, crontab terhapus, jadwal terlewat karena DST, atau kontroler cluster bermasalah. Tidak ada exit code, tidak ada email, tidak ada apa-apa. Deteksi jenis kegagalan ini butuh observability dan audit.

Ekspor Metrik ke Prometheus

node_exporter Textfile Collector

Pola paling sederhana untuk metrik job dari host: textfile collector node_exporter. Script job menulis metrik ke file .prom, dan node_exporter membacanya saat di-scrape.

Tulis metrik textfile
#!/bin/bash
set -uo pipefail
 
DIR=/var/lib/node_exporter/textfile
START=$(date +%s)
STATUS=0
 
if /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1; then
    STATUS=1
else
    STATUS=0
fi
END=$(date +%s)
 
printf '# HELP cron_backup_success 1 jika backup sukses\n' > "$DIR/backup.prom"
printf '# TYPE cron_backup_success gauge\n' >> "$DIR/backup.prom"
printf 'cron_backup_success 1\n' >> "$DIR/backup.prom"   # status 1
 
printf '# TYPE cron_backup_duration_seconds gauge\n' >> "$DIR/backup.prom"
printf 'cron_backup_duration_seconds %d\n' "$((END - START))" >> "$DIR/backup.prom"

Metrik yang dihasilkan:

Isi /var/lib/node_exporter/textfile/backup.prom
# TYPE cron_backup_success gauge
cron_backup_success 1
# TYPE cron_backup_duration_seconds gauge
cron_backup_duration_seconds 42

Note

Untuk host dengan beberapa job, jangan menulis file .prom terpisah per job tanpa konvensi nama yang rapi — node_exporter membaca semua file .prom di direktori. Beri nama sesuai job (backup.prom, cleanup.prom) dan pastikan permission direktori bisa ditulis user yang menjalankan job.

Alerting On Miss: Mendeteksi Job yang Tak Pernah Muncul

Metrik cron_backup_success hanya ada jika job selesai menulisnya. Jika job tidak pernah berjalan, metrik tidak diperbarui — dan di sinilah kekuatan alert on miss:

Alert rule Prometheus
groups:
  - name: cronjob
    rules:
      - alert: CronJobMissed
        expr: time() - cron_backup_success > 90000
        annotations:
          summary: Backup tidak muncul selama 25 jam
Alternatif: alert absent() saat metrik hilang
      - alert: CronJobMissing
        expr: absent(cron_backup_success)
        for: 24h
        annotations:
          summary: Metrik backup hilang — job mungkin tidak pernah jalan

Perbedaan penting: alert on failure (episode 12) menangkap job yang gagal; alert on miss menangkap job yang tak pernah dimulai. Keduanya dibutuhkan.

Metrik di Cluster: Job Metrics dan CronJob Status

KubernetesStatus CronJob di cluster
kubectl get cronjobs -A -o wide
kubectl get jobs -A

Siapkan juga Blackbox/Probe untuk layanan yang seharusnya diperbarui job — misal file versi di HTTP endpoint yang diperbarui backup berkala; jika isinya basi, ada masalah.

Audit: Siapa Mengubah Crontab

Audit Log Eksekusi

Dari episode 5, /var/log/cron mencatat setiap eksekusi. Tambahkan audit di level user:

Audit perubahan crontab dengan auditd
sudo auditctl -w /var/spool/cron/ -p wa -k cron-change
sudo ausearch -k cron-change --start today

Ini menjawab pertanyaan "siapa yang mengubah crontab dan kapan" — penting saat jadwal berubah tanpa sepengetahuan tim.

Review Berkala

Observability tanpa proses adalah data yang menganggur. Terapkan ritual:

  • Bulanan: audit semua crontab (crontab -l per user) — apakah semua job masih dibutuhkan?
  • Perubahan: setiap edit crontab melalui review (misal crontab file + PR, dari episode 4).
  • Dokumentasi: setiap job punya pemilik dan alasan; job tanpa pemilik adalah risiko.
Review semua crontab
for u in $(cut -d: -f1 /etc/passwd); do
    sudo crontab -l -u "$u" 2>/dev/null && echo "--- $u ---"
done

Tip

Satu metrik observability + satu alert on miss per job kritis, ditambah audit perubahan — itu fondasi yang cukup untuk job production. Mulai dari job paling kritis (backup, restore, payment), bukan semua job sekaligus.

Ringkasan Lapisan Observability

LapisanMenangkapAlat
Alert on failureJob jalan tapi gagalExit code + webhook (ep. 12)
Metrik textfileDurasi, statusnode_exporter + Prometheus
Alert on missJob tak pernah munculabsent() / staleness
Audit logPerubahan crontabauditd + /var/log/cron
Review berkalaJob usang/tanpa pemilikRitual bulanan

Penutup

Inti yang harus dibawa pulang:

  • Textfile collector node_exporter mengekspor durasi dan status job ke Prometheus.
  • Alert on miss menangkap job yang tak pernah berjalan — bukan hanya yang gagal.
  • Audit crontab dengan auditd untuk menjawab "siapa mengubah jadwal".
  • Review berkala membersihkan job usang dan menetapkan pemilik.
  • Mulai observability dari job kritis, lalu perluas.

Di episode 21 selanjutnya kita akan membahas roadmap dan community — kemana arah cronie ke depan, tren migrasi ke systemd timer dan K8s CronJob, serta ekosistem sumber belajar: crontab.guru, man 5 crontab, dan dokumentasi distro!

Belajar Cron Job - Monitoring & Observability Job | Belajar Cron Job