مانیتورینگ cron
کارهای زمانبندیشده و cron jobها را با check-inهای HTTP مانیتور کنید. وقتی کاری check-in نفرستد، از طریق ایمیل، webhook یا یکپارچگیهای دیگر باخبر شوید و اجراهای ناموفق را در کنسول ببینید. SDK لازم نیست.
کارهای زمانبندیشده و cron jobهای خود را مانیتور کنید. وقتی check-inی نرسد، ابرووا تریس از طریق یکپارچگیهایی که تنظیم کردهاید خبرتان میکند و اجراهای ناموفق را ثبت میکند. SDK لازم نیست؛ هر کلاینت HTTP میتواند check-in بفرستد.
۳ مانیتور cron رایگان در هر ماه. هر مانیتور اضافه ماهانه ۲٬۰۰۰ تومان هزینه از کیف پول دارد؛ قیمتها را ببینید. خود check-inها هزینهای ندارند.
ab_srv_…) را در هدر X-API-Key میفرستند. آنها را از سرور یا CI و با یک متغیر محیطی اجرا کنید؛ هرگز از داخل اپ.مانیتورینگ cron#
کارهای زمانبندیشده و cron jobها را با check-inهای HTTP مانیتور کنید. برای check-inهای نرسیده از طریق ایمیل، webhook یا یکپارچگیهای دیگر باخبر میشوید؛ اجراهای ناموفق ثبت و روی مانیتور نمایش داده میشوند. SDK لازم نیست؛ هر کلاینت HTTP میتواند check-in بفرستد.
چطور کار میکند
- ساختن مانیتور: در کنسول ابرووا یک مانیتور cron با slug یکتا، زمانبندی (عبارت cron یا فاصلهی زمانی) و مهلت اضافه تعریف کنید.
- ارسال check-in: cron job شما هر بار که اجرا میشود یک HTTP POST به API مربوط به check-in میفرستد. SDK لازم نیست؛ فقط یک فراخوانی سادهی HTTP.
- تشخیص کارهای اجرانشده: ابرووا تریس هر ۵ دقیقه همهی مانیتورها را بررسی میکند. اگر check-in دیر شده باشد (بیشتر از فاصلهی مورد انتظار بهعلاوهی مهلت اضافه)، وضعیت مانیتور به «missed» تغییر میکند.
- دریافت اعلان: وقتی کاری اجرا نشده باشد، اعلان به یکپارچگیهایی که روی مانیتور انتخاب کردهاید (ایمیل، Webhook و غیره) فرستاده میشود.
ساختن مانیتور (داشبورد)
- در کنسول ابرووا، پروژهتان را باز کنید ← ابرووا تریس ← Crons
- روی «مانیتور جدید» کلیک کنید
- جزئیات مانیتور را پر کنید (پیکربندی پایین را ببینید)
- در صورت تمایل، کانالهای اعلان را از میان یکپارچگیهای فعال انتخاب کنید
- برای ذخیره روی «ساخت مانیتور» کلیک کنید
مدیریت مانیتورها (ساختن، ویرایش، توقف موقت، حذف) نقش admin یا owner میخواهد؛ همهی نقشها میتوانند مانیتورها و تاریخچهی check-inهایشان را ببینند. نقشها و دسترسیها را ببینید.
پیکربندی مانیتور
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| Name | string | بله | نام توصیفی (مثلاً «Daily Database Backup») |
| Slug | string | بله | شناسهی یکتایی که در API مربوط به check-in استفاده میشود (مثلاً «daily-backup»). خودکار از روی نام ساخته میشود. |
| Schedule | string | خیر | عبارت cron (مثلاً «0 2 * * *»). اگر تنظیم شود، فاصلهی مورد انتظار را همین تعیین میکند. |
| Expected Interval | number | بله | هر چند وقت یک بار کار باید اجرا شود، بر حسب دقیقه (پیشفرض: ۶۰). وقتی عبارت cron تنظیم نشده باشد استفاده میشود. |
| Grace Period | number | بله | دقیقههای اضافهی انتظار پیش از missed حساب کردن (پیشفرض: ۵) |
| Environment | string | خیر | فیلتر بر اساس محیط (مثلاً production) |
| Notification Channels | multi-select | خیر | از میان یکپارچگیهای فعال خود انتخاب کنید |
ارسال check-in از کارها
وقتی cron job اجرا میشود، یک HTTP POST به endpoint مربوط به check-in بفرستید. با کلید سرور پروژه (ab_srv_...) در هدر X-API-Key احراز هویت کنید. اگر slug هنوز وجود نداشته باشد، مانیتور خودکار ساخته میشود.
cron jobها روی سرورهای شما اجرا میشوند، پس از کلید سرور استفاده کنید. کلید اپ (ab_live_...) هم تا وقتی تنظیم پروژهی server routeها به server secret نیاز دارند خاموش است پذیرفته میشود؛ اما این کلید داخل اپهای شما منتشر میشود، پس هر کسی آن را استخراج کند میتواند check-in جعلی «ok» بفرستد. وقتی کارهایتان از کلید سرور استفاده کردند، این تنظیم را روشن کنید. کلید سرور و routeهای سرور را ببینید.
اگر check-inی با slugی بفرستید که وجود ندارد، ابرووا تریس خودکار مانیتوری با تنظیمات پیشفرض (فاصلهی ۶۰ دقیقه، مهلت اضافهی ۵ دقیقه) میسازد. بعد میتوانید آن را در داشبورد شخصیسازی کنید.
API مربوط به check-in
| فیلد | نوع | الزامی | توضیح |
|---|---|---|---|
monitor_slug | string | بله | slug یکتای مانیتور |
status | string | بله | "ok"، "error" یا "in_progress" |
check_in_id | string | خیر | UUID برای دنبال کردن کارهای چندمرحلهای (بهصورت `id` از in_progress برگردانده میشود) |
duration_ms | number | خیر | مدت اجرای کار بر حسب میلیثانیه |
environment | string | خیر | نام محیط (مثلاً "production") |
message | string | خیر | پیام یا جزئیات خطا (اختیاری) |
مثالها
check-in ساده (curl)
وقتی کار با موفقیت تمام شد، یک check-in با وضعیت «ok» بفرستید:
curl -X POST https://trace.abrova.ir/api/cron-monitors/check-in \
-H "X-API-Key: ab_srv_your_server_secret" \
-H "Content-Type: application/json" \
-d '{
"monitor_slug": "daily-backup",
"status": "ok",
"duration_ms": 4500
}'گزارش خطا (curl)
اگر کار شکست خورد، آن را با وضعیت «error» گزارش کنید:
curl -X POST https://trace.abrova.ir/api/cron-monitors/check-in \
-H "X-API-Key: ab_srv_your_server_secret" \
-H "Content-Type: application/json" \
-d '{
"monitor_slug": "daily-backup",
"status": "error",
"message": "Connection to database timed out"
}'کار چندمرحلهای (curl)
برای کارهای طولانی، با «in_progress» شروع کنید و با «ok» یا «error» تمام کنید:
# Step 1: Mark job as in_progress (returns a check_in_id)
CHECK_IN_ID=$(curl -s -X POST https://trace.abrova.ir/api/cron-monitors/check-in \
-H "X-API-Key: ab_srv_your_server_secret" \
-H "Content-Type: application/json" \
-d '{"monitor_slug": "nightly-report", "status": "in_progress"}' \
| jq -r '.id')
# ... run your job ...
# Step 2: Mark job as complete
curl -X POST https://trace.abrova.ir/api/cron-monitors/check-in \
-H "X-API-Key: ab_srv_your_server_secret" \
-H "Content-Type: application/json" \
-d "{
\"monitor_slug\": \"nightly-report\",
\"status\": \"ok\",
\"check_in_id\": \"$CHECK_IN_ID\",
\"duration_ms\": 120000
}"Node.js
const axios = require('axios');
const API_KEY = process.env.ABROVA_SERVER_SECRET; // ab_srv_...
const BASE_URL = 'https://trace.abrova.ir/api/cron-monitors/check-in';
async function runDailyBackup() {
const start = Date.now();
try {
// ... your backup logic here ...
await performBackup();
// Report success
await axios.post(BASE_URL, {
monitor_slug: 'daily-backup',
status: 'ok',
duration_ms: Date.now() - start,
}, { headers: { 'X-API-Key': API_KEY } });
} catch (error) {
// Report failure
await axios.post(BASE_URL, {
monitor_slug: 'daily-backup',
status: 'error',
duration_ms: Date.now() - start,
message: error.message,
}, { headers: { 'X-API-Key': API_KEY } });
}
}Python
import os
import requests
import time
API_KEY = os.environ["ABROVA_SERVER_SECRET"] # ab_srv_...
BASE_URL = "https://trace.abrova.ir/api/cron-monitors/check-in"
def run_daily_backup():
start = time.time()
headers = {"X-API-Key": API_KEY, "Content-Type": "application/json"}
try:
# ... your backup logic here ...
perform_backup()
# Report success
requests.post(BASE_URL, json={
"monitor_slug": "daily-backup",
"status": "ok",
"duration_ms": int((time.time() - start) * 1000),
}, headers=headers)
except Exception as e:
# Report failure
requests.post(BASE_URL, json={
"monitor_slug": "daily-backup",
"status": "error",
"duration_ms": int((time.time() - start) * 1000),
"message": str(e),
}, headers=headers)Laravel (دستور Artisan)
<?php
// In your scheduled command or Kernel.php
use Illuminate\Support\Facades\Http;
$start = microtime(true);
try {
// ... your job logic ...
$this->performCleanup();
Http::withHeaders([
'X-API-Key' => env('ABROVATRACE_SERVER_SECRET'),
])->post('https://trace.abrova.ir/api/cron-monitors/check-in', [
'monitor_slug' => 'daily-cleanup',
'status' => 'ok',
'duration_ms' => (int)((microtime(true) - $start) * 1000),
]);
} catch (\Exception $e) {
Http::withHeaders([
'X-API-Key' => env('ABROVATRACE_SERVER_SECRET'),
])->post('https://trace.abrova.ir/api/cron-monitors/check-in', [
'monitor_slug' => 'daily-cleanup',
'status' => 'error',
'message' => $e->getMessage(),
]);
}اسکریپت Bash
هر cron jobی را با یک فراخوانی سادهی check-in در انتها بپوشانید:
#!/bin/bash
# Add this to the end of your cron job script
API_KEY="$ABROVA_SERVER_SECRET" # ab_srv_...
# Run your job
/usr/local/bin/my-backup-script.sh
# Report based on exit code
if [ $? -eq 0 ]; then
curl -s -X POST https://trace.abrova.ir/api/cron-monitors/check-in \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"monitor_slug": "my-backup", "status": "ok"}'
else
curl -s -X POST https://trace.abrova.ir/api/cron-monitors/check-in \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"monitor_slug": "my-backup", "status": "error"}'
fiوضعیتهای مانیتور
آخرین check-in موفق بوده است
آخرین check-in خطا گزارش کرده است
در زمان مورد انتظار هیچ check-inی نرسیده است
مانیتور موقتاً متوقف است
مرجع API
cron job شما check-inها را به یک endpoint عمومی میفرستد:
POST /api/cron-monitors/check-in
این endpoint یک اعتبارنامهی پروژه را در هدر X-API-Key میگیرد: کلید سرور (توصیهشده)، یا کلید اپ تا وقتی تنظیم «server routeها به server secret نیاز دارند» خاموش است.
مانیتورها را در کنسول ابرووا مدیریت کنید. اینکه کاربر واردشده آنجا چه کارهایی میتواند بکند به نقشش بستگی دارد؛ نقشها و دسترسیها را ببینید.
بهترین روشها
slugهایی مثل «daily-backup»، «hourly-sync» یا «weekly-report» انتخاب کنید که کار را بهروشنی معرفی کنند.
برای نوسان طبیعی مدت اجرای کار فاصلهی کافی بگذارید. مهلت ۵ دقیقه برای بیشتر کارها کافی است؛ برای کارهایی با زمان اجرای متغیر مهلت بیشتری بدهید.
وقتی کاری شکست میخورد همیشه check-inی با وضعیت «error» بفرستید. اینطور هم کارهای اجرانشده و هم کارهای ناموفق را میبینید.
duration_ms را در check-inها بفرستید تا افت عملکرد را در طول زمان ببینید.
برای کارهایی که دقیقهها یا ساعتها طول میکشند، الگوی in_progress و سپس ok/error را به کار ببرید. اینطور میتوانید «هنوز در حال اجرا» را از «اجرانشده» تشخیص دهید.
دستکم یک یکپارچگی وصل کنید (ایمیل یا Webhook بدون اتصال به خارج از ایران کار میکنند) تا وقتی کاری اجرا نشد هشدار بگیرید.
عیبیابی
مانیتور missed نشان میدهد اما کار اجرا شده است؟
- مطمئن شوید کلید درست و فعال است؛ وضعیت HTTP پاسخ check-in را ببینید؛ 401 یعنی رد شده است
- مطمئن شوید
monitor_slugدقیقاً یکی است - مطمئن شوید درخواست check-in به سرور میرسد (شبکه و firewall را بررسی کنید)
- فاصلهی مورد انتظار را بازبینی کنید؛ اگر کار هر ۲۴ ساعت اجرا میشود، فاصله را ۱۴۴۰ دقیقه بگذارید
- مهلت اضافه را بررسی کنید؛ اگر زمان شروع کار متغیر است آن را بیشتر کنید
اعلان کارهای اجرانشده نمیرسد؟
- مطمئن شوید روی مانیتور کانال اعلان انتخاب شده است
- مطمئن شوید یکپارچگیهای انتخابشده فعالاند (در ابرووا تریس ← یکپارچهسازیها تستشان کنید)
- تشخیص کارهای اجرانشده هر ۵ دقیقه انجام میشود؛ ممکن است کمی تأخیر باشد
- مطمئن شوید مانیتور فعال است (غیرفعال یا خاموش نشده باشد)
API مربوط به check-in خطای 401 میدهد؟
- مطمئن شوید کلید با
ab_srv_(یاab_live_) شروع میشود - اگر پاسخ
server_credential_requiredمیگوید، تنظیم پروژهی server routeها به server secret نیاز دارند روشن است و کار کلید اپ را فرستاده؛ از کلید سرور استفاده کنید - مطمئن شوید کلید در هدر
X-API-Keyفرستاده میشود - مطمئن شوید کلید API متعلق به پروژهی فعالی است که ابرووا تریس در آن فعال است
نمیتوانید مانیتور دیگری بسازید؟
- ۳ مانیتور رایگان است؛ مانیتورهای بیشتر از کیف پول سازمان پرداخت میشوند (ماهانه ۲٬۰۰۰ تومان برای هر مانیتور اضافه)
- کیف پول را در کنسول ابرووا شارژ کنید، یا مانیتوری را که دیگر لازم ندارید حذف کنید
مانیتور خودکارساخته تنظیمات اشتباه دارد؟
- مانیتورهای خودکارساخته از مقادیر پیشفرض استفاده میکنند (فاصلهی ۶۰ دقیقه، مهلت ۵ دقیقه)
- در کنسول ابرووا به ابرووا تریس ← Crons بروید و مانیتور را ویرایش کنید
- یا از اول مانیتور را با تنظیمات دلخواه در داشبورد بسازید