مانیتورینگ کران
مانیتور کران یک جاب زمانبندیشده را میپاید و وقتی خطا بدهد، اصلاً اجرا نشود (چکاین
نرسیده) یا بیش از حد طول بکشد (تایماوت) اعتراض میکند. چکاینها از هر SDK رسمی Sentry
میآیند یا از یک curl ساده در خط crontab.
مفاهیم
| اصطلاح | معنی |
|---|---|
| مانیتور | جابی که انتظار خبرش را دارید، با یک اسلاگ شناخته میشود (nightly-backup) |
| زمانبندی | یک عبارت crontab پنجبخشی، یا یک بازه (هر ۳۰ دقیقه) |
| چکاین | یک پیام از جاب: in_progress، ok یا error |
| محیط | هر محیط وضعیت خودش را نگه میدارد تا staging نتواند خرابی production را پنهان کند |
| مهلت | checkin_margin دقیقه ارفاق بعد از زمان مورد انتظار، پیش از آنکه نرسیده حساب شود |
| بیشینهٔ اجرا | max_runtime دقیقه پس از چکاین in_progress، پیش از آنکه تایماوت حساب شود |
راهاندازی — گزینهٔ ۱: ساخت مانیتور از دل جاب
SDKهای Sentry میتوانند مانیتور را با اولین چکاین بسازند یا بهروزرسانی کنند، پس زمانبندی کنار خود کد میماند:
from sentry_sdk.crons import monitor
@monitor(monitor_slug="nightly-invoices")
def nightly_invoices():
...
const checkInId = Sentry.captureCheckIn(
{ monitorSlug: "nightly-invoices", status: "in_progress" },
{
schedule: { type: "crontab", value: "0 3 * * *" },
checkinMargin: 5,
maxRuntime: 30,
timezone: "Asia/Tehran",
},
);
try {
await run();
Sentry.captureCheckIn({ checkInId, monitorSlug: "nightly-invoices", status: "ok" });
} catch (e) {
Sentry.captureCheckIn({ checkInId, monitorSlug: "nightly-invoices", status: "error" });
throw e;
}
لاراول:
$schedule->command('invoices:generate')->dailyAt('03:00')->sentryMonitor('nightly-invoices');
راهاندازی — گزینهٔ ۲: HTTP ساده (بدون SDK)
هر جابی که بتواند curl اجرا کند میتواند چکاین بفرستد. کلید عمومی DSN در مسیر، آن را احراز
میکند:
# ساده: یک فراخوانی وقتی جاب تمام شد
curl -X POST "$ERRORA/api/$PROJECT_ID/cron/nightly-backup/$PUBLIC_KEY/?status=ok"
# بهتر: اجرا را در دو سر ببندید تا مدت و تایماوت هم رصد شود
CHECK_IN=$(curl -s -X POST "$ERRORA/api/$PROJECT_ID/cron/nightly-backup/$PUBLIC_KEY/?status=in_progress" \
| python3 -c 'import json,sys; print(json.load(sys.stdin)["id"])')
if /usr/local/bin/backup.sh; then
curl -X PUT "$ERRORA/api/$PROJECT_ID/cron/nightly-backup/$PUBLIC_KEY/$CHECK_IN/?status=ok"
else
curl -X PUT "$ERRORA/api/$PROJECT_ID/cron/nightly-backup/$PUBLIC_KEY/$CHECK_IN/?status=error"
fi
در یک خط crontab، معمولاً همان شکل تکمرحلهای کافی است:
0 3 * * * /usr/local/bin/backup.sh && curl -fsS -X POST "https://errora.example.com/api/$PROJECT_ID/cron/nightly-backup/$KEY/?status=ok"
پارامترهای environment= و duration= (بر حسب میلیثانیه) را هم میتوانید بفرستید.
راهاندازی — گزینهٔ ۳: ساخت مانیتور در پنل
کرانها ← مانیتور جدید. همان فیلدهایی که API میگیرد:
{
"slug": "nightly-invoices",
"name": "فاکتورهای شبانه",
"config": {
"schedule_type": "crontab",
"schedule": "0 3 * * *",
"checkin_margin": 5,
"max_runtime": 30,
"timezone": "Asia/Tehran",
"failure_issue_threshold": 1,
"recovery_threshold": 1
}
}
زمانبندی بازهای با "schedule_type": "interval" و "schedule": [30, "minute"] نوشته
میشود. واحدها: minute، hour، day، week، month، year.
ماکروهای crontab هم کار میکنند: @hourly، @daily، @midnight، @weekly، @monthly،
@yearly. همهچیز در منطقهٔ زمانی خود مانیتور ارزیابی میشود؛ پس مانیتور 0 3 * * * در
Asia/Tehran حتی با تغییر ساعت، سر ۰۳:۰۰ محلی میماند.
آستانهها — با یک تکلغزش کسی را بیدار نکنید
failure_issue_threshold— چند شکست پشتسرهم (خطا / نرسیده / تایماوت) پیش از باز شدن خطا و فعال شدن هشدارها. پیشفرض1.recovery_threshold— چند موفقیت پشتسرهم تا دوباره سالم بهحساب بیاید. پیشفرض1.
برای جابهایی که گاهی میلرزند، آستانهٔ شکست را روی 2 یا 3 بگذارید.
در پنل
صفحهٔ کرانها مانیتورها را با زمانبندی، چکاین بعدی مورد انتظار، وضعیت فعلی به تفکیک محیط و تاریخچهٔ چکاین نشان میدهد. با باز کردن یکی، چکاینهای اخیر (وضعیت، مدت، نسخه، شناسهٔ ترِیس) و آمارش را میبینید.
وضعیتها: ok، error، missed، timeout، in_progress و pending تا پیش از رسیدن اولین
چکاین.
هشدارها
تغییر وضعیت کران رویدادهای monitor.failed و monitor.recovered را فعال میکند. در
تنظیمات ← وبهوکها آنها را به یک کانال و قاعدهٔ هشدار وصل کنید — نگاه کنید به
هشدارها.
API
GET /api/v1/projects/{project_id}/monitors
POST /api/v1/projects/{project_id}/monitors
GET /api/v1/projects/{project_id}/monitors/overview
GET /api/v1/projects/{project_id}/monitors/{slug}
PATCH /api/v1/projects/{project_id}/monitors/{slug}
DELETE /api/v1/projects/{project_id}/monitors/{slug}
GET /api/v1/projects/{project_id}/monitors/{slug}/checkins
GET /api/v1/projects/{project_id}/monitors/{slug}/stats
مانیتورها علاوه بر شناسه، با اسلاگ هم آدرسپذیرند، چون کد جاب اسلاگ را میشناسد.
عیبیابی
| نشانه | علت / راهحل |
|---|---|
مانیتور در وضعیت pending مانده | هیچ چکاینی نرسیده — اسلاگ، شناسهٔ پروژه و کلید داخل آدرس را بررسی کنید |
missed بیمورد | جاب دیر اجرا میشود؛ checkin_margin را بالا ببرید یا منطقهٔ زمانی زمانبندی را درست کنید |
timeout بیمورد | max_runtime از زمان واقعی اجرای جاب کمتر است |
| جاب اجرا میشود ولی مانیتور خطا میدهد | لفافهٔ اسکریپت بهخاطر خروج ناموفق بخش دیگری از خط لوله error میفرستد — خط شل را بررسی کنید |
| مانیتورهای تکراری | دو املای متفاوت از اسلاگ؛ اسلاگها یکدست میشوند ولی nightly_backup و nightly-backup دو مانیتور جدا هستند |