Конфигурация

Gotcha полностью настраивается переменными окружения с префиксом GOTCHA_. Ни одного конфиг-файла, ни одной настройки через веб-интерфейс для системных параметров — только переменные окружения. Их авторитетный источник — файл cmd/gotcha/config.go в исходном коде; этот документ — читаемое описание того же самого, сгруппированное по смыслу. Шаблон со всеми переменными и комментариями лежит в .env.example в корне репозитория.

Как задать переменные окружения в Docker Compose

Два равнозначных способа:

Способ 1 — файл .env рядом с docker-compose.yml (рекомендуется, самый простой). Docker Compose читает его автоматически:

# в папке gotcha/
nano .env
GOTCHA_SECRET_KEY=случайная-строка-из-openssl-rand
GOTCHA_BASE_URL=https://gotcha.example.com
GOTCHA_SMTP_HOST=smtp.yandex.ru
GOTCHA_SMTP_PORT=465
GOTCHA_SMTP_USER=noreply@example.com
GOTCHA_SMTP_PASSWORD=пароль-приложения
GOTCHA_SMTP_FROM=noreply@example.com

Применить изменения:

docker compose up -d

(команда пересоздаёт контейнер gotcha с новыми переменными; postgres/clickhouse не трогает, если их переменные не менялись).

Способ 2 — блок environment: прямо в docker-compose.yml. Если вы не хотите заводить .env, можно прописать переменные прямо в compose-файле, в секции сервиса gotcha:

services:
  gotcha:
    # ...
    environment:
      GOTCHA_PG_DSN: postgres://gotcha:gotcha@postgres:5432/gotcha?sslmode=disable
      GOTCHA_CH_DSN: clickhouse://gotcha:gotcha@clickhouse:9000/gotcha
      GOTCHA_BASE_URL: ${GOTCHA_BASE_URL:-http://localhost:59080}
      GOTCHA_SECRET_KEY: ${GOTCHA_SECRET_KEY:-insecure-dev-secret}
      GOTCHA_SMTP_HOST: smtp.yandex.ru

${VAR:-default} — это подстановка Docker Compose: «взять значение VAR из окружения/.env, а если не задано — использовать значение после :-». В штатном docker-compose.yml репозитория уже используется этот приём для GOTCHA_BASE_URL и GOTCHA_SECRET_KEY, так что для этих двух переменных обычно достаточно способа 1 (просто создать .env), ничего не редактируя в самом compose-файле.

После любого изменения переменных выполните docker compose up -d, чтобы применить их — Docker Compose сам обнаружит, что конфигурация контейнера изменилась, и пересоздаст его.


Core (основные)

ПеременнаяПо умолчаниюОписание
GOTCHA_ADDR:8080Адрес и порт, который слушает HTTP-сервер внутри контейнера. Как правило, менять не нужно — наружу порт пробрасывается через docker-compose.yml/GOTCHA_PORT (см. Установку), а не через эту переменную.
GOTCHA_BASE_URLhttp://localhost:8080Публичный адрес вашего инстанса — то, как до него реально добираются пользователи и SDK. Используется для построения DSN проектов, ссылок в письмах-приглашениях и ссылок на инциденты в алертах (Telegram/webhook/email). Должен точно совпадать со схемой+хостом+портом, по которым инстанс реально доступен. Если значение не localhost/127.0.0.1, приложение в режимах web/all требует непустой GOTCHA_SECRET_KEY — см. ниже. Если значение не начинается с https:// и не локальное — в лог пишется предупреждение (сессионные cookie идут открытым текстом).

Database (база данных)

ПеременнаяПо умолчаниюОписание
GOTCHA_PG_DSNpostgres://gotcha:gotcha@localhost:5432/gotcha?sslmode=disableСтрока подключения к PostgreSQL — хранит организации, проекты, пользователей, правила алертов, инциденты. В штатном docker-compose.yml уже выставлено postgres://gotcha:gotcha@postgres:5432/gotcha?sslmode=disable (имя хоста postgres — это имя сервиса в docker-сети). Менять нужно, только если вы используете внешнюю/собственную БД вместо контейнера из compose.
GOTCHA_CH_DSNclickhouse://localhost:9000/gotchaСтрока подключения к ClickHouse — хранит события, спаны трейсов, метрики, профили, результаты аптайм-проверок. В штатном compose — clickhouse://gotcha:gotcha@clickhouse:9000/gotcha. Менять по тем же причинам, что и GOTCHA_PG_DSN.

Email / SMTP

Используется для писем-приглашений и email-канала алертов. Пока GOTCHA_SMTP_HOST пуст — отправка почты выключена целиком (в логах будет предупреждение GOTCHA_SMTP_HOST is not set, email alert channels are disabled), при этом остальная функциональность работает нормально.

ПеременнаяПо умолчаниюОписание
GOTCHA_SMTP_HOST(пусто)Адрес SMTP-сервера, например smtp.yandex.ru. Пока пусто — почта выключена.
GOTCHA_SMTP_PORT587Порт SMTP. 587 (STARTTLS) — обычный выбор; некоторые провайдеры используют 465 (SMTPS).
GOTCHA_SMTP_USER(пусто)Логин для авторизации на SMTP-сервере.
GOTCHA_SMTP_PASSWORD(пусто)Пароль. Для сервисов вроде Яндекс/Gmail обычно нужен не пароль от аккаунта, а отдельный «пароль приложения».
GOTCHA_SMTP_FROM(пусто)Адрес отправителя в заголовке From: писем.

Retention (хранение данных ClickHouse)

Сколько дней ClickHouse хранит данные каждого типа, прежде чем удалить старые записи. Меньше — меньше места на диске, больше — глубже история для расследований.

ПеременнаяПо умолчаниюОписание
GOTCHA_RETENTION_DAYS90Хранение событий (ошибок), транзакций и Web Vitals.
GOTCHA_SPAN_RETENTION_DAYS30Хранение спанов трейсов (детали внутри транзакций).
GOTCHA_METRIC_RETENTION_DAYS30Хранение точек метрик (принятых по OTLP).
GOTCHA_PROFILE_RETENTION_DAYS7Хранение сэмплов профилирования (самые тяжёлые по объёму данные, поэтому дефолт короче остальных).
GOTCHA_OUTBOX_RETENTION_DAYS7Хранение записей об уже доставленных/провалившихся уведомлениях (email/webhook/Telegram) в PostgreSQL. Значение специально небольшое: в этих записях остаются секреты каналов доставки (например, токен вебхука).

Изменение retention применяется на следующем старте приложения (значение используется, чтобы выставить TTL на таблицах ClickHouse) — задним числом уже удалённые данные не восстановятся.

Quotas & edition (квоты и редакция)

ПеременнаяПо умолчаниюОписание
GOTCHA_EDITIONossoss или saas. Определяет дефолт для квот ниже: в oss все дефолты = 0 (безлимит), в saas = 1 000 000 в месяц. Явно заданный GOTCHA_DEFAULT_*_QUOTA всегда перекрывает дефолт редакции.
GOTCHA_DEFAULT_EVENT_QUOTA0 в ossДефолтная месячная квота на приём событий (ошибок) для новых организаций. 0 = безлимит.
GOTCHA_DEFAULT_TRANSACTION_QUOTA0 в ossТо же для транзакций (performance-трейсов).
GOTCHA_DEFAULT_METRIC_QUOTA0 в ossТо же для точек метрик.
GOTCHA_DEFAULT_PROFILE_QUOTA0 в ossТо же для профилей.
GOTCHA_MAX_EVENT_BYTES1048576 (1 МиБ)Максимальный размер одного принимаемого события в байтах. Событие крупнее — отклоняется.
GOTCHA_METRIC_EVAL_INTERVAL60Как часто (в секундах) проверяются пороговые правила алертов по метрикам.
GOTCHA_PROFILE_EVAL_INTERVAL300Как часто (в секундах) запускается детектор регрессий профилирования.

Когда обязательно менять квоты: значения 0 (безлимит) в oss-редакции — это сознательный выбор для приватного self-hosted инстанса, где DSN не утекает наружу. Если DSN проекта попадает в публично доступный код (например, во фронтенд-JS вашего сайта), кто угодно может слать на него события неограниченно — это и вектор злоупотребления, и риск исчерпать диск ClickHouse. В таком случае задайте реальные числа, например:

GOTCHA_DEFAULT_EVENT_QUOTA=100000
GOTCHA_DEFAULT_TRANSACTION_QUOTA=50000

(Это дефолт для новых организаций; квоту существующей организации можно изменить в её настройках в веб-интерфейсе.)

Privacy / scrubbing (приватность)

Серверная очистка персональных данных перед сохранением — включена по умолчанию.

ПеременнаяПо умолчаниюОписание
GOTCHA_SCRUB_IPtrueЗануляет IP-адрес пользователя, о котором сообщило событие, перед сохранением.
GOTCHA_SCRUB_EMAILtrueЗануляет email пользователя, о котором сообщило событие, перед сохранением.
GOTCHA_SCRUB_KEYSвстроенный список (password,passwd,token,secret,authorization,auth,cookie,api_key,apikey,access_token,refresh_token,session,credit_card,card_number,cvv)Список ключей (через запятую, без учёта регистра), значения которых маскируются в тегах/контекстах/стек-трейсах/данных спанов. Если задать эту переменную явно — она полностью заменяет встроенный список, а не дополняет его. Задавайте свой список целиком, если хотите добавить ключ (например, internal_user_id), включив в него и нужные вам стандартные ключи.
GOTCHA_SCRUB_FREETEXTfalseДополнительно маскирует email-адреса, встреченные в свободном тексте (сообщение об ошибке, значение исключения, описание спана). Выключено по умолчанию сознательно: наивная маскировка может испортить SQL-запросы или URL в тексте ошибки. Маскируются только email, не телефоны и не другие виды ПДн.

Security (безопасность)

ПеременнаяПо умолчаниюОписание
GOTCHA_SECRET_KEYinsecure-dev-secretКлюч подписи сессионных и OAuth state-cookie. Дефолт публичен (он в исходном коде) — оставлять его на реальном сервере значит разрешить угон аккаунта через OAuth. На не-localhost GOTCHA_BASE_URL приложение отказывается стартовать в режимах web/all, пока не задан свой ключ. Сгенерировать: openssl rand -base64 32. Подробности — в Установке, шаг 6.
GOTCHA_ALLOW_INSECURE_SECRETfalseАварийный обход проверки выше — позволяет стартовать с дефолтным ключом даже на не-localhost адресе. Только для нестандартных dev-стендов, никогда не используйте в реальной эксплуатации.
GOTCHA_REGISTRATIONinviteРежим самостоятельной регистрации: open — открыта всем; invite — самостоятельная регистрация закрыта, новые пользователи попадают в организацию только по ссылке-приглашению; closed — самостоятельная регистрация выключена полностью. Первый пользователь на чистом инстансе регистрируется всегда, независимо от этой настройки (bootstrap инстанс-админа).
GOTCHA_SSRF_ALLOW_PRIVATEfalseРазрешить аптайм-проверкам и исходящим webhook-алертам обращаться к приватным/loopback/link-local адресам (например, 192.168.x.x, 127.0.0.1, 169.254.x.x). Держите false на любом инстансе, доступном нескольким пользователям/организациям — иначе один пользователь может завести «аптайм-проверку» или вебхук, который на самом деле сканирует вашу внутреннюю сеть (SSRF).
GOTCHA_AUTO_MIGRATEtrueПрименять миграции схемы БД автоматически при старте. false — миграции нужно применить отдельным шагом заранее, иначе приложение откажется стартовать на устаревшей схеме. Подробности и когда это нужно — в Обновлении.
GOTCHA_EXTERNAL_CHANNEL_DETAILStrueОтправлять ли текст ошибки (заголовок/culprit/тело) во внешние каналы алертов (Telegram/webhook). false — отправляется только обезличенная ссылка обратно на инстанс, без текста ошибки (текст ошибки может содержать персональные данные, которые вы не хотите, чтобы покидали периметр).

Uptime & probe (аптайм и выносные пробы)

ПеременнаяПо умолчаниюОписание
GOTCHA_UPTIME_CONCURRENCY50Сколько аптайм-проверок выполняется одновременно (в режимах uptime/all, а также выносной пробой в режиме probe).
GOTCHA_LOCAL_REGIONlocalИмя встроенного локального региона аптайм-проверок — то, что видно в интерфейсе при выборе региона монитора.
GOTCHA_PROBE_TOKEN(пусто)Только для --mode=probe: bearer-токен, которым выносная проба аутентифицируется к центральному инстансу. Обязателен в этом режиме.
GOTCHA_SERVER_URL(пусто)Только для --mode=probe: базовый URL центрального инстанса Gotcha, к которому подключается проба. Обязателен в этом режиме, должен быть абсолютным http(s)-адресом.

Режим --mode=probe — это отдельный процесс, разворачиваемый в другом регионе/дата-центре: он не открывает ни PostgreSQL, ни ClickHouse, только ходит наружу к центральному инстансу по HTTP.

OAuth / SSO

Каждый провайдер входа включается независимо. Если включить провайдер, не задав его обязательные секреты — приложение откажется стартовать.

ПеременнаяПо умолчаниюОписание
GOTCHA_OIDC_ENABLEDfalseВключает вход через произвольный OIDC-провайдер (Keycloak, Authentik, Google Workspace и т.п.). Требует GOTCHA_OIDC_ISSUER, _CLIENT_ID, _CLIENT_SECRET.
GOTCHA_OIDC_ISSUER(пусто)URL издателя (issuer) OIDC-провайдера.
GOTCHA_OIDC_CLIENT_ID / _CLIENT_SECRET(пусто)Учётные данные приложения, зарегистрированного у провайдера.
GOTCHA_OIDC_SCOPES(пусто)Дополнительные OAuth-scope сверх стандартных, через пробел/запятую (по конвенции провайдера).
GOTCHA_OIDC_NAME(пусто)Отображаемое имя кнопки входа («Войти через …») в интерфейсе.
GOTCHA_YANDEX_ENABLEDfalseВключает вход через Yandex ID. Требует GOTCHA_YANDEX_CLIENT_ID/_CLIENT_SECRET.
GOTCHA_VK_ENABLEDfalseВключает вход через VK ID. Требует GOTCHA_VK_CLIENT_ID/_CLIENT_SECRET.

Пошаговая настройка каждого провайдера — в SSO.

Что дальше