Перейти к содержимому

HTTP-мониторы (расширенные)

«Лёгкий» тип http в активных мониторах делает только GET <url> и сверяет статус-код с 2xx (или expectedStatus). Этого достаточно для простого health-check-а, но не покрывает случаи вроде «дёрни POST /api/login с JSON-телом и заголовком Authorization, а потом проверь, что в ответе пришёл "status":"ok" и код 200».

HTTP-монитор — это отдельная сущность со своим REST API, которая умеет:

  • произвольный методGET, POST, PUT, PATCH, DELETE, HEAD;
  • произвольные заголовки (headers) — JSON-объект {"Header": "Value"};
  • тело запроса (body) — для POST/PUT/PATCH;
  • фильтрацию ответа — по статус-коду, диапазону кодов, подстроке/regex в body, значению по JSONPath и максимальному времени ответа;
  • два режима реакции — алёртить «на совпадение» или «на несовпадение» фильтров.

Всё остальное (период, таймаут, число неудач подряд, тексты alert/recovery, паузы) работает так же, как у обычных мониторов.

ПолеТипОбязательноОписание
appidnumberдаID канала, в который слать уведомления
namestringдаНазвание монитора, 1–200 символов
methodstringдаGET, POST, PUT, PATCH, DELETE, HEAD (регистр не важен)
urlstringдаВалидный http(s) URL
headersstringнетJSON-объект заголовков: {"Authorization": "Bearer ..."}
bodystringнетТело запроса (для POST/PUT/PATCH)
intervalSecnumberдаПериод между проверками, 30–86400 секунд
timeoutSecnumberнетТаймаут одной попытки, по умолчанию 10, максимум 30
filterModestringдаalert_on_match или alert_on_mismatch (см. ниже)
filtersstringдаJSON-массив фильтров (см. Фильтры ответа)
consecutiveFailsnumberнетСколько подряд неудач до alert, по умолчанию 1, максимум 20
alertMessagestringдаТекст уведомления при срабатывании, 1–2000 символов
alertTitlestringнетЗаголовок уведомления
alertPrioritynumberнетПриоритет push, 0–10
recoveryTitlestringнетЗаголовок recovery-сообщения
recoveryMessagestringнетТекст при возврате в норму (если пусто — recovery не шлётся)

filters — это JSON-массив объектов. Каждый объект описывает условие, которому должен соответствовать ответ. Можно комбинировать несколько проверок в одном фильтре. Доступные поля фильтра:

Поле фильтраТипЧто проверяет
statusCodenumberТочный HTTP-код (0 = не проверять)
statusCodeMin / statusCodeMaxnumberДиапазон кодов [min, max] включительно (0,0 = не проверять)
bodyContainsstringПодстрока, которую должен содержать body
bodyRegexstringРегулярное выражение (синтаксис Go) для body
jsonPathstringПуть в JSON-ответе, например $.status или data.0.id
jsonPathValuestringОжидаемое значение по jsonPath (сравнение строковое)
maxDurationMsnumberМаксимально допустимое время ответа в мс (0 = не проверять)
  • alert_on_mismatch — описываете, как выглядит нормальный ответ. Если фактический ответ не совпал с фильтрами — уходит alert. Это «whitelist»-логика и самый частый сценарий.
  • alert_on_match — описываете проблемный ответ. Если фактический ответ совпал с фильтром — уходит alert. Удобно ловить конкретные ошибки.
// filterMode = "alert_on_mismatch":
// норма — код 200 и в JSON {"status":"ok"}; иначе алёрт.
[
{ "statusCode": 200, "jsonPath": "$.status", "jsonPathValue": "ok" }
]
// filterMode = "alert_on_match":
// алёртим, если в body встретилось слово maintenance ИЛИ код в 5xx.
[
{ "bodyContains": "maintenance" },
{ "statusCodeMin": 500, "statusCodeMax": 599 }
]
// норма — отвечает быстрее 800 мс и код 2xx (filterMode = "alert_on_mismatch"):
[
{ "statusCodeMin": 200, "statusCodeMax": 299, "maxDurationMs": 800 }
]

HTTP-монитор использует те же статусы, что и обычные мониторы: pending (создан, проверок ещё не было), up, degraded (есть сбои, но порог consecutiveFails ещё не достигнут), down (alert отправлен) и paused.

СобытиеКогдаТекст
AlertПосле consecutiveFails подряд срабатываний фильтра (по логике filterMode), только при первом переходе в down. К сообщению добавляется техническая информация (последний код, превью body, ошибка)alertMessage
RecoveryПри первой успешной проверке после down, только если задан recoveryMessagerecoveryMessage

Пока монитор в down, повторных alert-ов не будет — проверки продолжаются и просто фиксируют статус.

Перед созданием монитора можно выполнить разовый запрос и посмотреть ответ — ничего не сохраняя. POST /http-monitor/test принимает method, url, headers, body, timeoutSec и возвращает statusCode, bodyPreview (первые 2048 символов), headers (JSON заголовков ответа), durationMs и error (если запрос упал).

Окно терминала
curl -X POST "$NOTIFLY_URL/http-monitor/test" \
-H "Content-Type: application/json" \
-H "X-Notifly-Key: <client-token>" \
-d '{
"method": "POST",
"url": "https://api.example.com/login",
"headers": "{\"Content-Type\": \"application/json\"}",
"body": "{\"user\":\"probe\",\"pass\":\"...\"}",
"timeoutSec": 10
}'
# → {"statusCode":200,"bodyPreview":"{\"status\":\"ok\"}","headers":"{...}","durationMs":134}
  1. Откройте app.notifly.ruМониторыHTTP.
  2. Укажите название, канал, метод, URL, при необходимости — заголовки и тело.
  3. Настройте период, таймаут, число неудач подряд.
  4. Опишите фильтры ответа и выберите режим (alert_on_match / alert_on_mismatch).
  5. Задайте тексты alert и recovery.
Окно терминала
curl -X POST "$NOTIFLY_URL/http-monitor" \
-H "Content-Type: application/json" \
-H "X-Notifly-Key: <client-token>" \
-d '{
"appid": 12345,
"name": "API login health",
"method": "POST",
"url": "https://api.example.com/login",
"headers": "{\"Content-Type\": \"application/json\"}",
"body": "{\"user\":\"probe\",\"pass\":\"...\"}",
"intervalSec": 60,
"timeoutSec": 10,
"filterMode": "alert_on_mismatch",
"filters": "[{\"statusCode\":200,\"jsonPath\":\"$.status\",\"jsonPathValue\":\"ok\"}]",
"consecutiveFails": 2,
"alertMessage": "Логин-эндпоинт не отвечает как надо!",
"alertPriority": 9,
"recoveryMessage": "Логин снова работает."
}'

Поля headers, body и filters передаются строками (JSON внутри JSON), поэтому в curl-примерах их содержимое экранируется.

Если настроен MCP-сервер Notifly (см. MCP), достаточно описать задачу словами:

Заведи HTTP-монитор: POST на https://api.example.com/login с JSON-телом, проверяй каждую минуту, что код 200 и в ответе status=ok, алёрт после 2 неудач подряд.

МетодПутьОписание
GET/http-monitorСписок HTTP-мониторов пользователя
POST/http-monitorСоздать
POST/http-monitor/testРазовый тестовый запрос (без сохранения)
PUT/http-monitor/:idОбновить настройки (нельзя сменить appid)
DELETE/http-monitor/:idУдалить
POST/http-monitor/:id/pauseПриостановить проверки
POST/http-monitor/:id/resumeВозобновить

Создание, изменение, удаление, пауза и возобновление требуют клиентский (или MCP) токен с правом записи. POST /http-monitor/test доступен без привязки к конкретному монитору.