Tracker.ru На главную

Heartbeat-мониторинг: cron-тапсырмаларын тексеру қызметі

Heartbeat — бұл reverse-мониторинг: сіздің cron-сценарийіңіз сәтті орындалғаннан кейін серверге өзі ping жібереді, ал ping уақытында келмесе — алерт жіберіледі. Tracker.ru cron-тапсырмаларын мониторингтеу қызметі: ping-эндпоинт `https://hb.tracker.ru/ping/{token}`, cron, systemd, GitHub Actions және Laravel scheduler үшін дайын интеграциялар, Telegram, MAX, Email, Webhook ескертулері. Барлық тарифтерге қосылған, бөлек төлем жоқ.

Heartbeat-мониторинг Tracker.ru-да — бұл reverse-мониторинг: сіздің cron-сценарийіңіз немесе фондық процесіңіз сәтті орындалғаннан кейін біздің серверге өзі ping жібереді, ал ping уақытында келмесе — алерт жіберіледі. Бұл әдеттегі URL uptime мониторингіне қарама-қарсы: онда Tracker.ru сіздің сайтыңызды өзі тартып, жауапты тексереді; мұнда — сіздің тапсырмаңыз өзі «мен тірімін» дейді. Tracker.ru cron-тапсырмаларын мониторингтеу қызметін ұсынады — бұл healthchecks.io ресейлік баламасы, қазақ және орыс тілінде heartbeat-мониторингпен, cron, systemd, GitHub Actions және Laravel scheduler үшін дайын quickstart-сниппеттермен, Telegram, MAX, Email және Webhook арналары арқылы cron-ды өткізу туралы ескертулермен. Бұл толыққанды heartbeat-мониторинг — қазақ және орыс тілінде интерфейс, құжаттама, қолдау және рубль билингімен. Баптау бойынша толық нұсқаулық — /docs/features/heartbeat-monitoring құжаттамасында.

Heartbeat-мониторинг дегеніміз не және ол cron-тапсырмалары үшін не үшін қажет?

Әдеттегі URL-мониторинг pull-моделі бойынша жұмыс істейді: Tracker.ru белгіленген аралықпен сіздің сайтыңызға HTTP-сұраныс жасап, жауабын қарайды. Бұл жалпыға қол жетімді беттер мен API тексеру тапсырмасын жабады, бірақ cron-тапсырмалар үшін жұмыс істемейді: түнгі сағат үште бэкап «сырттан сұрауға» болмайды, оның жалпыға қол жетімді endpoint жоқ. Тапсырманың орындалғанына көз жеткізу үшін push-мониторинг cron қажет — тапсырма сервиске сәтті аяқталу туралы өзі хабарлайды.

Heartbeat-мониторинг (оны dead-man's-switch немесе cron-мониторинг деп те атайды) дәл осыны жасайды: сіз Tracker.ru-да монитор жасайсыз, бірегей token және https://hb.tracker.ru/ping/{token} түріндегі URL аласыз, негізгі әрекеттен кейін cron-командаға curl жолын қосасыз. Тапсырма орындалса — ping келді, монитор жасыл. Тапсырма құласа, басталмаса, ілінсе немесе байланысын жоғалтса — ping уақытында келмейді, ал Tracker.ru cron-ды өткізу туралы ескертулерді Telegram, MAX, Email немесе Webhook-та жібереді.

Типтік сценарийлер: түнгі дерекқор бэкаптары, S3-ке және rsync арқылы экспорт, Airflow немесе Dagster ETL-пайплайндары, тапсырмаларды өңдеу кезектері (Laravel Horizon, Sidekiq, Celery), Laravel scheduler немесе Django celerybeat scheduled tasks, CI/CD жағындағы кестелер (GitHub Actions-те schedule:), бизнеске арналған тұрақты есептер. Барлық осы жағдайлар үшін push-мониторинг cron «менің тапсырмам соңғы тәулікте орындалды ма» сұрағына cron-демонның логтарын талдамай немесе бөлек health-эндпоинтті көтермей-ақ тікелей жауап береді.

Tracker.ru ping арқылы cron-тапсырмаларды қалай мониторингтейді?

Архитектурасы қарапайым. Tracker.ru жағында hb.tracker.ru поддоменінде Go-сервис apiServer жұмыс істейді. Ол GET https://hb.tracker.ru/ping/{token} (немесе body-мен CI/CD сценарийлері үшін POST) HTTP-сұраныстарын қабылдайды және осы token-ы бар монитор ping алғанын растайды. Token — бұл сіздің есептік жазбаңыздағы нақты мониторға бекітілген 32-таңбалы hex-жол; token монитор жасалған кезде құрылады және оны көп сценарийде жасырын ұстаудың қажеті жоқ — үшінші тарап ping шақырса да, ешқандай зиян болмайды, монитор жай ғана артық растау алады.

Ping-ке қысқа хабарламаны міндетті емес түрде қосуға болады — query-параметрде ?msg=... немесе POST-формада message=.... Хабарлама 64 таңбамен шектелген (бұл Unicode рундар, байт емес — кириллица үшін бұл UTF-8 128 байтқа дейін) және монитордың last_ping_message өрісіне түседі. Оған бэкап-файлдың атын, сервердің hostname-ін, exit-code немесе джоб ұзақтығын қою ыңғайлы — бұл /my/heartbeat/{id}-да көрінеді және postfact талдауға көмектеседі.

Монитордың негізгі баптаулары: period (сіздің тапсырмаңыз ping-ті қаншалықты жиі жіберуі керек), grace (өткізіп жіберу деп санағанша period-тен тыс қанша күту керек) және alert_after_misses (алертке дейін қатарынан қанша өткізіп алу — жалғыз flap-тардан қорғау). Минималды period тарифке байланысты: Free-де — 5 минут (300 секунд), Basic пен Pro-да — 1 минут (60 секунд). Cron үшін шынайы мәндер — 5 минуттан 24 сағатқа дейін; әрбір ping үшін бір token-ге минутына 30 сұраныс rate-limit бар (егер сценарийіңіз циклге түсіп әрбір 100 миллисекунд сайын ping жібере бастаса, артық сұраныстар 429 қайтарады).

Өткізіп алу кезінде не болады: егер period + grace ішінде Tracker.ru бір де ping алмаса (alert_after_misses ескерумен), монитор down күйіне ауысады, ал таңдалған арналарға cron-ды өткізу туралы ескертулер ұшады. Әрбір ping және әрбір күй өзгерісінің тарихы /my/heartbeat/{id}-да сақталады — онда орташа кідіріс, соңғы 7 күндегі uptime және соңғы хабарламаның мәтіні де көрінеді.

Heartbeat-ті 3 қадамда қалай баптау керек?

Бар cron-тапсырмаға heartbeat-мониторингті қосу — бірнеше минут. Сервер жағында ешқандай баптау қажет емес, тек Tracker.ru жеке кабинетіне кіру қажет.

1-қадам. /my/heartbeat?lang=kk бетін ашыңыз, «Создать монитор» батырмасын басыңыз. Атын толтырыңыз (мысалы, nightly-backup), ping арасындағы периодты таңдаңыз (cron-ның көпшілігіне «1 сағат» немесе «1 күн» жеткілікті), қажет болса grace және alert_after_misses көрсетіңіз. Хабарлама арналарын қосыңыз (Telegram, MAX, Email, Webhook) — олар жалпы профиль баптауларынан тартылады.

2-қадам. Tracker.ru token құрады және https://hb.tracker.ru/ping/{token} түріндегі URL көрсетеді (32-таңбалы hex-token, мониторға бірегей). URL-ді көшіріп алыңыз — ол cron-жолы үшін қажет.

3-қадам. Cron-тапсырмаңызға негізгі командадан кейін curl қосыңыз. Bash үшін ең қарапайым нұсқа — && curl -fsSL https://hb.tracker.ru/ping/{token}. Бұл «алдыңғы команда exit code 0 қайтарса — ping жібер» дегенді білдіреді. Егер негізгі сценарий құласа, ping кетпейді, ал Tracker.ru period + grace арқылы Telegram, MAX, Email және Webhook-та cron-ды өткізу туралы ескертулерді жібереді.

Төрт танымал сценарийге арналған дайын шаблондар (cron, systemd timer, GitHub Actions, Laravel scheduler) — келесі бөлімде және құжаттамада.

Қандай дайын интеграциялар бар?

Tracker.ru — типтік жұмыс сценарийлеріне есептелген cron-тапсырмаларды мониторингтеу қызметі. Төмендегі дайын quickstart-сниппеттер — бұл сіздің /my/heartbeat-тегі token-ге <token> ауыстырып, жобаңызға енгізе алатын жұмыс мысалдары.

Bash + cron. Ең жиі кездесетін жағдай — crontab -e арқылы түнгі бэкап немесе тұрақты есеп. && curl конструкциясы ping-ті тек негізгі команданың сәтті аяқталуында ғана жібереді:

0 3 * * * /usr/local/bin/backup.sh && curl -fsSL https://hb.tracker.ru/ping/<token>

-fsSL жалаушалары маңызды: -f HTTP-қателерді stdout-та өшіреді, -s прогресс-барды басады, -S қателерді stderr-де қалдырады, -L редиректтерді қадағалайды. Cron-демон stderr-ді поштаға жинаса, curl-ден артық хаттар келмейді.

Systemd timer. Заманауи Linux-серверлер үшін systemd timer cron-ды жиі алмастырады. Ping .service-файлындағы ExecStartPost арқылы қосылады — ол негізгі команда exit code 0 қайтарған кезде ғана орындалады:

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
ExecStartPost=/usr/bin/curl -fsSL https://hb.tracker.ru/ping/<token>

Жұп .timer файлы кестені орнатады (OnCalendar=daily), ал ping-тің өзі негізгі service-юнит арқылы басқарылады. Бұл systemd өзі exit code-ды journalctl-те логтаумен ыңғайлы, ал ping өткізіп алған кезде логтардан сценарий құлағанын немесе жай басталмағанын көруге болады.

GitHub Actions. GitHub Actions-те scheduled-workflow үшін token secrets.TRACKER_PING_TOKEN-ге қойылады, ал ping соңғы step ретінде қосылады. Алдыңғы step-тер құласа, әдепкі бойынша келесілері skip болады — ping кетпейді, ал Tracker.ru өткізіп алуды есептейді:

on:
  schedule:
    - cron: '0 3 * * *'
jobs:
  backup:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./scripts/backup.sh
      - run: curl -fsSL https://hb.tracker.ru/ping/${{ secrets.TRACKER_PING_TOKEN }}

Ping-ті тек алдыңғы step-тің сәттілігі кезінде жіберу маңызды болса — if: success() қосыңыз (бұл әдепкі мінез-құлық). Әрқашан, оның ішінде сәтсіздіктен кейін де ping жіберу қажет болса — if: always() (олай жасамаған жөн, әйтпесе heartbeat мағынасынан айырылады).

Laravel scheduler. Laravel-жобаларда кіріктірілген scheduler-ді ->onSuccess() немесе ->after() хук-тарымен қолдану ыңғайлы — олар команда сәтті орындалғаннан кейін ғана шақырылады:

$schedule
    ->command('backup:run')
    ->daily()
    ->onSuccess(fn () => Http::get(config('services.tracker.ping_url')));

config/services.php-да tracker.ping_url мәнімен https://hb.tracker.ru/ping/{token} орналастырыңыз (.env арқылы). Сәтті іске қосылғанда scheduler өзі ping атады, сәтсіздікте — жоқ.

supervisord (PROCESS_STATE_RUNNING event listener), Airflow (on_success_callback), Sidekiq, Celery және басқа job-runner-лар да дәл осылай жұмыс істейді. Қателерді өңдеумен егжей-тегжейлі мысалдар — /docs/features/heartbeat-monitoring құжаттамасында.

Tracker.ru тәсілі фокусты cron-сервистерден немен ерекшеленеді?

Бұл нишеде тек cron-мониторингпен айналысатын фокусты SaaS-сервистер бар. Бұл қалыпты — нақты командалар үшін олар жақсы келеді, басқалар үшін, керісінше, heartbeat-ты ортақ платформаның құрамында ұстау ыңғайлы. Үгіт-насихатсыз, фактілер бойынша.

healthchecks.io — cron-мониторингке арналған open-source SaaS. Расталды: өнімнің фокусы — cron jobs, scheduled tasks және server health checks; UI және құжаттама ағылшын тілінде; билинг USD-те (тегін план + ай сайын 5-тен 80 долларға дейін ақылы); код GitHub-та BSD-3 лицензиясы бойынша жарияланған (healthchecks/healthchecks), Docker-мен self-hosted нұсқасы бар. Сізге тек cron-мониторинг қажет болса, ағылшын UI және доллармен билингпен жұмыс істеуге дайын болсаңыз — healthchecks.io-ны фокусты SaaS ретінде қараңыз немесе self-hosted нұсқасын өзіңізде орналастырыңыз.

cronitor.io — cron-тапсырмаларын мониторингтеудің фокусты SaaS-сервисі. Билинг USD-те, интерфейс ағылшын тілінде. Батыс SaaS-та отырған және фокусты өнімге доллармен төлеуге қарсы емес командалар үшін — қалыпты таңдау.

Tracker.ru не нәрсені басқаша жасайды. Бізде heartbeat — бөлек өнім емес, uptime-платформаның бөлігі. Бір жазылымда: үш елден (Ресей, ЕО, Қазақстан) сайт тексеру арқылы URL-мониторинг, сертификат мерзімі туралы алертпен SSL-мониторинг, pixel-diff-пен screenshot-мониторинг, maintenance windows, плюс сол тарифтерде heartbeat. Билинг рубльде, қолдау орыс және қазақ тілінде, интерфейс орыс тілінде. Бір сайт + бірнеше cron-тапсырма + екі биллингті екі сервиске бөлгісі келмеген кезде ыңғайлы.

Тікелей шақыру (нейтралды): сіздің тапсырмаңыз тек cron-мониторинг болса, аталған альтернативаларды қараңыз, олар оны жақсы жасайды. Tracker.ru рубльге орыс тілді қолдаумен бір жазылымда heartbeat плюс URL плюс SSL плюс скриншоттар болғанын қаласаңыз сізге келеді.

Heartbeat-монитор жасау

Көп қойылатын сұрақтар

Heartbeat-мониторинг қанша тұрады?

Heartbeat Tracker.ru-дың барлық тарифтеріне қосылған, бөлек төлем жоқ. Тегін Free тарифінде 1 heartbeat-монитор қол жетімді (бұл бір pet-жоба немесе жеке бэкап үшін жеткілікті), Basic-те — 5 монитор, Pro-да — 20. Лимит — бір уақытта белсенді мониторлар саны, тәулігіне ping саны емес: бір монитордың ішінде қанша ping жіберуге де болады, бір token-ге минутына 30 сұраныс шектеуімен (сценарийдегі lup-тен қорғау).

Ping арасындағы минималды период қандай?

Минималды period тарифке байланысты: Free — 5 минут (300 секунд), Basic — 1 минут (60 секунд), Pro — 1 минут (60 секунд). Бұл тарифтік матрицада жазылған дәл сол мәндер — шындығында қысқа периодтар жоқ, Basic пен Pro үшін минималды қадам — бір минут. period-ке grace (қосымша уақыт, оның ішінде ping өткізіп алу әлі алерт болып саналмайды) қосылады. Cron үшін шынайы периодтар — 5 минуттан 24 сағатқа дейін: бэкаптар әдетте тәулігіне 1 рет, кезектерді тазалау — сағатына бір рет, тұрақты есептер — тәулігіне бірнеше рет.

Қатарынан N өткізіп алудан кейін ғана алерт алу қалай?

Монитор баптауларында alert_after_misses өрісі бар — монитор down күйіне ауысып ескерту жіберілгенше қанша рет қатарынан ping өткізіп алу керек. 1 мәні «бірінші өткізіп алудан кейін бірден алерт» (агрессивті, бірақ шулы), 2 немесе 3 мәні — «екі-үш қатарынан өткізіп алудан кейін ғана алерт» (қысқа уақытты желілік flap немесе жалғыз cron miss-терден жалған іске қосылудан қорғау). Маңызды тапсырмалар үшін (бэкаптар, билинг) 1 қою жөн; шулы немесе жиі fluk-тайтындар үшін — 2-3.

Ping-ті бөгде сұраныстардан қалай қорғау керек?

Tracker.ru-да міндетті емес екі факторлы қорғаныс бар: auth_mode='token_and_secret' плюс X-Heartbeat-Secret header (Go-воркер жағында constant-time compare). Әдепкі бойынша барлық мониторлар token_only режимінде жасалады — 32-таңбалы hex-token өзі жеткілікті қорғаныс береді: оны brute force-пен табу мүмкін емес, ал үшінші тарап оны бір жолмен білсе де, оның жасай алатыны — артық ping жіберу, бұл зиян келтірмейді. Екі факторлы қорғаныс қауіпсіздікке жоғары талаптар болғанда қажет (мысалы, монитор сіздің инфрақұрылымыңызда side-effect триггерлесе немесе token жалпыға қол жетімді репозиторийде сақталса). Монитор баптауларында қосылады, secret бөлек сақталады, header-де жіберіледі — curl -H 'X-Heartbeat-Secret: <secret>' https://hb.tracker.ru/ping/<token>. Rate limit — token-ге минутына 30 сұраныс.

Ping cron-дағы менің қатемнен келмесе не істеу керек?

Cron-ды өткізу туралы алерт бәрібір келеді — Tracker.ru сценарий мәні бойынша құлағанын немесе обвязкадағы баг-тан құлағанын ажыратпайды. /my/heartbeat/{id}-да барлық ping тарихы көрінеді (соңғы рет қашан келді, қандай хабарламамен, қандай IP-ден), және timestamp-тар бойынша тапсырманың қашан жұмысын тоқтатқанын түсінуге болады. Recovery — келесі сәтті ping: сценарий қайтадан жұмыс істеп ping жібергеннен кейін, монитор up күйіне ауысады және арналарға қалпына келу туралы хабарлама кетеді. Сіздің cron-тапсырмаңыз бұл жолы заңды түрде орындалмауы керек болса (мысалы, мерекелерде немесе maintenance терезесінде) — мониторды /my/heartbeat/{id} арқылы паузаға қойыңыз, келесі қайта іске қосылғанға дейін алерттер болмайды.


Heartbeat-монитор жасау — /sign-up. Баптау бойынша толық нұсқаулық — /docs/features/heartbeat-monitoring құжаттамасында. Тарифтерді салыстыру — /pricing.