مانیتورینگ کرون

مانیتورینگ Heartbeat: از کجا بفهمیم یه کرون جاب بی‌صدا متوقف شده.

نویسنده: تیم noc724۴ دقیقه مطالعهبه‌روزرسانی: ۲۶ مهر ۱۴۰۵

بیشتر مانیتورینگ‌ها از سرویس می‌پرسن «هستی؟». مانیتورینگ Heartbeat این رو برعکس می‌کنه: کار به مانیتور می‌گه «تموم شد» و سکوت یعنی زنگ خطر. تنها راه مطمئن برای پیدا کردن رایج‌ترین خرابی کرون، یعنی کاری که خیلی ساده دیگه اجرا نمی‌شه، همینه.

نکته‌های کلیدی

  • کار هر بار که تموم می‌شه یه درخواست HTTP (یه «پینگ») به یه آدرس اختصاصی می‌فرسته.
  • اگه پینگ در فاصله‌ی مورد انتظار به‌علاوه‌ی یه مهلت نرسه، هشدار می‌گیرید.
  • فقط در صورت موفقیت پینگ کنید (&&) تا هم اجرای ناموفق و هم اجرای جاافتاده هشدار بدن.
  • مهلت رو طوری بذارید که نوسان عادی زمان اجرا رو پوشش بده.
  • برای هر چیزی که زمان‌بندی‌شده اجرا می‌شه استفاده‌اش کنید: بکاپ، گزارش، همگام‌سازی، workerهای صف.
قطعی پیش میاد. زود باخبر شید!

noc724 سایت، سرور و APIهای شما رو شبانه‌روز چک می‌کنه و همون لحظه‌ای که چیزی خراب شد با پیامک، تلگرام یا بله خبرتون می‌کنه.

ثبت‌نام رایگان

چرا مانیتورینگ معمولی این رو نمی‌بینه؟

چک آپتایم یه چیزی لازم داره که بهش وصل بشه. بکاپ شبانه پورت و آدرسی نداره؛ چند دقیقه اجرا می‌شه و تموم می‌شه. اگه خط crontabش موقع دیپلوی پاک شده باشه، سرور از نو ساخته شده باشه، یا کار برای همیشه گیر کرده باشه، هیچ خطایی تولید نمی‌شه. چند هفته بعد یکی به بکاپ نیاز پیدا می‌کنه و می‌بینه آخرینش مال مرداده.

مانیتورینگ Heartbeat چطور کار می‌کنه؟

  1. یه مانیتور Heartbeat می‌سازید و یه آدرس اختصاصی می‌گیرید.
  2. به مانیتور می‌گید کار هر چند وقت اجرا می‌شه (مثلاً هر ۲۴ ساعت) و چقدر مهلت داره (مثلاً ۳۰ دقیقه).
  3. کار وقتی تموم می‌شه اون آدرس رو صدا می‌زنه.
  4. مانیتور انتظار داره درخواست بعدی قبل از «آخرین پینگ + فاصله + مهلت» برسه. اگه نرسه، مانیتور قطع می‌شه و هشدار می‌ده.

به این الگو کلید مرد مرده هم می‌گن: زنگ خطر به صدا درمیاد مگر اینکه یکی مدام دکمه رو فشار بده.

اضافه کردن پینگ

داخل crontab

0 2 * * * /opt/app/backup.sh && curl -fsS -m 10 --retry 3 https://YOUR-HEARTBEAT-URL > /dev/null
  • && پینگ رو فقط وقتی می‌فرسته که بکاپ با کد ۰ تموم بشه.
  • -f باعث می‌شه curl روی خطای HTTP شکست بخوره، -m 10 سقف انتظار رو تعیین می‌کنه و --retry 3 از یه اختلال کوتاه شبکه جون سالم به در می‌بره.

داخل اسکریپت

#!/bin/bash
set -euo pipefail
pg_dump mydb | gzip > "/backup/mydb-$(date +%F).sql.gz"
find /backup -name 'mydb-*.sql.gz' -mtime +14 -delete
curl -fsS -m 10 --retry 3 https://YOUR-HEARTBEAT-URL > /dev/null

با set -e هر مرحله‌ای که شکست بخوره، اسکریپت رو قبل از پینگ متوقف می‌کنه.

از داخل کد برنامه

workerهایی که مدام اجرا می‌شن می‌تونن از حلقه‌ی اصلیشون پینگ کنن (مثلاً دقیقه‌ای یه بار بعد از پردازش یه دسته) تا workerی که بدون کرش کردن یخ زده هم پیدا بشه.

انتخاب فاصله و مهلت

کارفاصلهمهلت
هر ۵ دقیقه، چند ثانیه اجرا۵ دقیقه۲ تا ۵ دقیقه
گزارش ساعتی، ۲ تا ۱۰ دقیقه اجرا۱ ساعت۱۵ دقیقه
بکاپ شبانه، ۲۰ تا ۶۰ دقیقه اجرا۲۴ ساعت۱ تا ۲ ساعت
پاکسازی هفتگی۷ روزچند ساعت

مهلت خیلی کوتاه روی هر اجرای کند هشدار می‌ده؛ مهلت خیلی بلند هشدار واقعی رو دیر می‌کنه. اون رو بر اساس کندترین اجرای عادی‌ای که دیدید تعیین کنید.

Heartbeat چه چیزهایی رو پیدا می‌کنه؟

  • خط crontab پاک شده یا روی سرور جدید نصب نشده.
  • سرویس کرون متوقف شده.
  • کار شکست می‌خوره (کد خروج غیرصفر)؛ وقتی فقط در صورت موفقیت پینگ می‌کنید.
  • کار گیر می‌کنه و هیچ‌وقت تموم نمی‌شه.
  • سرور در زمان مقرر خاموش یا در دسترس نیست.

درستی خروجی رو چک نمی‌کنه؛ بکاپی که یه فایل خالی می‌نویسه هم با کد ۰ تموم می‌شه. برای کارهای مهم، قبل از پینگ یه بررسی ساده (حجم فایل، تعداد ردیف) اضافه کنید.

راه‌اندازی در noc724

یه مانیتور کرون جاب بسازید، فاصله‌ی مورد انتظار و مهلت رو تعیین کنید و آدرس رو توی کار کپی کنید. اگه پینگ دیر بشه با پیامک، تلگرام یا بله هشدار می‌گیرید و مانیتور هر بار اعلام حضور رو توی تاریخچه‌اش نشون می‌ده تا زمان‌بندی اجرا به اجرا رو یه‌جا ببینید.

پرسش‌های پرتکرار

  • توی curl از --retry استفاده کنید تا مشکل‌های کوتاه شبکه هشدار اشتباه ندن. اگه پینگ واقعاً شکست بخوره، مانیتور هشدار می‌ده؛ که درسته، چون نمی‌تونید مطمئن بشید کار اجرا شده.

  • بله؛ خیلی از تنظیمات وقتی کار شکست می‌خوره یه آدرس جدا رو پینگ می‌کنن یا کد خروج رو می‌فرستن، تا از شکست فوراً باخبر بشید نه بعد از تموم شدن مهلت.

  • نه. یه درخواست HTTP کوچیک در پایان اجراست و معمولاً کمتر از یه ثانیه طول می‌کشه.

اشتراک‌گذاری مقاله:ایکستلگراملینکدینفیسبوکردیت
noc724

نویسنده

تیم noc724

تیم فنی مانیتورینگ آپتایم

ما noc724 رو می‌سازیم و اداره می‌کنیم؛ سرویس مانیتورینگ آپتایمی که سایت، سرور و API رو از چند شهر ایران چک می‌کنه. این راهنماها از مشکل‌هایی میان که خودمون و کاربرهامون موقع آنلاین نگه داشتن سرویس‌ها باهاشون روبه‌رو می‌شیم.

تماس با تیم

تخصص:مانیتورینگ کرون

سؤالی دارید؟تماس با پشتیبانی
پیشنهادی دارید؟بفرستید

تازه‌ترین مقاله‌ها