Ошибки, трейсы, метрики, логи и аптайм — на вашем сервере
Self-hosted observability в одном лёгком Go-бинарнике. Совместим со штатными Sentry SDK и OTLP. Открытый код, Apache-2.0.
$ git clone https://gitflic.ru/project/otezvikentiy/gotcha.git
$ cd gotcha
$ docker compose up -dПоменяйте DSN в вашем Sentry SDK — и первая ошибка прилетит через секунды.
Gotcha — self-hosted платформа наблюдаемости в одном Go-бинарнике: трекинг ошибок, распределённый трейсинг, метрики, логи, профилирование, мониторинг аптайма и серверов — всё на вашем сервере. Совместим со штатными Sentry SDK и принимает OTLP, поэтому переезд с облака занимает столько же времени, сколько смена DSN — в том числе срочный, когда доступ к прежнему сервису закончился не по вашему решению. Интерфейс, уведомления и документация — полностью на русском и английском. Открытый код, лицензия Apache-2.0.
Обзор: всё сломанное на одной шкале
Точка входа в проект — одна лента того, что сломано сейчас и что недавно починилось, собранная по всем шести источникам сразу.
- Хосты, мониторы аптайма, метрики, SLO, регрессии транзакций и профилей — в одном списке
- Три плитки состояния: аптайм за окно, хосты за порогом, новые проблемы за сутки
- Каскадный отказ свёрнут в одну карточку с составом, а не рассыпан на двадцать строк
- Деплои за окно — рядом, чтобы регрессия сразу получила подозреваемого

Ошибки и их разбор
Приём событий по протоколу Sentry SDK, автоматическая группировка в проблемы и страница разбора, на которой видно всё об одной ошибке сразу.
- Стектрейсы, breadcrumbs, tags и contexts; полные детали запроса — метод, URL, параметры и заголовки, очищенные от PII
- Автоматическая группировка, фильтры, ответственный и статусы «решено» и «игнорируется»
- На странице проблемы: график частоты, первое и последнее появление, счётчик событий, копирование в Markdown
- Логи вокруг события — одной ссылкой со страницы ошибки: что писало приложение до и после
- Выгрузка событий группы в CSV, JSON или NDJSON прямо из карточки проблемы

Логи
Приём по OTLP/HTTP и построчным JSON — без отдельного стека для логов и без второго интерфейса, в который надо переключаться.
- Полнотекстовый поиск по сообщению плюс фасеты: severity, сервис, окружение
- Гистограмма по уровням за период: видно, когда началось, ещё до чтения строк
- Три склейки: логи вокруг события ошибки, логи трейса, логи хоста
- Своя квота и свой срок хранения — логи не съедают бюджет ошибок и метрик

Производительность и профили
Распределённые трейсы и транзакции, карта зависимостей и flamegraph-профили. Перф-проблемы детектятся по имени: N+1, медленный запрос, HTTP-флуд.
- Детекторы называют проблему и объясняют, как чинить — с полным SQL и локацией в коде
- Web Vitals: LCP, INP, CLS, FCP, TTFB
- Карта зависимостей: базы, кеши и внешние вызовы — p50/p95 и доля ошибок из уже собранных трейсов
- Flamegraph из Sentry-профилей и pprof, детект регрессий профилей
- Маркеры деплоев на графиках: регрессия после релиза получает пометку «после деплоя vX»

Метрики, хосты и рецепты
Метрики приложений по OTLP, системные метрики серверов и готовые рецепты для типовых сервисов: конфиг коллектора выдаётся с уже подставленным ключом проекта.
- Хосты: CPU, память, диск, сеть, load average и процессы — четыре встроенных порога из коробки
- Рецепты для PostgreSQL, MariaDB, nginx, Redis и Docker: конфиг коллектора, индикатор «данные пошли» и рекомендованные пороги одной кнопкой
- Пороги переопределяются метками окружения и роли, а не только глобально: prod и staging живут по разным правилам
- Нативный агент: один бинарь, установка одной командой, работает в закрытых сетях
- Защита от взрыва кардинальности — разросшийся набор меток не роняет хранилище

Аптайм и статус-страницы
HTTP-чеки из встроенного локального региона и удалённых зондов, а у каждого проекта — свой публичный адрес состояния.
- Разбивка задержек по фазам: DNS → TCP → TLS → TTFB
- Ретраи на чек и окна обслуживания — без ложных инцидентов
- Публичная статус-страница проекта с историей за 90 дней и лентой инцидентов
- Адрес страницы неизменен на всё время её жизни, старые ссылки отвечают 301
- Удалённые зонды (--mode=probe) — проверка снаружи вашего периметра

Оповещения, SLO и группы инцидентов
Доставка в email, вебхук и Telegram — на русском или английском, по выбору оператора. Каскадный отказ приходит одним инцидентом, а не сорока.
- Правила на новые проблемы, спайки, пороги метрик, перф- и uptime-регрессии
- Группы инцидентов: корневой отказ в шапке, вызванное им — внутри, с бейджами «молчит — уведомляет корень» и «подавлен: родитель недоступен»
- SLO и бюджеты ошибок: двухоконный burn-rate алерт будит, только когда бюджет реально горит
- Эскалация по ступеням: круг получателей расширяется, пока инцидент не подтверждён
- Окна обслуживания на весь проект и тест канала в один клик — с причиной ошибки, если доставка не прошла

Ваши данные и ваш периметр
Данные не уезжают наружу, вынести их можно в любой момент, а раскрытый ключ приёма не даёт больше, чем нужно его источнику.
- Скрабинг PII на стороне сервера включён по умолчанию: обнуление IP и email, redaction по ключам
- SSRF-защита исходящих запросов вебхуков и uptime-чеков — тоже из коробки
- Выгрузки в CSV, JSON и NDJSON: фоном, с фильтрами по времени и окружению, с маскированием PII по умолчанию
- У каждого DSN-ключа свой тип — browser, server, agent: публично раскрытый browser-ключ не зарегистрирует хост и не отправит маркер деплоя
- Готовый файл выгрузки приходит письмом — вопрос «а как отдать данные в свой пайплайн» закрыт вместе с вопросом вендор-лока

Доступы: SSO и RBAC
Мультитенантные организации, команды и роли; вход через SSO — каждый провайдер включается и настраивается независимо.
- OIDC (generic), Yandex ID, VK ID
- Организации, команды и роли: у участника свой уровень доступа к проектам
- Можно оставить только тот провайдер входа, который принят в компании

Эксплуатация и контракт 1.0
С 1.0 контракт совместимости заморожен: то, на что вы завязались, не переедет в патч-релизе. Всё, что это нарушает, ждёт мажорной версии.
- Заморожены имена переменных окружения, адреса приёма и форматы тел, схема миграций, формат бэкапов, имена self-метрик, тело исходящего вебхука, контракт агента и адреса опубликованных статус-страниц
- Намеренно не покрыты: внутренние Go-пакеты, адреса и вёрстка страниц интерфейса, схема таблиц PostgreSQL и ClickHouse, состав колонок выгрузок и формулировки собственных логов
- Маркеры деплоев с версией, окружением, составом изменений и ссылкой на прогон CI
- Откат релиза без восстановления из бэкапа; прерванную миграцию поднимает --migrate-force
- Self-monitoring: метрики gotcha_*, раздельные /healthz и /readyz, квоты и retention по каждому типу сигнала

Как устроено
Один Go-бинарник, PostgreSQL + ClickHouse. Режимы --mode=ingest|web|uptime|probe|all для масштабирования. Без Kafka и Redis. Настраиваемая retention по каждому типу сигнала.
Системные требования
Один сервер, три процесса (приложение, PostgreSQL, ClickHouse). Единственная зависимость — Docker и Docker Compose.
ОС: Ubuntu 22.04/24.04, Debian 12 или AlmaLinux/Rocky/RHEL 9/10 · x86-64
Кто может отключить ваш инстанс
Никто снаружи. Gotcha работает на вашем железе, приём событий идёт на ваш адрес, аккаунты заводятся в вашей базе. Внешней компании, которая решает, продолжите вы пользоваться инструментом или нет, здесь просто нет: отзывать ключи, блокировать аккаунт и менять условия в одностороннем порядке некому.
- Apache-2.0: право запускать, менять и форкать код остаётся у вас независимо от того, что дальше будет с проектом
- Данные лежат в вашем периметре, выгрузка в CSV, JSON или NDJSON доступна в любой момент — дверь наружу открыта и от нас тоже
- Это не только ошибки: трейсы, метрики, логи, профили и аптайм в одном месте, поэтому следующий сигнал не означает следующего сервиса
Платная установка и поддержка
Gotcha бесплатен, но можно не тратить время команды: установлю под ключ, перенесу с Sentry или GlitchTip, возьму инстанс на поддержку. Консультации — письменно, без созвонов.
Частые вопросы
Что такое Gotcha?
Gotcha — self-hosted платформа наблюдаемости в одном Go-бинарнике: трекинг ошибок, распределённый трейсинг, метрики, логи, профилирование, мониторинг аптайма и серверов. Всё работает на вашем сервере. Открытый код, лицензия Apache-2.0.
Совместим ли Gotcha со штатным Sentry SDK?
Да. Gotcha принимает события по протоколу Sentry, поэтому достаточно указать в вашем Sentry SDK новый DSN — переезд занимает столько же времени, сколько смена DSN в уже настроенном приложении.
Можно ли перейти с Sentry на Gotcha без изменения кода?
Да. Gotcha принимает события по протоколу приёма Sentry, поэтому переезд сводится к замене DSN в том же официальном Sentry SDK — код приложения переписывать не нужно. Пошаговый разбор — в гайде «Как перейти с Sentry на self-hosted Gotcha».
Что делать, если аккаунт в облачном трекере заблокировали?
Поднять свой инстанс Gotcha и заменить DSN в том же официальном Sentry SDK — код приложения переписывать не нужно, события пойдут на ваш сервер. Инстанс работает на вашем железе: ключи приёма выпускаете вы, аккаунты заводите вы, лицензия Apache-2.0, поэтому доступ к инструменту не зависит от решения внешней компании. Историю событий из заблокированного аккаунта перенести нельзя — остаётся только то, что успели выгрузить, новые события копятся с момента смены DSN. Пошаговый разбор — в гайде «Как перейти с Sentry на self-hosted Gotcha».
Нужны ли Gotcha Kafka или Redis?
Нет. Gotcha работает как один Go-бинарник с PostgreSQL и ClickHouse — ни Kafka, ни Redis не требуется. Быстрый старт — docker compose up -d.
Какие сигналы наблюдаемости поддерживает Gotcha?
Ошибки с группировкой в issues, распределённые трейсы и транзакции (включая Web Vitals), метрики по OTLP с пороговыми алертами, структурированные логи с поиском и привязкой к трейсам, системные метрики серверов (хосты), CPU/flame-graph профили и мониторинг аптайма с публичными status-страницами. Поверх сигналов — SLO с бюджетами ошибок, карта зависимостей, маркеры деплоев и эскалация уведомлений.
Умеет ли Gotcha мониторить сами серверы — CPU, память, диск?
Да. Раздел «Хосты» показывает CPU, память, диск, сеть, load average и процессы каждого сервера; четыре встроенных порога открывают инциденты из коробки. Данные шлёт нативный агент gotcha-agent — один бинарь, ставится одной командой прямо с вашего инстанса и работает в закрытых сетях — либо стандартный OpenTelemetry Collector.
Можно ли собирать логи в Gotcha?
Да. Логи принимаются по OTLP/HTTP и построчным JSON, хранятся с собственной квотой и сроком хранения. Экран логов даёт полнотекстовый поиск, фильтры по severity, сервису и окружению, а склейка показывает «логи вокруг события» со страницы ошибки, логи трейса и логи хоста.
Есть ли готовые рецепты мониторинга PostgreSQL, nginx, Redis?
Да. Раздел «Рецепты» даёт готовое подключение PostgreSQL, MariaDB, nginx, Redis и Docker: конфиг OpenTelemetry-коллектора с уже подставленным ключом проекта, индикатор «данные приходят», преднастроенные графики и рекомендованные пороги, создающиеся одной кнопкой.
Как развернуть Gotcha?
Gotcha — это один Go-бинарник, которому нужны PostgreSQL и ClickHouse. Быстрый старт — docker compose up -d. Для масштабирования есть режимы --mode=ingest|web|uptime|probe|all. Без Kafka и Redis.
Как обновлять Gotcha и можно ли откатиться?
Обновление — pull нового образа и перезапуск; миграции применяются автоматически. Схема БД несёт маркер обратной совместимости, поэтому откат на предыдущий релиз возможен без восстановления из бэкапа. Прерванную миграцию восстанавливает флаг --migrate-force. Подробности — на страницах «Обновление» и «Резервное копирование» в документации.
Есть ли у Gotcha русский интерфейс?
Да. Интерфейс, алерты и письма (язык задаётся настройкой GOTCHA_LOCALE) и вся документация доступны полностью на русском и английском.
Под какой лицензией распространяется Gotcha?
Apache-2.0. Исходный код открыт и доступен на GitHub и GitFlic.
Что вы сломаете следующим релизом?
С 1.0 контракт совместимости заморожен: имена переменных окружения, адреса приёма и форматы тел запросов, схема миграций, формат бэкапов, имена self-метрик без пометки «временная», тело исходящего вебхука, контракт агента и адреса уже опубликованных статус-страниц меняются только назад совместимо. Всё, что это нарушает, ждёт мажорной версии. Что в обещание намеренно не входит и сроки депрекации — на странице политики версионирования.
Как вынести данные наружу?
Фоновые выгрузки групп ошибок или сырых событий в CSV, JSON или NDJSON, с фильтрами по времени и окружению и маскированием PII по умолчанию. Готовый файл приходит письмом и скачивается со страницы выгрузок.
Gotcha Cloud
Тот же продукт и та же модель данных, только инстанс держим мы. Переезд возможен в обе стороны: из облака к себе и обратно, без переписывания интеграций — контракт приёма один и тот же.
- Обновления, бэкапы и мониторинг самого инстанса — на нас
- Данные остаются в российской юрисдикции
- Переезд к себе в любой момент: тот же формат бэкапа
Дату запуска не называем, пока её нет. Напишите — расскажем, когда появится ясность, и учтём ваш сценарий.