
Зачем нам понадобилась собственная Sentry
Когда наша команда столкнулась с необходимостью отслеживать ошибки в production-окружении, первый вариант казался очевидным — облачная версия Sentry. Но после анализа затрат на обработку тысяч событий в день и требований к приватности данных мы решили развернуть self-hosted версию на собственном сервере. За полгода эксплуатации накопилось немало практических знаний, которыми хотим поделиться.
Подготовка окружения и системные требования
Перед началом установки мы тщательно изучили документацию Sentry и выяснили, что self-hosted версия требует немалых ресурсов. Для production-среды рекомендуется выделить:
- 4 ГБ оперативной памяти минимум (8 ГБ для комфортной работы)
- 20 ГБ дискового пространства (в зависимости от объема данных)
- Linux сервер (мы использовали Ubuntu 20.04)
- Docker и Docker Compose установленные и настроенные
Именно Docker стал ключевым решением. Sentry предоставляет готовые контейнеры, что значительно упрощает развертывание и обновления. Проверьте, что Docker Compose версии 1.28 или выше — это критично для корректной работы оркестрации сервисов.
Процесс установки и первичная конфигурация
Официальный репозиторий getsentry/self-hosted содержит всё необходимое. Мы клонировали его на выделенный сервер:
Шаг первый: клонирование и инициализация
Команда git clone https://github.com/getsentry/self-hosted.git загружает весь проект. После этого переходим в директорию и запускаем скрипт инициализации:
./install.sh
Этот скрипт автоматически:
- Создаёт необходимые директории для хранения данных
- Генерирует конфигурационные файлы
- Устанавливает переменные окружения
- Инициализирует базу данных PostgreSQL
- Создаёт первого администратора
Процесс занял у нас около 10 минут. Это довольно быстро для полноценной системы мониторинга.
Шаг второй: настройка параметров
В файле .env мы изменили критические параметры:
SENTRY_SECRET_KEY— сгенерировать можно командойpython -c 'import os; print(os.urandom(32).hex())'SENTRY_SINGLE_ORGANIZATION=false— чтобы поддерживать несколько организацийMAIL_HOSTи связанные параметры для отправки уведомлений- Пользовательские порты (мы использовали 9000 вместо стандартного 80)
Интеграция с приложением и проверка функциональности
После успешного запуска контейнеров (docker-compose up -d) мы приступили к интеграции Sentry в наше приложение Node.js. Процесс оказался банально простым:
Установка SDK: npm install @sentry/node
Инициализация в коде приложения потребовала всего несколько строк. Важный момент — правильно указать DSN (Data Source Name), который генерируется в веб-интерфейсе Sentry для каждого проекта. DSN содержит URL сервера и ключ доступа, без него Sentry не будет получать события.
Мы добавили Sentry в middleware для Express:
app.use(Sentry.Handlers.requestHandler());app.use(Sentry.Handlers.errorHandler());
После первого развертывания тестовый exception попал в Sentry за миллисекунды. Интерфейс веб-приложения сразу показал стек вызовов, параметры запроса, переменные окружения — всё то, что нужно для отладки.
Сложности, с которыми мы столкнулись
Проблема первая: недостаточно памяти
На старом сервере с 2 ГБ оперативной памяти контейнеры постоянно перезагружались. Решение было кардинальным — увеличение выделенного объёма памяти. Хотя есть способ оптимизации — отключение неиспользуемых сервисов в docker-compose.yml (например, Symbolicator, если вы не работаете с native код).
Проблема вторая: переполнение диска
Sentry агрессивно собирает данные. За месяц объём логов достиг 45 ГБ. Мы установили ограничение на retention period (срок хранения событий) — 30 дней для обычных ошибок и 7 дней для Debug режима.
Проблема третья: медленный веб-интерфейс
Redis использовался для кэширования, но размер по умолчанию оказался недостаточным. Увеличение параметра maxmemory в конфигурации Redis существенно ускорило работу интерфейса.
Чеклист для успешного развертывания
На основе нашего опыта составили список проверок:
- Убедиться, что Docker и Docker Compose установлены и работают
- Выделить достаточно ресурсов (минимум 4 ГБ RAM)
- Выполнить ./install.sh до запуска контейнеров
- Изменить SENTRY_SECRET_KEY на уникальный
- Настроить SMTP для отправки писем
- Проверить доступность веб-интерфейса на выбранном портте
- Создать проект в Sentry и получить DSN
- Установить SDK в приложение и протестировать отправку события
- Настроить оповещения (email, Slack, Telegram)
- Планировать бэкапы базы данных PostgreSQL
Заключение
Развертывание Sentry self-hosted потребовало времени на изучение и настройку, но обеспечило полный контроль над системой мониторинга. За полгода экономия на облачной версии окупила затраты на выделенный сервер. Главное преимущество — все данные об ошибках остаются у вас, плюс полная свобода в кастомизации.
Если ваша команда отправляет более 10 000 событий в день или работает с конфиденциальными данными, self-hosted Sentry — отличное решение. Вложенное время на настройку окупится в длительной перспективе.
morfix.ru