1. Что такое Sentry и зачем он нужен
Представьте: ваше приложение упало в 3 часа ночи. Первый, кто об этом узнал, — пользователь, который написал в поддержку. Вы увидели письмо утром. Sentry решает эту проблему: каждое необработанное исключение в вашем коде автоматически летит в Sentry, вы получаете уведомление в Telegram или на почту, а в интерфейсе видите полный стектрейс, переменные окружения и даже действия пользователя перед ошибкой.
🐞 Трекинг ошибок
Перехватывает все необработанные исключения с полным стектрейсом, контекстом запроса и переменными.
⚡ Реальное время
Ошибки появляются в интерфейсе через секунды после возникновения. Kafka обеспечивает приём без потерь под нагрузкой.
🔔 Уведомления
Email, Telegram, Slack, PagerDuty — настраиваемые алерты при первом появлении ошибки или превышении порога.
📊 Производительность
Performance Monitoring: трассировка запросов, медленные SQL-запросы, N+1 проблемы, время ответа API.
🌍 100+ платформ
Python, JavaScript, Go, PHP, Ruby, Java, .NET, React, Next.js, Django, FastAPI — единый SDK на все.
🎯 Source Maps
Для JS: загружаете source maps — в стектрейсе видите оригинальный TypeScript-код, а не минифицированный.
👤 Контекст пользователя
Привязка ошибок к конкретному пользователю — видно, сколько людей затронуто каждой проблемой.
🆓 Бесплатно self-hosted
Аналог Business-плана ($26+/мес) без лимитов на события и пользователей. Платите только за VPS.
2. Требования к серверу (читайте внимательно)
Sentry — тяжёлое приложение
Self-hosted Sentry запускает ~20 Docker-контейнеров одновременно: PostgreSQL, Redis, Kafka, Zookeeper, ClickHouse, Nginx и несколько воркеров. Минимум — 16 ГБ RAM. На VPS с 2–4 ГБ RAM Sentry не запустится нормально. Это принципиально важно перед началом.
| Параметр | Минимум | Рекомендуется |
|---|---|---|
| CPU | 4 vCPU | 4–8 vCPU |
| RAM | 16 ГБ + 16 ГБ swap | 32 ГБ |
| Диск | 20 ГБ SSD | 50–100 ГБ NVMe |
| ОС | Ubuntu 20.04 / 22.04 | Ubuntu 22.04 LTS |
| Docker | Engine 19.03.6+ | Engine 26+ |
| Docker Compose | v2.32.2+ | Последняя версия |
Настроить swap (если RAM меньше 32 ГБ)
Если у вас 16 ГБ RAM — добавьте 16 ГБ swap. Sentry требует суммарно 32 ГБ памяти. Swap на NVMe-диске работает достаточно быстро для этой задачи.
fallocate -l 16G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# Сделать постоянным
echo '/swapfile none swap sw 0 0' >> /etc/fstab
# Проверить
free -hАльтернатива для маленьких VPS
Если у вас VPS с 4–8 ГБ RAM — рассмотрите GlitchTip (совместим с Sentry SDK, работает на 1 ГБ RAM) или Bugsink. DSN просто меняется в переменных окружения — менять код приложения не нужно.
3. Установка Sentry на Ubuntu
Шаг 1: установить Docker
# Зависимости
apt update && apt install -y ca-certificates curl gnupg
# GPG-ключ Docker
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
# Репозиторий
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Проверить
docker --version
docker compose versionШаг 2: клонировать репозиторий Sentry
# Определить последнюю версию
VERSION=$(curl -Ls -o /dev/null -w %{url_effective} \
https://github.com/getsentry/self-hosted/releases/latest)
VERSION=${VERSION##*/}
echo "Устанавливаем Sentry $VERSION"
# Клонировать
git clone https://github.com/getsentry/self-hosted.git /opt/sentry
cd /opt/sentry
git checkout $VERSIONШаг 3: запустить установку
Скрипт загрузит Docker-образы, создаст базы данных и создаст суперпользователя. На первый запуск уходит 10–20 минут в зависимости от скорости интернета.
cd /opt/sentry
./install.shЧто делает install.sh
Шаг 4: запустить Sentry
cd /opt/sentry
docker compose up --wait -dПосле запуска Sentry будет доступен на http://127.0.0.1:9000. Откройте в браузере через SSH-туннель или настройте Nginx (следующий шаг).
cat > /etc/systemd/system/sentry.service << 'EOF'
[Unit]
Description=Sentry
After=docker.service
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/sentry
ExecStart=/usr/bin/docker compose up -d --wait
ExecStop=/usr/bin/docker compose down
TimeoutStartSec=300
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable sentry4. Nginx и SSL
Sentry слушает на 127.0.0.1:9000. Настроим Nginx как reverse proxy с Let's Encrypt.
Установить Nginx и Certbot
apt install -y nginx certbot python3-certbot-nginxКонфигурация Nginx
server {
listen 80;
server_name sentry.ваш-домен.ru;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Для больших payload (source maps)
client_max_body_size 100M;
# Таймауты для долгих запросов
proxy_read_timeout 300;
proxy_connect_timeout 300;
}
}ln -s /etc/nginx/sites-available/sentry /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
# Получить SSL-сертификат
certbot --nginx -d sentry.ваш-домен.ruОбновить URL в конфигурации Sentry
Sentry должен знать свой внешний адрес — он используется в ссылках в письмах и DSN.
system.url-prefix: 'https://sentry.ваш-домен.ru'cd /opt/sentry && docker compose restart web worker5. Первый проект и DSN
Откройте https://sentry.ваш-домен.ru и войдите с данными суперпользователя, которые указали при установке.
- 1Перейдите в Projects → Create Project.
- 2Выберите платформу: Python, JavaScript, Next.js, Go, PHP и т.д. (100+ вариантов).
- 3Задайте имя проекта (например, my-backend) и назначьте команду.
- 4Нажмите Create Project. Sentry покажет страницу с инструкциями по интеграции и вашим DSN.
- 5Скопируйте DSN — строку вида
https://abc123@sentry.ваш-домен.ru/2. Она нужна для SDK.
Где найти DSN позже
Если закрыли страницу с DSN: откройте проект → Settings → SDK Setup → Client Keys (DSN). Там же можно создать новые DSN-ключи или отозвать существующие.
6. Интеграция с Python
Sentry Python SDK поддерживает Django, FastAPI, Flask, aiohttp и чистый Python. Одна строка инициализации — и все необработанные исключения автоматически отправляются в Sentry.
Установка SDK
pip install sentry-sdkЧистый Python
import sentry_sdk
sentry_sdk.init(
dsn="https://abc123@sentry.ваш-домен.ru/2",
# Процент запросов для трассировки производительности (1.0 = 100%)
traces_sample_rate=0.1,
# Включить профилирование
profiles_sample_rate=0.1,
# Окружение (помогает фильтровать события в интерфейсе)
environment="production",
# Версия приложения (для отслеживания когда ошибка появилась)
release="my-app@1.0.0",
)
# Тест: это исключение появится в Sentry
# raise ValueError("Тестовая ошибка")Django
pip install sentry-sdk[django]import sentry_sdk
sentry_sdk.init(
dsn="https://abc123@sentry.ваш-домен.ru/2",
integrations=[
sentry_sdk.integrations.django.DjangoIntegration(),
],
traces_sample_rate=0.1,
send_default_pii=True, # Привязывает пользователей к ошибкам
environment="production",
)FastAPI
pip install sentry-sdk[fastapi]import sentry_sdk
from sentry_sdk.integrations.fastapi import FastApiIntegration
from sentry_sdk.integrations.starlette import StarletteIntegration
from fastapi import FastAPI
sentry_sdk.init(
dsn="https://abc123@sentry.ваш-домен.ru/2",
integrations=[
StarletteIntegration(),
FastApiIntegration(),
],
traces_sample_rate=0.1,
environment="production",
)
app = FastAPI()Добавить контекст пользователя
Привязка ошибки к конкретному пользователю помогает понять, скольких людей затронула проблема.
from sentry_sdk import set_user
# Например, в middleware после проверки токена
set_user({"id": user.id, "email": user.email, "username": user.username})7. Интеграция с Next.js / Node.js
Для Next.js есть официальный wizard, который автоматически настраивает конфигурацию: создаёт файлы для client-side, server-side и edge-runtime.
Установка через wizard
npx @sentry/wizard@latest -i nextjsWizard создаст несколько файлов. Главное — указать ваш DSN вместо дефолтного:
import * as Sentry from "@sentry/nextjs";
Sentry.init({
dsn: "https://abc123@sentry.ваш-домен.ru/2",
tracesSampleRate: 0.1,
environment: "production",
// Опционально: Session Replay для видео воспроизведения ошибки
replaysSessionSampleRate: 0,
replaysOnErrorSampleRate: 1.0,
});import * as Sentry from "@sentry/nextjs";
Sentry.init({
dsn: "https://abc123@sentry.ваш-домен.ru/2",
tracesSampleRate: 0.1,
environment: "production",
});import { withSentryConfig } from "@sentry/nextjs";
const nextConfig = {
// ваша конфигурация
};
export default withSentryConfig(nextConfig, {
org: "your-org",
project: "my-nextjs-app",
// Загрузка source maps на Sentry (для читаемых стектрейсов)
sourcemaps: {
disable: false,
},
// Подавить логи при сборке
silent: !process.env.CI,
// Не блокировать билд если Sentry недоступен
errorOnFailedUpload: false,
});Чистый Node.js
npm install @sentry/node// ВАЖНО: инициализация должна быть до import Express и других модулей
const Sentry = require("@sentry/node");
Sentry.init({
dsn: "https://abc123@sentry.ваш-домен.ru/2",
tracesSampleRate: 0.1,
environment: "production",
});
const express = require("express");
const app = express();
// Sentry middleware — первым после создания app
Sentry.setupExpressErrorHandler(app);Source Maps для читаемых стектрейсов
Без source maps стектрейс JS-ошибки выглядит как at t.default (main.abc123.js:1:1234). Загрузите source maps в Sentry — и увидите оригинальный TypeScript-код. Для Next.js wizard настраивает это автоматически через withSentryConfig.
8. Уведомления в Telegram
Sentry поддерживает официальную интеграцию с Telegram через бота. Уведомления приходят при первом появлении новой ошибки, при регрессии или превышении порога.
Подключить Telegram-бота
- 1В интерфейсе Sentry откройте Settings → Integrations → найдите Telegram Alerts Bot.
- 2Нажмите Install. Sentry покажет QR-код или ссылку на Telegram-бота.
- 3Откройте бота в Telegram, нажмите Start. Бот попросит авторизоваться через Sentry — нажмите кнопку в чате.
- 4После авторизации бот будет отправлять уведомления об ошибках в личные сообщения.
- 5Для уведомлений в групповой чат: добавьте бота в группу и используйте команду
/linkдля привязки к проекту.
Настройка правил алертов
В каждом проекте можно тонко настроить, когда и куда отправлять уведомления.
- 1Откройте проект → Alerts → Create Alert.
- 2Выберите тип: Issue Alert (для конкретных ошибок) или Metric Alert (по порогам — например, >100 ошибок за 5 минут).
- 3В условиях выберите: «A new issue is created» (новая ошибка) или «An issue changes state from resolved to unresolved» (регрессия).
- 4В действиях выберите Send a Telegram message и укажите чат.
- 5Нажмите Save Rule.
Популярные условия для алертов
Самый важный — сразу знаете о новых проблемах
Ошибка вернулась после того, как вы её закрыли
Массовая ошибка, затрагивающая многих пользователей
Ошибка влияет на реальных людей — критично