Документация
Полное руководство по настройке мониторинга сайтов с PingZen. Документация API, примеры кода и лучшие практики.
API Check — это короткий список HTTP-запросов, которые выполняются по порядку. Каждый шаг отправляет один запрос и сверяет ответ с проверками, которые вы описали, а ещё может достать из ответа значения — токен, идентификатор — чтобы их использовали следующие шаги. Монитор UP только тогда, когда прошли все выполненные шаги. Один запрос с одной проверкой — это работа для HTTP-монитора; логин, а за ним вызов, которому нужен токен, — работа для этого.
Для чего подходит
Сначала логин, потом эндпоинт, которому нужен токен
Первый шаг отправляет учётные данные на /auth/login и берёт токен из JSON-ответа. Второй передаёт его в заголовке Authorization и проверяет ответ. Так сразу подтверждаются три вещи — учётные данные ещё работают, токен ещё принимают, защищённый эндпоинт ещё отвечает, — и ни одну из них одиночный запрос не подтверждает.
Сценарий, который существует только целиком
Создать заказ, а потом получить его обратно по идентификатору из первого шага. Положить товар в корзину, а потом запросить корзину. Оба эндпоинта могут круглосуточно отвечать 200, пока связка между ними сломана, — а проверяет эту связку ровно второй шаг.
Ответы, внутрь которых надо заглянуть
JSON-ответ, где 200 сам по себе ничего не значит: в теле "status": "degraded", пустой список или длина очереди. Один шаг умеет проверить значение по JSON-пути, заголовок ответа, текст в теле и время ответа — всё это на одном и том же ответе.
Чужие API, от которых зависит ваш продукт
Платёжный провайдер, SMS-шлюз, карты или поиск. Проверочный обход двух-трёх эндпоинтов, которыми вы реально пользуетесь, с тем же ключом, что и в продукте, покажет, что авария не ваша, раньше, чем это сделает их поддержка.
Для чего не подходит
Этот монитор — про последовательность. Если последовательность не нужна, лучше подойдёт другое:
| Что нужно узнать | Что использовать |
|---|---|
| Отвечает ли один эндпоинт нужным кодом или содержит ли ключевое слово? Ничего никуда переносить не надо | Монитор HTTP / HTTPS |
| Работает ли сценарий в браузере — клики, заполнение формы, всё, чему нужен JavaScript? API Check говорит только по HTTP и страницу не рисует | Браузерный сценарий |
| Здоров ли мой gRPC-сервис? Шаги здесь — обычные HTTP-запросы, а не вызовы RPC | Монитор gRPC |
| Насколько API быстр под нагрузкой, сколько запросов в секунду он держит? | Не поддерживается. PingZen выполняет шаги раз в интервал и по одному запросу за раз. Проверка времени ответа — это потолок для одного запроса, а не нагрузочный тест |
Жив ли внутренний API — тот, что на приватном адресе или за VPN? URL каждого шага должен быть http или https и вести на публичный адрес: приватные диапазоны отклоняются до отправки запроса | Heartbeat-монитор — ваша задача зовёт PingZen сама, изнутри |
| Открыт ли порт, принимает ли соединения база — что-то, что вообще не HTTP? | Монитор TCP / UDP |
Как выполняется проверка
- Шаги выполняются в том порядке, в каком перечислены, сверху вниз. В одном мониторе их может быть до 50.
- Перед каждым запросом плейсхолдеры
{{переменная}}заменяются на то, что уже известно: на значения, заданные заранее, и на всё, что достали предыдущие шаги. - URL шага проверяется: он должен быть
httpилиhttpsи не должен вести на приватный, локальный или link-local адрес. - Запрос отправляется. Редиректы выполняются, если для шага не указано иное.
- Выполняются все проверки этого шага, а затем извлекаются переменные.
- Если шаг не прошёл и включена настройка «Остановить при ошибке» — а она включена по умолчанию, — остальные шаги пропускаются.
В результат попадают два числа: время ответа — это длительность всего прогона, всех шагов вместе, а HTTP-код показывается тот, что вернул последний шаг, у которого код вообще был.
Что шаг может проверить
Именно проверки решают, прошёл шаг или нет. Шаг вообще без проверок проходит на любом ответе, включая 500, — поэтому у каждого шага должна быть хотя бы одна.
| Проверка | На что смотрит |
|---|---|
| Код ответа | HTTP-код ответа |
| JSON-путь | Значение по выражению JSONPath, например $.data.status. Берётся первое совпадение. Отсутствующий путь проваливает проверку — кроме случая, когда оператор «не существует» |
| Тело содержит | Текст в сыром теле ответа, с точным совпадением, включая регистр |
| Регулярное выражение по телу | Поиск по телу ответа. Ищется в первых 100 000 символах; шаблон, который не закончил работу за 2 секунды или не компилируется, проваливает проверку |
| Заголовок | Заголовок ответа по имени — его значение или просто наличие |
| Время ответа | Сколько занял этот шаг, в миллисекундах |
Операторы такие: равно, не равно, содержит, не содержит, соответствует (регулярное выражение), меньше, меньше или равно, больше, больше или равно, существует, не существует. Всё сравнивается как текст, кроме четырёх операторов сравнения по величине: они читают обе стороны как числа и проваливают проверку, если числом не является хотя бы одна. Поэтому код ответа, записанный как 200 и как "200", ведёт себя одинаково.
Передача значений между шагами
Это то, чего обычный HTTP-монитор не умеет. Шаг объявляет, что достать из своего ответа и под каким именем, а следующие шаги пишут {{имя}} там, где значение нужно. В именах допустимы буквы, цифры и подчёркивание. Имя, которое никто не определил, остаётся в тексте как есть — обычно это хорошо видно по тому, чем закончился шаг.
| Откуда берётся значение | Что получится |
|---|---|
| JSON-путь | Первое совпадение выражения JSONPath — обычный способ вытащить токен или идентификатор |
| Заголовок | Заголовок ответа по имени, например Location после редиректа |
| Cookie | Cookie из ответа по имени |
| Тело | Всё тело как текст или — если задано регулярное выражение — его первая группа захвата |
| Код ответа | HTTP-код в виде текста |
| Время ответа | Время этого шага в миллисекундах, в виде текста |
У каждого извлечения может быть запасное значение — оно подставляется, когда доставать оказалось нечего.
Плейсхолдер подставляется в четырёх местах: URL шага, значения собственных заголовков этого шага, тело запроса и поля аутентификации (токен, имя пользователя, пароль). Он не подставляется в заголовки, заданные сразу для всех шагов, и не подставляется в ожидаемое значение проверки — сравнить ответ с переменной нельзя. Всё, где нужна переменная, кладите в собственные заголовки шага.
Логика статусов
Монитор UP только тогда, когда прошли все выполненные шаги. Состояния «деградация» у этого типа нет: ограниченный по частоте или медленный API либо проваливает ту проверку, которая его ловит, либо проходит.
| Результат | Статус |
|---|---|
| Все шаги выполнены, все проверки прошли | UP |
| На каком-то шаге не прошла проверка | DOWN |
| Запрос не удалось выполнить: отказ в соединении, ошибка DNS, ошибка TLS, URL не http/https, URL ведёт на приватный адрес, заголовок, который PingZen отказывается отправлять | DOWN |
| У монитора нет ни одного шага или их больше 50 | DOWN |
| Шаг вообще не читается — неизвестный метод, неизвестный тип проверки, отсутствующий URL, незнакомое поле | DOWN |
| Запрос шага не уложился в свой таймаут или вся проверка вышла за отведённое время | TIMEOUT |
DOWN и TIMEOUT считаются простоем и открывают инцидент — после порога подтверждения, по умолчанию это три неудачные проверки подряд, чтобы одна неудачная минута деплоя никого не будила.
В результат записывается сообщение того шага, который не прошёл, — до трёх непрошедших проверок подряд, например Status code 500 did not match equals 200. Оно говорит, что именно не сошлось, но не говорит, на каком это было шаге, поэтому давайте шагам узнаваемые названия и держите проверки внутри шага достаточно разными, чтобы их можно было различить. Результаты отдельных шагов вместе с проверкой тоже не сохраняются: один статус, одно общее время, одно сообщение.
Шаг, который PingZen вообще не смог разобрать, роняет всю проверку, и при этом не отправляется ничего: в сообщении назван сам шаг — например, API check misconfigured — 1 of 3 steps are misconfigured (step 2: missing required field(s): url). Достаточно одного нечитаемого шага из нескольких: сценарий, который нельзя выполнить целиком, не имеет права отчитаться «всё хорошо». Форма и API такой конфиг при сохранении тоже не принимают, так что встретить это можно только на мониторах, созданных до появления этой проверки.
Настройки
Шаги
До 50 штук, у каждого есть название, метод (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS), URL и свои проверки. Стрелки рядом с шагом меняют порядок. Отдельного поля адреса у монитора нет: он берёт URL первого шага.
Остановить при ошибке
Включено по умолчанию, и обычно это правильно: если шаг логина уже упал, шаги, которым нужен его токен, упадут лишь более запутанно. Выключайте, когда шаги независимы и вы хотите видеть результат каждого. Отдельному шагу можно разрешить продолжать в любом случае — через API.
Таймаут
Это бюджет на всю проверку, а не на один запрос: PingZen останавливает прогон через таймаут плюс пять секунд и записывает TIMEOUT. Новым мониторам форма ставит 30 секунд — значит, на все шаги вместе есть 35 секунд; потолок — 120 секунд. Отдельному шагу даётся 30 секунд, пока вы не зададите другое значение через API, — так что при коротком таймауте медленный шаг останавливает именно общий бюджет.
Интервал
По умолчанию 60 секунд; насколько ниже можно опуститься, зависит от тарифа. Помните, что одна проверка — это несколько настоящих запросов к вашему API и к любым его лимитам частоты: сценарий из пяти шагов раз в минуту — это 7200 запросов в сутки.
Аутентификация
Задаётся сразу для всех шагов или отдельно для шага, и настройка шага побеждает. Bearer-токен, логин и пароль, API-ключ в заголовке или свой заголовок — все четыре варианта собирают заголовок запроса и все принимают {{переменные}}, поэтому токен, добытый на первом шаге, может быть учётными данными со второго и дальше.
Заголовки и начальные переменные
Заголовки задаются сразу для всех шагов или для одного, и заголовок шага заменяет общий с тем же именем. Начальные переменные — это значения, которые вы задаёте заранее (идентификатор аккаунта, базовый адрес): они доступны уже первому шагу.
Поскольку внутри этой конфигурации живут токены и пароли, в CSV-экспорт мониторов она не попадает. При импорте её всё ещё принимают, если заполнить вручную.
Чего нет в форме
Редактор шагов в форме монитора закрывает сами шаги, методы, URL, тело запроса для POST, PUT и PATCH и проверки. Всё остальное, что описано на этой странице, в мониторе есть, но поля в форме не имеет и задаётся через REST API или инструменты MCP на том же мониторе: заголовки запроса, извлечение переменных, начальные переменные, аутентификация, таймауты шагов, обработка редиректов и флаг «продолжать несмотря на ошибку». Правка монитора в форме эти значения не стирает — редактор записывает обратно только те поля, которые знает, а остальное оставляет как есть.
Ещё две вещи, которые стоит знать до того, как собирать сценарий в форме:
- Тело, набранное в форме, отправляется как обычный текст, без заголовка
Content-Type. API, которому нуженapplication/json, такой запрос отклонит. Добавьте заголовок через API — общий или на этот шаг — либо отправляйте тело как JSON-объект, тогда заголовок проставится сам. - Список операторов в форме короче того, что умеет проверка. «Меньше или равно», «больше или равно», «существует» и «не существует» работают, но только через API.
И две настройки, которые в конфигурации есть, но сегодня ничего не делают, — на них рассчитывать не надо: API-ключ, положенный в строку запроса вместо заголовка, в URL так и не попадает, а отключение проверки сертификата у шага ни на что не влияет — сертификаты проверяются всегда.
Ключевые возможности
- До 50 HTTP-запросов в одном мониторе, по порядку, и вся последовательность проходит или падает как одна проверка
- Значения из ответа — токен, идентификатор, заголовок, cookie — переносятся в следующие шаги как
{{переменные}} - Шесть типов проверок на шаг, включая JSONPath по телу ответа, и одиннадцать операторов
- Аутентификация на каждом шаге (bearer, basic, API-ключ, свой заголовок), которая может использовать добытый токен
- Остановка на первом упавшем шаге — или прогон всех, чтобы увидеть, что именно сломалось
- URL шагов ограничены публичными адресами http и https, так что монитор нельзя направить на внутреннюю инфраструктуру
Частые вопросы
Какие протоколы можно мониторить?
PingZen поддерживает 23 протокола: HTTP/HTTPS, WebSocket (WS/WSS), TCP, UDP, ICMP Ping, gRPC, DNS, WHOIS, TLS/SSL сертификаты, Email (SMTP/IMAP/POP3), FTP/FTPS, DNSBL, PageSpeed, SOCKS5, MTProxy, API Check и Transaction. Вы можете мониторить сайты, API, серверы, базы данных и любые сетевые сервисы.
Как быстро приходят оповещения?
Telegram оповещения доставляются в течение 1-2 секунд после обнаружения. Slack и Discord уведомления приходят практически мгновенно. Вы можете настроить несколько каналов оповещений для резервирования.
Можно ли организовать мониторы по проектам?
Да! PingZen поддерживает рабочие пространства, которые позволяют организовать мониторы по проектам, окружениям или командам. Каждое рабочее пространство может иметь свои настройки оповещений и участников.
Есть ли API для автоматизации?
Абсолютно. PingZen предоставляет полный REST API с OpenAPI документацией. Вы можете создавать, обновлять и удалять мониторы программно.
Как работают статус-страницы?
Статус-страницы — это публичные брендированные страницы, показывающие аптайм ваших сервисов. Вы можете отображать статус в реальном времени и позволить клиентам подписаться на обновления.
Что происходит, если я достигну лимита мониторов?
Мы уведомим вас при приближении к лимиту. Вы можете приостановить некоторые мониторы или связаться с нами для увеличения лимита. Мы никогда не останавливаем мониторинг без предупреждения, обеспечивая защиту ваших критически важных сервисов.
Готовы перестать пропускать даунтаймы?
Присоединяйтесь к тысячам команд, которые доверяют PingZen. Настройка за 30 секунд.