• Алексей
  • DevOps
  • 2 мин. чтения

Установка Sentry self-hosted: полный гайд на практике

Установка Sentry self-hosted: полный гайд на практике

Зачем нам понадобилась собственная 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 — отличное решение. Вложенное время на настройку окупится в длительной перспективе.

Межтекстовые Отзывы
Посмотреть все комментарии
guest