Keyword check — HTTP-мониторларға қосымша тексеру: статус-кодты бақылаумен қатар Tracker.ru жауаптың денесінде берілген подстрингті іздейді және URL-ды подстринг табылған кезде ғана жұмысқа жарамды деп санайды. Бет 200 OK қайтарған, бірақ күтілген сөз жоғалған болса — URL down күйіне ауысады және хабарламалар жіберіледі.
Бұл сервер техникалық тірі болғанда, ал контент бұзылған бір топ инциденттерді жабады: бос шаблон, деплойдан кейінгі ақ бет, reverse-proxy-ден заглушка, дефейс немесе істемейтін feature-flag панелі. Keyword check-сіз мұндай жағдайлар HTTP-мониторингтен үнсіз өтіп кетеді.
Keyword check қашан керек
- Anti-deface. Подстринг — сайтта әрқашан болуға тиіс ерекше мәтіннің фрагменті (мысалы, подвалдағы copyright). Шабуылшы басты бетті ауыстырса — keyword табылмайды, алерт кетеді.
- Feature-flag SLO. Бетте
Feature: enabledсияқты маркер бар. Feature flag сынғанда және бет маркерсіз200қайтарғанда — мониторинг регрессияны ұстайды. 200-де шаблонды бақылау. Кэш ескірген HTML берді, фронтенд сынды, бірақ статус әлі 200 — күтілетін блоктағы keyword (пайдаланушы аты, нав-меню, нақты тақырып) бірден бір нәрсе дұрыс емес екенін айтады.- Status page. Жұртшылыққа арналған status-page-те «All systems operational» сияқты сөз тіркесі болады. Осы тіркес бойынша keyword-check оны «бәрі дұрыс па» мониторына айналдырады.
- Деплой нұсқасының маркері. Footer-де немесе meta-тегте нұсқа нөмірі (
v1.42.0). Деплой өтпей кетсе — нұсқа жаңартылмаса — алерт.
Қалай баптау керек
URL өңдеу формасында «Күтілетін түйін сөз» өрісін (expected_keyword) толтырыңыз. 255 таңбаға дейін кез келген подстрингті енгізуге болады: фраза, HTML-разметка фрагменті, footer-дан мәтін, CSS класының аты — күтілетін бетте міндетті түрде кездесетін кез келген нәрсе.
API арқылы:
curl -X POST https://tracker.ru/api/v1/urls \
-H "Authorization: Bearer <api_token>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/status",
"monitor_type": "http",
"period": 60,
"expected_keyword": "All systems operational"
}'
Ұзындық лимиті — 255 таңба (StoreUrlRequest-те max:255). Бұл ерекше фрагмент үшін жеткілікті; бүкіл HTML-ды өріске тықпаңыз — фронтендіңіз жұмыс істеп тұрған нұсқада көрсетуге кепілдік беретін минималды-жеткілікті подстрингті сақтаңыз.
Іске қосылу логикасы
expected_keyword берілген әрбір HTTP-тексеру схема бойынша өңделеді:
- Чекер HTTP-сұрау жасайды.
- Жауапты алады, денесін оқиды (төмендегі шектеулерді ескере отырып).
- Денеде подстрингті іздейді — case-insensitive substring match.
- Подстринг табылмаса —
keyword_not_found = trueжалаушасын көтереді, нәтиженіOk = falseетіп қояды, қателік:Expected keyword not found: <keyword>. URLdownкүйіне ауысады. - Подстринг қайта пайда болғанда —
keyword_not_foundысырылады, URL қалпына келеді, қалпына келу хабарламасы жіберіледі.
check_log кестесінде әр тексеру үшін keyword_not_found жалаушасы сақталады — бұл URL журналында «статус бойынша құлады» мен «keyword бойынша құлады» арасын ажыратуға мүмкіндік береді.
Техникалық нюанстар
- HEAD → GET автоматты ауысу. Әдепкі бойынша Tracker.ru
HEADHTTP-әдісін қолданады — ол тексерілетін сайт үшін жылдамырақ және арзанырақ. Бірақ HEAD-жауапта body жоқ, онда keyword іздейтін ештеңе жоқ. Сондықтанexpected_keywordберілсе, чекер әдісті автоматты түрдеGET-ке ауыстырады (http_checker.go:108-110). Пайдаланушы жағында ешқандай баптау қажет емес. Формада HEAD айқын таңдалса — ол еленбейді және осы URL үшін GET-пен ауыстырылады. - Case-insensitive. Іздеу регистрге сезімтал емес. Екі жағы — keyword пен жауап денесі —
strings.ToLowerарқылы (http_checker.go:168) кіші регистрге келтіріледі. ЯғниOperational,operational,OPERATIONAL— бір нәрсе. Ыңғайлы: тақырып регистрін кездейсоқ ауыстырғанда сынбайды. - Plain substring, regex емес. Өрістің мәні — қарапайым жол. Метасимволдар, топтар, якорлар жоқ. Подстрингтің әріпті көрінісі ізделеді. Regex қажет болса — keyword-check сізге сай емес, кастом webhook-чекерлерге не health-эндпоинтке қараңыз.
- Body 1 MB лимиті. Чекер денені
io.LimitReader(resp.Body, 1<<20)арқылы оқиды — яғни жауаптың тек алғашқы мегабайтын (http_checker.go:164). Keyword іздеу осы мегабайтта ғана жүреді. HTML-ыңыз 1 MB-тан үлкен болса — күтілетін сөзді бет басына жақын қойыңыз (<head>-те немесе<body>-дан кейін бірден), әйтпесе ол лимиттен тыс болып, URL үнемі жалғанkeyword_not_foundалерт береді. Іс жүзінде 1 MB — бір бет үшін өте көп, мәселе сирек туындайды. - UTF-8. Кириллица, қытайдың иероглифтері, эмоджи keyword-те қолдау табады — салыстырылатын екі байт ағыны UTF-8 жолы ретінде өңделеді. Laravel валидаторы
max:255mb_strlenқолданады — лимит таңбамен өлшенеді (көп байттық таңбаларды қоса), байтпен емес. Көптеген практикалық сценарийлер үшін 255 таңба жеткілікті. - TCP-мониторингпен үйлесімділік.
expected_keywordөрісі текmonitor_type=httpүшін қолжетімді. TCP-чектер үшін еленбейді — TCP-да body жоқ, іздейтін жер жоқ. Толығырақ — /docs/features/tcp-monitoring?lang=kk.
Хабарламалар
Keyword жоғалғанда таңдалған арналарға себебін айқын көрсететін хабарлама кетеді — ол әдеттегі «status 5xx» алертінен ерекшеленеді:
Сайт қолжетімсіз! https://example.com/status
Қателік: Күтілетін түйін сөз табылмады
Күтілді: "All systems operational"
Қолжетімсіз 2026-05-01 19:15:09 бастап
Webhook-payload-та error_status өрісі keyword_not_found мәнін қабылдайды — бұл инцидент-flow-ды бөлуге ыңғайлы: keyword-құлаулар көбіне 5xx-тен басқа реакция түрін талап етеді (мысалы, SRE емес, фронтенд командасын шақыру).
Қалпына келгенде (keyword жауапқа қайтып келгенде) downtime ұзақтығын көрсететін әдеттегі recovery-хабарлама келеді.
Байланысты мақалалар
- /docs/features/tcp-monitoring?lang=kk — HTTP-сіз порттар үшін TCP-мониторинг.
- /docs/features/maintenance-windows?lang=kk — қызмет көрсету терезелері: жоспарлы ТҚ кезінде keyword-алерттерін тыныштандыру.
- /docs/notifications/telegram?lang=kk — Telegram хабарламаларын баптау.
- /docs/notifications/webhooks?lang=kk — HMAC-SHA256 қолтаңбасымен webhook.