Перевести приложение с Sentry — сменой одного DSN
VseOK принимает события по тому же протоколу, что и Sentry. Если в приложении
уже стоит официальный sentry-sdk, переезд — это одна строка
конфигурации: ни новой библиотеки, ни правок в коде, ни повторной
инструментации.
10 000 событий в месяц на бесплатном тарифе. Карта не нужна.
import sentry_sdk
sentry_sdk.init(
# ↓ единственное изменение во всём проекте
dsn="https://<public_key>@ingest.vseok.ru/<short_id>",
release="myapp@1.0.0",
environment="production",
)
Как это работает
Три шага от установки до первого алерта
Реализованы оба ингест-эндпоинта Sentry: POST /api/{project}/envelope/
для актуальных SDK (включая gzip-сжатые тела) и POST /api/{project}/store/
для старых. Авторизация читается из X-Sentry-Auth или ?sentry_key=.
Создайте проект
Регистрация, проект, вкладка «Подключение» — там лежит готовый DSN. Первый зарегистрированный пользователь становится администратором.
Подставьте DSN
В существующий sentry_sdk.init() — или используйте SDK VseOK для Python, Node.js, PHP и Ruby.
Получайте алерты
Новый issue и регрессия уведомляют всегда. Каналы: Telegram, webhook и email — каждый проверяется кнопкой из интерфейса.
import sentry_sdk
sentry_sdk.init(
dsn="https://<public_key>@ingest.vseok.ru/<short_id>",
release="myapp@1.0.0", # привязывает ошибки к сборке
environment="production",
)
# Дальше — обычный код sentry-sdk, менять нечего:
sentry_sdk.set_user({"id": "user-42"})
sentry_sdk.set_tag("region", "msk")
try:
1 / 0
except ZeroDivisionError:
sentry_sdk.capture_exception()
import * as Sentry from "@sentry/node";
Sentry.init({
dsn: "https://<public_key>@ingest.vseok.ru/<short_id>",
release: "myapp@1.0.0",
environment: "production",
});
// Стек-фреймы V8 разбираются на сервере, библиотечные — сворачиваются.
Sentry.captureException(new Error("cart checkout failed"));
import vseok_sdk
client = vseok_sdk.VseOKClient(
dsn="https://<public_key>@ingest.vseok.ru/<project_id>",
environment="production",
release="myapp@1.0.0",
)
client.set_user("user-42") # скрабится как ПДн
client.set_tag("region", "msk")
client.add_breadcrumb("cart loaded", category="http")
try:
risky_call()
except Exception:
client.capture_exception() # трейс прикрепляется сам
# Доставка неблокирующая: если VseOK недоступен, приложение
# не падает и не ждёт — события уходят с бэкоффом позже.
client.shutdown() # флаш очереди перед выходом
Почему у проекта два DSN. Официальные SDK Sentry разбирают путь DSN как целое число
и падают с BadDsn на UUID — поэтому у каждого проекта есть числовой
short_id для них и UUID-DSN для собственных SDK VseOK. Оба показаны на
вкладке «Подключение».
Возможности
Что уже работает
Ниже — только то, что есть в продукте сегодня. Планы вынесены отдельно, в раздел «Что в работе».
Совместимость с SDK Sentry
Исключения, capture_message, стек-фреймы, release,
environment, server_name, пользователь, теги, breadcrumbs
и контекст рантайма раскладываются в схему VseOK. Типы событий, для которых
хранилища нет (сессии, транзакции, профили), принимаются и отбрасываются — SDK
не уходит в бесконечные ретраи.
Группировка в issues
События фингерпринтятся по типу исключения и месту в коде. Если SDK не передал
culprit, сервер выводит его из самого внутреннего прикладного фрейма — два
несвязанных ZeroDivisionError в разных файлах остаются разными issue,
а не склеиваются в один.
Разобранные стектрейсы
Сырые трейсы Python, Node/V8, PHP и Ruby разбираются на структурированные фреймы при чтении: библиотечные свёрнуты, строка исходника показана там, где её захватил SDK. Источник истины — сырой текст, поэтому улучшение парсера бесплатно переобрабатывает старые события.
Алерты: Telegram, webhook, email
Новый issue и регрессия уведомляют всегда. Правило по объёму добавляет порог «N событий за M минут» — на проект или на конкретный issue. Кулдаун на issue означает, что авария на тысячу событий даёт одно уведомление, а не тысячу. Webhook совместим со Slack/Mattermost, каждый канал проверяется из интерфейса реальным путём доставки.
Регрессии
Закрытый issue, получивший новое событие, переоткрывается с алертом. Истёкшее окно «игнорировать 24 часа» тоже считается регрессией — заглушить шум не значит спрятать то, что никогда не прекращалось.
Поиск и триаж
Фильтры по статусу, уровню, окружению, релизу и полнотекстовый запрос; сортировка по свежести или частоте; постраничный вывод. Resolve, ignore с окном авто-переоткрытия, удаление и массовые операции.
Скрабинг ПДн (152-ФЗ)
Email, телефоны, номера, похожие на карточные, и IP редактируются; значения под
чувствительными ключами (password, token,
authorization, api_key…) выбрасываются — до записи
события в Redis, так что персональные данные не доходят ни до одного хранилища.
Защита от всплесков
Ограничение частоты на проект в фиксированном окне: ниже мягкого порога
принимаем всё, между мягким и жёстким — линейно убывающую долю, выше жёсткого
отвечаем 429 с Retry-After. Пороги масштабируются тарифом.
Приём, который не теряет события
Горячий путь приёма трогает только Redis — ни Postgres, ни ClickHouse. Сбой базы физически не может привести к потере отчёта об ошибке: фингерпринтинг, upsert issue и запись события идут асинхронно в воркере, с очередью недоставленных.
Статистика на сервере
Счётчики событий, временные ряды и разбивка по уровням агрегируются в ClickHouse, а не в браузере. Сроки хранения задаёт TTL таблицы, стримы Redis ограничены по длине и не могут расти бесконечно.
SDK и HTTP-контракт
Собственные клиенты для Python (декоратор, Flask/Django/FastAPI), Node.js
(middleware Express), PHP (Laravel reportable) и Ruby (Rack для
Rails/Sinatra). Любой другой язык подключается по описанному HTTP-контракту.
Организации, участники и роли
Проекты принадлежат организации, а не человеку, который их создал. Роли
owner / admin / member: владелец управляет ролями, администратор приглашает
участников, участник работает с issues. Проект чужой организации отвечает
404, а не 403 — существование чужих данных не
подтверждается.
Тарифы, квоты и оплата
Лимиты берутся из тарифа организации, а не из общих настроек развёртывания. Расход считается в момент приёма — принято, перерасход, отброшено по квоте и по лимиту частоты видно в реальном времени. Оплата картой через ЮKassa, на месяц или на год, подписка активируется по подтверждению платежа.
Идемпотентная доставка
Повторы уходят с бэкоффом и уважают Retry-After. Поскольку
event_id стабилен, ретрай доставки, которая на самом деле дошла,
дедуплицируется на сервере, а не удваивает счёт.
РФ-специфика
Не «догоняем Sentry», а делаем то, чего Sentry для России не может
У Sentry нет российского юрлица, оплаты российскими картами, договора и локализации персональных данных. Это не отставание в фичах — это то, что нельзя закрыть настройкой.
Данные в юрисдикции РФ
Весь стек размещается в российских облаках (Yandex / VK / Selectel) или на вашем железе. Это заложено в архитектуру, а не добавлено галочкой.
152-ФЗ by design
Скрабинг персональных данных выполняется на приёме, до записи в хранилище. Удаление проекта или субъекта ПДн идёт фоновой задачей со SLA «в течение 30 дней», как требует закон; доступ отзывается сразу.
Отечественные интеграции
Уведомления в Telegram и Mattermost вместо Slack и PagerDuty. В планах — VK Teams, git через GitLab/Gitea вместо GitHub, SSO через Keycloak.
Договор и закрывающие документы
Оплата в рублях, договор с российским юрлицом, счёт и акт. Поддержка на русском от людей, которые писали этот код.
Комплаенс для госсектора
Развёртывание on-prem одной командой, журнал аудита доступа, ГОСТ-TLS и совместимость с требованиями ФСТЭК — по составу работ в рамках внедрения.
Ядро под MIT
Базовую установку можно поднять самостоятельно и посмотреть в код. Vendor lock-in отсутствует конструктивно: данные ваши, схема открыта.
Что в работе (и ещё не работает)
- Source maps для JS — читаемые трейсы минифицированного кода;
- релизы и deploys: «в каком релизе появилось впервые», suspect commits через GitLab;
- cron- и uptime-мониторинг: check-in плановых задач и HTTP-пробы;
- SSO через Keycloak/LDAP и журнал аудита доступа;
- подача в реестр российского ПО (сейчас не в реестре);
- distributed tracing, session replay, профилирование, AI-анализ первопричины.
Тарифы
Платите за события, а не за места
Участники не тарифицируются нигде, кроме бесплатного плана: алерты должны видеть все, а не тот, у кого нашлась лицензия.
Free
Пет-проекты и первое знакомство
навсегда
- 10 000 событий в месяц
- хранение 7 дней
- 2 проекта, 3 участника
- алерты в Telegram, webhook, email
- лимит 60 / 300 событий в минуту
Старт
Один продукт, небольшая команда
при оплате за год
- 100 000 событий в месяц
- хранение 30 дней
- 10 проектов, участников без ограничений
- правила алертов по объёму
- лимит 300 / 3 000 событий в минуту
Команда
Несколько сервисов в проде
≈ в 3 раза дешевле Sentry на этом объёме
- 500 000 событий в месяц
- хранение 90 дней
- проектов и участников без ограничений
- приоритетная поддержка на русском
- лимит 1 000 / 10 000 событий в минуту
Бизнес
Продуктовая компания, требования ИБ
≈ в 4 раза дешевле Sentry на этом объёме
- 2 000 000 событий в месяц
- хранение 90 дней
- проектов и участников без ограничений
- выделенный инстанс — от 39 000 ₽ / мес
- лимит 3 000 / 30 000 событий в минуту
Цены указаны за месяц при оплате за год (год списывается целиком: «Старт» — 17 880 ₽, «Команда» — 58 800 ₽, «Бизнес» — 178 800 ₽). При оплате по месяцам действует коэффициент 1,2. На бесплатном тарифе события сверх квоты отбрасываются. На платных — принимаются и считаются по 0,02 ₽ за событие вплоть до трёхкратного объёма пакета, после чего отбрасываются: у перерасхода есть потолок, поэтому счёта на десятки тысяч рублей после одной аварии не будет. Текущий расход, перерасход и отброшенное видны в дашборде. Более длинный срок хранения — по запросу; новый срок применяется к новым событиям, уже сохранённые не переписываются.
| Тариф | События / мес | Хранение | Проекты | Участники | Лимит / мин (soft / hard) | Цена, ₽ / мес |
|---|---|---|---|---|---|---|
| Free | 10 000 | 7 дней | 2 | 3 | 60 / 300 | 0 |
| Старт | 100 000 | 30 дней | 10 | ∞ | 300 / 3 000 | 1 490 |
| Команда | 500 000 | 90 дней | ∞ | ∞ | 1 000 / 10 000 | 4 900 |
| Бизнес | 2 000 000 | 90 дней | ∞ | ∞ | 3 000 / 30 000 | 14 900 |
| On-prem Standard | до 50 млн | любое | ∞ | ∞ | по конфигурации | 690 000 ₽ / год |
| On-prem Enterprise | без лимита | любое | ∞ | ∞ | по конфигурации | от 1 800 000 ₽ / год |
| События / мес | VseOK | Sentry Cloud | GlitchTip Cloud |
|---|---|---|---|
| 100 000 | 1 490 ₽ — Старт | ≈ 3 430 ₽ — Team + PAYG | ≈ 1 170 ₽ |
| 500 000 | 4 900 ₽ — Команда | ≈ 14 600 ₽ — Team + PAYG | ≈ 3 900 ₽ |
| 2 000 000 | 14 900 ₽ — Бизнес | ≈ 60 800 ₽ — Business + PAYG | ≈ 19 500 ₽ — пакет 3 млн |
| Договор с юрлицом РФ, счёт, акт | да | нет | нет |
| Данные в юрисдикции РФ | да | нет | нет |
| Оплата в рублях | да | нет | нет |
| Поддержка на русском | да | нет | сообщество |
| Развёртывание on-prem | да | Enterprise | да (self-hosted) |
Цены конкурентов — оценка по публичным прайс-листам на июль 2026 при курсе 78 ₽/$. Для Sentry учтена подписка плюс pay-as-you-go по ставке $0,0003625 за событие (тир 50–100 тыс). Мы честно показываем, что GlitchTip Cloud дешевле нас на средних объёмах: у него нет российского юрлица, договора, локализации ПДн и поддержки — именно за это разница в цене. Перед подписанием договора цифры стоит перепроверить в актуальных прайсах.
On-premise · Enterprise
Для госсектора, служб ИБ и всех, кому нельзя в облако
Полная установка в вашем контуре: без выхода в интернет, с вашими политиками доступа и вашим сроком хранения.
- Офлайн-установка. Дистрибутив с образами контейнеров, разворачивается в закрытом контуре без доступа к внешним реестрам.
- Любой срок хранения. Retention задаёте вы, а не тариф; горячий уровень на NVMe, холодный — в объектном хранилище.
- SSO и журнал аудита. Интеграция с Keycloak / LDAP и журнал доступа — в составе внедрения (см. «Что в работе»).
- Реестр российского ПО. Готовим подачу: реализация прав на ПО из реестра освобождена от НДС (пп. 26 п. 2 ст. 149 НК), а для госзакупок приоритет реестрового ПО обязателен. С 1 марта 2026 действуют правила ПП №1236 с уровнями «базовый / доверенное ПО».
- 152-ФЗ и ФСТЭК. Скрабинг ПДн на приёме, удаление по требованию субъекта, ГОСТ-TLS и совместимость с требованиями ФСТЭК — по составу работ.
- Обновления и поддержка. SLA, разбор инцидентов и обновления версий входят в подписку. Ядро под MIT — код открыт для вашей проверки.
FAQ
Частые вопросы
Правда достаточно сменить DSN?
Для официальных SDK Sentry — да. Реализованы оба ингест-эндпоинта:
/api/{project}/envelope/ для актуальных SDK, включая gzip-сжатые
тела, и /api/{project}/store/ для старых. Исключения,
capture_message, стек-фреймы, release,
environment, server_name, пользователь, теги,
breadcrumbs и контекст рантайма раскладываются в схему VseOK.
Что не перенесётся: source maps (в работе), а также транзакции, профили и session replay — таких хранилищ у нас пока нет. Эти элементы envelope принимаются и отбрасываются, чтобы SDK не пытался их переслать заново.
Почему у проекта два DSN?
Официальные SDK Sentry разбирают путь DSN как целое число и падают с
BadDsn, если там UUID. Поэтому у каждого проекта есть числовой
short_id — его подставляют в sentry_sdk, — и
UUID-DSN, который используют собственные SDK VseOK. Оба видны на вкладке
«Подключение».
Что будет, если я выйду за лимит тарифа?
На платном тарифе приём не прекращается: события сверх пакета принимаются и считаются по 0,02 ₽ за событие. У перерасхода есть жёсткий потолок — три объёма пакета, после которого события отбрасываются. Это сознательное решение с двух сторон: открытый перерасход превращает одну аварию клиента в счёт, который нельзя оплатить, а полное отключение приёма — в потерю данных именно в тот момент, когда они нужнее всего.
На бесплатном тарифе события сверх квоты отбрасываются сразу. Сколько принято, сколько ушло в перерасход и сколько отброшено — видно на странице «Тарифы и оплата»; просевший график всегда объясним, а не выглядит как «VseOK теряет ошибки».
Что происходит при всплеске ошибок?
Работает защита от всплесков — ограничение частоты на проект в фиксированном
окне. Ниже мягкого порога принимается всё; между мягким и жёстким — линейно
убывающая доля событий; выше жёсткого сервер отвечает 429 с
Retry-After, и SDK повторяет позже. Пороги масштабируются тарифом:
от 60/300 в минуту на Free до 3 000/30 000 на «Бизнесе».
Error tracking по своей природе бурстовый: инцидент — это тысяча событий в минуту из одного проекта. Средняя нагрузка тарифа «Бизнес» — меньше одного события в секунду, поэтому потолки считаются от пика, а не от среднего.
Как именно соблюдается 152-ФЗ?
Технически — скрабингом на приёме: email, телефоны, номера, похожие на
карточные, и IP-адреса редактируются, а значения под чувствительными ключами
(password, token, authorization,
api_key) удаляются до того, как событие попадает в Redis.
Персональные данные не доходят ни до одного постоянного хранилища.
Организационно — данные размещаются в РФ, есть уведомление в РКН об обработке ПДн, политика обработки, договор поручения обработки с клиентом и удаление по требованию субъекта (доступ отзывается сразу, физическое удаление — в течение 30 дней).
Не потеряются ли события, если у вас упадёт база?
Нет. Горячий путь приёма пишет только в Redis и не обращается ни к Postgres,
ни к ClickHouse — сбой базы не может привести к потере отчёта об ошибке.
Фингерпринтинг, upsert issue и запись события выполняет асинхронный воркер, у
которого есть очередь недоставленных сообщений и повторный захват «зависших»
записей. Эндпоинт /health отдаёт состояние каждой зависимости и
глубину очередей и возвращает 503 при деградации, чтобы оркестратор
мог отреагировать.
Сколько хранятся события и можно ли дольше?
По тарифу: 7 дней на Free, 30 на «Старте», 90 на «Команде» и «Бизнесе». Опции — 180 дней (+40% к тарифу) и 365 дней (+80%); в on-prem срок задаёте вы. Истечение выполняет TTL таблицы ClickHouse, то есть данные удаляются по правилу, а не по расписанию, которое может не сработать.
Важная деталь: смена тарифа не переписывает уже сохранённые события — новый срок хранения применяется к новым.
Чем это лучше бесплатного self-hosted Sentry или GlitchTip?
Мы прямо считаем, что главный конкурент — «поставим сами на своей ноде», поэтому цена выстроена ниже стоимости владения собственным инстансом: нода на 15–25 тысяч рублей в месяц плюс время инженера на обновления, бэкапы и разбор инцидентов. Сверху — договор, закрывающие документы, локализация ПДн и поддержка на русском.
Если своя нода вас устраивает — ядро VseOK под MIT, разворачивается через
docker compose, и мы не считаем это проигрышем.
Можно поставить у себя и не зависеть от вашего облака?
Да. Ядро распространяется под лицензией MIT — самостоятельную установку можно поднять и обслуживать без нас. В on-prem-подписку входит другое: дистрибутив для офлайн-установки в закрытом контуре, SSO и журнал аудита, любой срок хранения, обновления, SLA и поддержка. Схема данных открыта, экспорт возможен — заблокировать вас внутри продукта нам технически нечем.
Как оплатить и какие документы вы даёте?
Тариф подключается прямо из дашборда: страница «Тарифы и оплата», выбор периода (месяц или год) и оплата картой через ЮKassa. Подписка активируется по подтверждению платежа, история платежей остаётся в интерфейсе. Бесплатный тариф доступен сразу при регистрации, карта не нужна.
Для юридических лиц — договор с российским юрлицом, оплата по счёту в рублях, счёт и акт. Для on-prem и Enterprise условия оформляются отдельным договором: оставьте заявку.
Одна строка конфигурации — и ошибки уже в России
Заведите проект, скопируйте DSN, подставьте в существующий
sentry_sdk.init(). 10 000 событий в месяц бесплатно, без карты.