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

Документация

Полное руководство по настройке мониторинга сайтов с PingZen. Документация API, примеры кода и лучшие практики.

Зачем нужны часовые пояса

PingZen работает круглосуточно — и инциденты ваших сервисов тоже. Без явной метки часового пояса временная метка 14:30 неоднозначна: это ваше местное 14:30, серверное или UTC? Неправильное прочтение сдвигает понимание статус-страницы на часы.

Каждая метка времени PingZen хранится в UTC и рендерится в выбранном вами часовом поясе с однозначной подписью.

11:30 UTC14:30 MSK12:30 CET06:30 EST

Три часовых пояса в PingZen

Личный часовой пояс

Настройка вашего аккаунта. Применяется к дашборду, истории мониторов, инцидентам, алертам, heartbeat'ам и выводу MCP-инструментов. Автоопределяется из браузера при первом входе.

Europe/Moscow14:3014:30

Часовой пояс статус-страницы

Настройка каждой страницы. Авто (каждый посетитель видит свой пояс) или закреплённый IANA-пояс (все видят одинаковое время с явной подписью).

auto07:0014:00Europe/Moscow14:0014:00

Часовой пояс отчёта

Настройка каждого отчёта. Управляет тем, когда запускается отчёт (полночь в этом поясе) и границами периода. Задаётся в редакторе отчётов.

UTCEurope/Moscow

Ваш личный часовой пояс

Селектор Часовой пояс в боковой панели (под пунктом «Язык») задаёт ваш предпочитаемый IANA-пояс — например Europe/Moscow, Asia/Yekaterinburg, America/Los_Angeles.

Это влияет на каждую метку времени, которую вы видите внутри PingZen:

  • «Начало» / «Окончание» инцидента
  • «Начало» / «Окончание» окна обслуживания
  • «Последнее срабатывание» в истории алертов
  • Метки последней проверки на мониторах
  • Метки последнего пинга на heartbeat-мониторах
  • Группировка по датам в списке инцидентов («сегодня» / «вчера» / «последние 7 дней» считается относительно вашего календаря, а не полуночи UTC)
  • Вывод MCP-инструментов (см. Часовой пояс в MCP ниже)

Автоопределение при первом входе

При первом входе PingZen читает часовой пояс браузера через Intl.DateTimeFormat().resolvedOptions().timeZone и записывает его в ваш аккаунт. Если он совпадает с вашим реальным местоположением — менять ничего не нужно.

Переключение позже

Путешествия, VPN или редкий случай неверного определения браузером — откройте боковую панель и выберите из подобранного списка ~40 поясов или используйте одноклик-ссылку Использовать часовой пояс браузера (X) которая появляется когда ваш сохранённый пояс отличается от того, что показывает браузер прямо сейчас.

Часовой пояс статус-страницы

У каждой публичной статус-страницы свой параметр Часовой пояс отображения в редакторе страницы (после Темы, перед Мониторами).

Авто (по умолчанию)

Каждый посетитель видит время в своём часовом поясе браузера. Подходит для глобальной аудитории — пользователь из Токио и из Берлина оба видят «своё» время.

Закреплённый IANA-пояс

Все посетители видят одно и то же время в выбранном поясе с явной подписью в подвале. Подходит для региональной аудитории или внутренней страницы.

В режиме закрепления подвал страницы всегда показывает активный пояс:

Время указано в Europe/Moscow (MSK)

Индикатор намеренно виден на каждой публичной статус-странице — посетитель никогда не должен гадать, означает ли 14:30 его местное 14:30 или серверное.

Часовой пояс в MCP

Ответы инструментов MCP-сервера PingZen (используется Claude в Cursor, Claude Code, Cline и других LLM-редакторах) рендерят даты в часовом поясе авторизованного пользователя. Для пользователя с timezone = Europe/Moscow инструмент list_incidents показывает:

! **Database connection timeout** (ID: 12)
   Status: ongoing
   Severity: critical
   Monitor: 47
   Started: 2026-05-12 14:32:05 MSK (+03:00)

Сравните с той же строкой для UTC-пользователя:

   Started: 2026-05-12 11:32:05 UTC (+00:00)

И аббревиатура (MSK, UTC), и числовое смещение (+03:00, +00:00) включены в каждую метку времени — у LLM однозначный контекст, независимо от того, в Москве или Екатеринбурге работает агент.

Требуется версия: MCP-сервер 0.16.0 или выше. Предыдущие версии возвращали только UTC ISO-строки. Текущую версию смотрите на странице Подключение MCP.

Инструменты, ставшие tz-aware в 0.16.0

list_incidents
get_incident
update_incident
resolve_incident
create_incident
add_incident_update
list_maintenance
get_maintenance
create_maintenance
get_monitor_status
get_alert
get_webhook
get_webhook_deliveries
list_heartbeats

REST API

Управление часовыми поясами через REST.

PATCH/api/v1/auth/me/timezone

Установить предпочитаемый IANA часовой пояс аккаунта

GET/api/v1/auth/me

Прочитать текущее значение (в поле timezone)

PUT/api/v1/status-pages/:id

Обновить часовой пояс статус-страницы (строка для закрепления, null для Авто)

Примеры

Установить личный часовой пояс:

curl -X PATCH https://pingzen.dev/api/v1/auth/me/timezone \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"timezone": "Europe/Moscow"}'

Закрепить статус-страницу на московское время:

curl -X PUT https://pingzen.dev/api/v1/status-pages/42 \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"timezone": "Europe/Moscow"}'

Переключить страницу обратно в режим Авто (часовой пояс посетителя):

curl -X PUT https://pingzen.dev/api/v1/status-pages/42 \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"timezone": null}'

Валидация

Сервер проверяет каждый часовой пояс по официальной базе IANA (zoneinfo.available_timezones() на бэкенде). Неизвестные имена отклоняются с HTTP 422 Unprocessable Entity и явным телом ошибки:

{
  "detail": [
    {
      "type": "value_error",
      "loc": ["body", "timezone"],
      "msg": "Value error, Unknown IANA timezone: 'Mars/Olympus'. Use names like 'Europe/Moscow' or 'UTC'."
    }
  ]
}

Бэкенд также пишет WARNING rejected invalid IANA timezone='Mars/Olympus' на каждое отклонение — операторы видят плохих клиентов в audit-логе.

Что остаётся в UTC (и почему)

Некоторые поверхности намеренно игнорируют ваше предпочтение часового пояса. У каждой — своя причина.

Хранение в БД

Каждое created_at, started_at, resolved_at сохраняется как UTC. Это источник правды — настройка часового пояса касается отображения, а не данных.

Полезная нагрузка webhook'ов

Исходящие webhook'и несут UTC ISO-строки (например 2026-05-12T11:32:05Z). Downstream-автоматизации (Home Assistant, n8n, Node-RED) парсят их своей логикой — они не должны зависеть от вашего личного предпочтения.

Тела алертов Email/Telegram/Slack (сегодня)

Большинство каналов не включают явную метку времени в тело — читатель ориентируется на метку самого сообщения. Карточки MS Teams всё ещё включают поле Timestamp в UTC; перевод на часовой пояс пользователя — в roadmap.

Cron-расписания

У запланированных отчётов своё поле timezone которое управляет когда они запускаются. Личное предпочтение часового пояса влияет только на отображение.

Летнее/зимнее время

PingZen использует модуль zoneinfo Python на бэкенде и Intl.DateTimeFormat на фронтенде. Оба следуют официальной базе IANA, поэтому переходы DST обрабатываются автоматически:

ПоясЗимнее смещениеЛетнее смещение
Europe/Moscow+3:00 (MSK)+3:00 (MSK) — DST отменено в 2011
Asia/Yekaterinburg+5:00 (YEKT)+5:00 (YEKT) — DST отменено в 2011
Europe/Berlin+1:00 (CET)+2:00 (CEST)
America/New_York-5:00 (EST)-4:00 (EDT)

Менять настройку дважды в год не нужно. Аббревиатура рядом со временем автоматически обновляется на границе DST.

FAQ

Мою статус-страницу читают и из Москвы, и из Берлина. Что выбрать?

Оставьте Авто. Браузер каждого посетителя подхватит локальный пояс, индикатор в подвале скажет какой — никто не читает чужие часы.

У меня вся команда в одном офисе. Закрепить страницу на этот пояс?

Да — закрепите на офисный часовой пояс. Все видят одно и то же время на стенных часах, и фраза «инцидент начался в 14:30» одинаково читается всеми.

Сменил часовой пояс, но дашборд всё ещё показывает UTC.

Перезагрузите страницу. Селектор пишет новое значение на сервер с 300ms debounce, store обновляется оптимистично — hard reload гарантирует что все компоненты перечитают.

LLM всё ещё показывает UTC в MCP-ответах.

Проверьте что ваш MCP-сервер версии 0.16.0 или выше. Self-hosted интеграции могут быть на старой версии — обновите образ ilyakong/pingzen-mcp. Облачный (pingzen.dev/mcp) всегда на последней.

Почему PingZen не предлагает «GMT+3» вместо «Europe/Moscow»?

Числовые смещения не переживают переход на летнее время. IANA-зона типа America/New_York автоматически переключается между EST (UTC-5) и EDT (UTC-4) на нужную дату; «GMT-5» половину года был бы неверным.

Частые вопросы

Какие протоколы можно мониторить?

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 секунд.