Коротко: Gotcha — self-hosted observability (ошибки, аптайм, трейсы, метрики, профили) в одном Go-бинарнике на PostgreSQL и ClickHouse; совместим с Sentry SDK.

Gotcha — это self-hosted observability-платформа: трекинг ошибок, мониторинг аптайма, распределённый трейсинг, метрики и профилирование. Всё это — один Go-бинарник поверх PostgreSQL и ClickHouse, без Kafka и Redis. Ставится на свой сервер за минуту, данные никуда не уходят. Лицензия Apache-2.0.

Ниже — что это такое, как поднять за минуту и почему стоит потыкать уже сегодня.

Поставить за минуту

Нужен только Docker и Docker Compose. Три команды:

git clone https://gitflic.ru/project/otezvikentiy/gotcha.git
cd gotcha
docker compose up -d

Поднимутся три контейнера: само приложение (в режиме --mode=all), PostgreSQL и ClickHouse. Приложение слушает http://localhost:59080. Проверить готовность:

curl -sf http://localhost:59080/healthz
# {"clickhouse":"ok","postgres":"ok"}

Дальше открываете /register, создаёте первого пользователя (он становится администратором инстанса), и на онбординге одной формой заводите организацию и первый проект. Минимальные требования — Linux и 2 ГБ оперативной памяти.

Подключить приложение — это просто смена DSN

Gotcha принимает данные по протоколу приёма штатных Sentry SDK. Если у вас уже настроен Sentry SDK — переезд сводится к смене DSN. На странице Setup проекта берёте DSN и вставляете в инициализацию SDK. Пример на Python:

import sentry_sdk

sentry_sdk.init(
    dsn="<DSN вашего проекта в Gotcha>",
    environment="production",
    traces_sample_rate=0.2,
)

Кидаете тестовую ошибку — и она появляется в разделе «Проблемы» через секунды:

try:
    raise RuntimeError("Gotcha test error")
except Exception:
    sentry_sdk.capture_exception()

Готовые сниппеты есть для PHP (в том числе Laravel), Node, браузера, Python и Go. Метрики принимаются по OTLP (POST /v1/metrics), профили — по pprof (POST /profiles/pprof).

Раздел «Проблемы» в Gotcha«Проблемы»: ошибки автоматически группируются — с уровнями, трендом, статусами и назначением ответственного.

Что получаете из коробки

Ошибки

События по Sentry-протоколу автоматически группируются в issues по fingerprint: одинаковые по сути ошибки (user 42 not found и user 43 not found) схлопываются в одну проблему. Стектрейсы с разделением на свой и библиотечный код, breadcrumbs, tags, contexts. Фильтры по статусу, уровню, окружению и периоду; resolve / ignore / назначение на человека; ссылка на связанный трейс.

Производительность и трейсинг

Транзакции и спаны — через тот же SDK. По каждому эндпоинту: пропускная способность, задержки p50/p75/p95/p99, доля ошибок и Apdex. Есть автоматический детект проблем: N+1-запросы, медленные запросы к БД, HTTP-флуды. Водопад трейса показывает дерево спанов с подсветкой ошибочных. Из браузера собираются Web Vitals (LCP, INP, CLS, FCP, TTFB). Отдельно работает детектор регрессий производительности — сравнивает свежее окно с baseline за 7 дней.

Эндпоинты и перцентили задержек в GotchaЭндпоинты с перцентилями задержек, долей ошибок и Apdex по каждому маршруту.

Метрики

Приём по OTLP: counters (sum), gauges и гистограммы (p50/p95/p99). Лейблы берутся из ресурсных атрибутов OpenTelemetry, графики строятся по периодам, на пороговые правила вешаются алерты.

Метрики в GotchaМетрики по типам: gauge, histogram, sum.

Аптайм

Четыре типа проверок: HTTP (метод, ожидаемый статус, проверка тела, срок SSL-сертификата), TCP, DNS и Heartbeat (когда пингует уже само приложение — удобно для крон-задач). Проверки можно гонять из встроенного региона и из удалённых probe-ов с консенсусом any / majority / all. Инциденты с историей, публичные статус-страницы без логина, окна планового обслуживания (в них уведомления глушатся).

Мониторы аптайма в Gotcha«Мониторы»: аптайм, средняя задержка и доступность за 24 часа по каждому сервису.

Профилирование

CPU и flame graph — из Sentry profiling payloads и напрямую из pprof. Flame graph в виде icicle с детерминированными цветами по функциям. Отдельный детектор регрессий профилей ловит момент, когда функция начала «съедать» заметно больше.

Алерты

Три канала доставки: email (по SMTP), webhook (с подписью HMAC-SHA256) и Telegram. Правила по ошибкам: новая проблема, регрессия (переоткрытие решённой), спайк по порогу за окно; плюс отдельные правила по метрикам (avg / p95 / … больше порога за окно) с гистерезисом восстановления.

Приватность по умолчанию

Для телеметрии это редкий акцент — а зря: в трейсах и ошибках оседают самые чувствительные данные. В Gotcha защита включена сразу:

  • PII-скрабинг на приёме: IP и email обнуляются до записи в ClickHouse; значения по ключам вроде password, token, authorization, secret, credit_card редактируются в tags, contexts, стектрейсах и данных спанов.
  • SSRF-защита: исходящие вебхуки и аптайм-проверки по умолчанию не ходят на приватные адреса (127.0.0.1, 192.168.x.x и подобные).
  • No phone-home: Gotcha не отправляет разработчикам никакой аналитики и телеметрии.
  • Анонимные внешние уведомления: в Telegram и webhook по умолчанию уходит только ссылка, без текста ошибки (важно с учётом 152-ФЗ и того, что серверы мессенджеров вне РФ).
  • Права субъекта: владелец организации может выгрузить или удалить данные субъекта по user_id или email.

Как масштабируется

Пока нагрузка небольшая — хватает одного процесса --mode=all. Когда вырастет, тот же бинарник запускается в узких ролях: ingest (приём данных), web (интерфейс), uptime (проверки и вотчдоги), probe (удалённая проба — только исходящий HTTP, без доступа к базе). Retention настраивается по каждому типу сигнала отдельно; дефолты: события 90 дней, спаны и метрики — 30, профили — 7 (они самые тяжёлые).

Зрелость и стек

Стек: Go, PostgreSQL, ClickHouse — без Kafka и Redis. Интерфейс серверный (templ + htmx), почти без тяжёлого фронтенда. Это первый публичный self-hosted-релиз; проект прошёл несколько раундов security- и privacy-аудита и покрыт сотнями тестов, в том числе интеграционными на реальных контейнерах Postgres и ClickHouse. Лицензия Apache-2.0.

Попробовать

Всё, что нужно для теста, — сервер с Docker и три команды из начала статьи. Разверните, направьте один SDK на новый DSN и посмотрите, как первая ошибка прилетает в «Проблемы».

  • Сайт продукта: getgotcha.ru
  • Исходники: GitFlic · зеркало GitHub
  • Чат: t.me/getgotcha · новости: t.me/gotcha_news
  • Облачная версия в работе — записаться в лист ожидания можно на сайте.