События проекта и реестр событий
Экран событий с историей и живым потоком, реестр событий как контракт разметки: версии схемы, режимы проверки, коды нарушений и что делать, когда разметка поехала.
На этой странице
Два экрана отвечают на два разных вопроса. События — «что реально пришло в проект прямо сейчас». Реестр событий — «а что вообще должно приходить и с какими полями». Первый показывает факты, второй задаёт контракт, по которому эти факты проверяются на приёме.
Держите оба открытыми, когда меняете разметку: реестр говорит, каким должно быть событие, экран событий — каким оно пришло.
Экран событий
Данные и сбор → События. Один хронологический список, а не вкладки: история и живой поток попадают в одну таблицу.
Что в таблице
Шесть столбцов: время, событие, посетитель, URL, устройство, страна.
Столбец «Посетитель» — ссылка. У опознанного человека показывается его идентификатор, у анонимного — «Аноним» и короткий хвост анонимного идентификатора; полное значение видно во всплывающей подсказке. Ссылка ведёт в карточку человека и переносит туда выбранный период.
Клик по строке открывает панель с полным JSON события, включая props. Это
единственное место в продукте, где видно событие целиком, ровно как оно
сохранено.
Фильтры
- Событие. Кнопка «+ Добавить событие» добавляет ещё одну строку выбора — число строк не ограничено, условия складываются по «или». Значение «Любое событие» сбрасывает выбор.
user_idиanon_id— точное совпадение. Оба поля с задержкой: запрос уходит через 400 мс после того, как вы перестали печатать.- Период — по умолчанию последние 30 дней. Календарные даты
разворачиваются в интервал по UTC от
00:00:00первой даты до23:59:59последней.
Кнопка «Сбросить» возвращает фильтры к состоянию по умолчанию.
История листается непрозрачным курсором по 50 событий на страницу: следующая порция подгружается сама, когда последняя строка попадает в область просмотра. Больше 100 событий за один запрос API не отдаёт в любом случае.
Живой поток
Живой режим выключен по умолчанию — пилюля в заголовке показывает «Лайф выключен». Переключатель поднимает подписку на поток событий, и рядом появляется состояние соединения: «Стрим подключен», «Подключение…», «Поллинг» или «На паузе».
Что важно знать про поток:
- Кольцевой буфер на 500 событий. Подпись «В буфере: N (макс. 500)»; событие номер 501 вытесняет самое старое. Буфер живёт в браузере и очищается при переключении проекта.
- Пауза. Кнопка «Пауза» останавливает пополнение таблицы, но не поток: пришедшее за это время копится отдельно, и кнопка становится «Продолжить (+N)».
- Запасной путь. После трёх неудачных попыток подключения подряд интерфейс переходит на периодический опрос раз в 3 секунды — состояние «Поллинг». Данные продолжают идти, задержка растёт.
- Прореживание. Выше 20 сообщений в секунду сервер прореживает поток. Это инструмент наблюдения, а не учёта: считать события по живому потоку нельзя, для чисел есть отчёты.
Живой поток годится для проверки «нажал кнопку — увидел событие». Для разбора причин, почему событие не приходит или приходит неправильным, есть отдельный экран проверки интеграции.
Если в проекте ещё нет ни одного события, вместо таблиц экран показывает готовый сниппет подключения и ссылку на выбор способа установки.
Реестр событий
Данные и сбор → Реестр событий. Подзаголовок экрана честно описывает суть: версионируемые правила событий, а примеры в них синтетические и никогда не берутся из содержимого настоящих событий.
Список: событие, владелец, источник, статус, текущая версия схемы и объём за 24 часа и 7 дней. Фильтры — по статусу (Черновик / Активно / Устарело) и по источнику (Не указан / Browser / Server / Import / System). Страница — 50 записей, листается кнопками «← Назад» и «Далее →».
Контракт события
Кнопка «Зарегистрировать событие» открывает форму контракта. Что в неё входит:
| Поле | Ограничение |
|---|---|
| Event name | правило ^[a-z0-9_.]{1,128}$, нельзя начинать с pp. |
| Название | до 200 символов |
| Команда-владелец | до 200 символов |
| Описание | до 4000 символов |
| Источник | Не указан, Browser, Server, Import, System |
| Статус | Черновик, Активно, Устарело |
| Ожидаемые поля | JSON-массив, не более 64 полей |
Каждое ожидаемое поле описывается тремя обязательными вещами: name (до
64 символов, уникальное в схеме), type — один из string, number,
boolean, object, array, null — и classification:
normal— обычное поле;potential_pii— поле, в которое персональные данные могут попасть случайно;forbidden— поле, которого в событии быть не должно.
Дополнительно можно указать required, description и safe_example. Поле с
классификацией forbidden не может быть обязательным и не может иметь примера
— форма отклонит такую схему.
Встроенные события pp.* — контракт платформы. Их схему выпускает
ActionPulse, кнопок «Изменить метаданные» и «Новая версия» у них нет ни у
одной роли, и пространство имён pp. зарезервировано: своё событие так назвать
нельзя.
Версии схемы
Метаданные события — название, описание, владелец, источник, статус — можно править в любой момент. Имя события неизменяемо: поле заблокировано при редактировании.
Схема правится только добавлением новой версии. Кнопка «Новая версия» открывает редактор с подсказкой: «Новая версия неизменяема после сохранения. Допустимо не более 64 полей». Сохранённая версия больше не меняется никогда — это и есть смысл версионирования.
В карточке события есть таблица «Неизменяемые версии»: номер, отпечаток схемы и дата создания. Клик по строке показывает ожидаемые поля именно той версии. Поэтому по событию, пришедшему полгода назад, всегда можно понять, какому контракту оно тогда соответствовало.
Практическое следствие: не переименовывайте поля и не меняйте их тип «на месте». Добавьте новую версию — старые события останутся объяснимыми.
Бизнес-определения
На том же экране, над списком, живёт карточка «Бизнес-определения». В ней выбирается событие полезной активности: уникальный посетитель, совершивший именно это событие, считается активным пользователем в DAU, WAU и MAU и в шаблонах SQL-запросов.
В выбор попадают только события со статусом «Активно» и заданным названием. Статус определения — «Не настроено», «Настроено» или «Требует внимания»; последнее означает, что выбранное событие удалено, перестало быть активным или потеряло название. Пока определение не настроено, активность считается технически: подходит любое событие, и обзор проекта об этом предупреждает.
Режимы проверки
Селектор «Режим проверки» вверху экрана реестра задаёт, что происходит с событием, которое не совпало со своим контрактом. Новые проекты начинают с режима «Мониторинг».
| Режим | Что делает |
|---|---|
| Выключена | схема клиентских событий не проверяется, результат проверки — «Не проверено» |
| Мониторинг | нарушения записываются, событие принимается |
| Строгая проверка | элемент с нарушением уровня ошибки отклоняется |
Переключение в строгую проверку требует подтверждения: в диалоге нужно ввести
слово ENFORCE, до этого кнопка подтверждения заблокирована. Текст диалога
объясняет границу: «Enforce отклоняет только нарушившие контракт элементы
batch. Перед включением проверьте monitor-нарушения». Остальные события того же
запроса будут приняты.
Два правила действуют независимо от режима:
- Зарезервированные имена. Событие с именем из пространства
pp.*проверяется как в строгом режиме всегда. Подделанноеpp.-событие отклоняется даже при выключенной проверке — иначе чужое событие попало бы в отчёты как собранное платформой. - Запрещённые поля. Поле с классификацией
forbiddenудаляется из сохранённого события, а полеpotential_pii, значение которого совпало с шаблоном персональных данных, заменяется на"[redacted]". Это происходит и в режиме мониторинга.
Менять режим может администратор или владелец организации; регистрировать события и создавать версии схемы — аналитик и выше.
Откуда берутся нарушения
Проверка идёт на приёме события, до записи. Результат — «Валидно», «Нарушение» или «Не проверено» — сохраняется вместе с событием и виден на вкладке «Нарушения» экрана проверки интеграции.
Десять кодов, их уровень и последствие:
| Код | Когда | Уровень | В строгом режиме |
|---|---|---|---|
event_unregistered |
события нет в реестре | ошибка | отклоняется |
reserved_event |
попытка занять имя pp.* |
ошибка | отклоняется в любом режиме |
schema_version_unknown |
указана версия схемы, которой нет | ошибка | отклоняется |
required_property_missing |
нет обязательного поля | ошибка | отклоняется |
property_type_mismatch |
тип поля не совпал со схемой или значение вне заявленных ограничений | ошибка | отклоняется |
unknown_property |
поля нет в схеме версии | ошибка | отклоняется |
forbidden_property |
пришло запрещённое поле | ошибка | отклоняется, значение не сохраняется |
event_deprecated |
событие помечено «Устарело» | предупреждение | принимается |
registry_unavailable |
реестр недоступен в момент проверки | ошибка | запрос завершается ошибкой, а не тихой потерей |
violations_truncated |
нарушений оказалось больше, чем помещается | предупреждение | принимается |
На одно событие сохраняется не более 32 нарушений; тридцать второе заменяется
на violations_truncated, чтобы урезанный список не выглядел полным.
Обратите внимание на асимметрию: event_deprecated — предупреждение, поэтому
устаревшее событие продолжает приниматься даже в строгом режиме. Это способ
выводить старую разметку из обращения, не ломая приём. Построители отчётов при
выборе такого события показывают отдельное предупреждение «Устаревшие события».
Сигналы здоровья разметки
Отдельного экрана «состояние интеграции» в продукте нет — есть четыре рабочих источника сигнала, и у каждого своя задача.
Объём в реестре. Столбец «24ч / 7д» в списке событий реестра. Самый быстрый способ увидеть, что событие перестало приходить или, наоборот, стало приходить на порядок чаще.
Вкладка «Нарушения». Полная история результатов проверки за период до 31 дня с фильтрами по коду и решению. Начинать разбор нужно отсюда.
Оповещение «Нет событий». Срабатывает, если события не приходят заданное число минут. Настраивается в Мониторинг → Оповещения и стоит того, чтобы включить его сразу после подключения: это самый дешёвый способ узнать, что разметка сломалась при релизе.
Оповещение «Качество данных». Считает детерминированные сигналы реестра за окно от 15 минут до 7 дней и срабатывает, если появились сигналы уровня warning или critical. Окно сравнивается с непосредственно предшествующим окном той же длины. Пять типов сигналов:
| Сигнал | Условие warning | Условие critical |
|---|---|---|
| Доля нарушений | 5 % попыток | 20 % попыток |
| Всплеск объёма | ×2 к базовому темпу | ×4 |
| Падение объёма | ×0,5 к базовому темпу | ×0,1 |
| Дрейф набора свойств | набор полей события изменился | — |
| События остановились | поток по событию прекратился | — |
Сигналы по темпу требуют не менее 100 попыток в базовом окне, сигнал об остановке — не менее 50; при меньшей выборке продукт честно отвечает «Недостаточно данных» вместо догадки. Никаких моделей и предсказаний здесь нет — только фиксированные правила.
Что делать с нарушением
- Откройте вкладку «Нарушения» и отфильтруйте по коду. Один код почти всегда означает одну причину.
event_unregistered— событие отправляется, но контракта нет. Зарегистрируйте его: в реестре можно начать регистрацию прямо с наблюдаемого имени.unknown_propertyиrequired_property_missing— код и схема разошлись. Решите, кто прав. Если прав код, добавьте новую версию схемы; если права схема, поправьте отправку.property_type_mismatch— самый частый случай: число уехало в строку. Посмотрите наблюдаемую форму данных на вкладке «История событий» — там видны имена полей и их типы JSON без значений — и сравните с ожидаемыми полями версии схемы.forbidden_property— поле не просто отклонено, его значение не сохранено. Уберите его на стороне отправителя: сервер не должен получать то, чего не должен хранить.reserved_event— переименуйте событие. Пространствоpp.занято платформой.- Проверьте результат живым потоком: отправьте событие из нового кода и убедитесь, что в поле «Результат» появилось «Валидно».
Частая ошибка планирования: включить строгую проверку до того, как разобраны
нарушения мониторинга. Тогда релиз, который «просто добавил одно поле»,
перестанет сохранять события целиком. Сначала пустая вкладка «Нарушения» —
потом ENFORCE.
Технические подробности запросов — в разделах API Registry и Events.