Мониторинг и логи
Продакшен живой: пользователи всё ломают не так, как вы тестировали. Мониторинг даёт сигналы о сбоях, контекст для расследования и спокойствие вместо «может, никто не заметит».
Ошибки: Sentry
npm i @sentry/node
import * as Sentry from "@sentry/node";
Sentry.init({ dsn: process.env.SENTRY_DSN });
// один раз обернули глобальный обработчик
app.use(Sentry.Handlers.errorHandler());
Sentry соберёт стек-трейсы, окружение, версию релиза и пользователя — карточка для разбора готова. Клиентская часть аналогична (@sentry/react).
Логи и живость
- структурированные логи:
console.logзаменяем на JSON-строку с requestId и userId; - логи приложений — в папку + сборщик (logrotate, или сервис типа CloudWatch);
- health-check: эндпоинт
GET /healthотвечает о состоянии БД и процесса; - uptime-монитор долбит /health каждые пару минут и шлёт алерт, если молчит.
// GET /health → 200 {"status":"ok"}
app.get("/health", async (req, res) => {
await db.query("SELECT 1"); // проверка связи с базой
res.json({ status: "ok" });
});
💡
Метрика для начала — одна: процент успешных запросов (apdex). Падает ниже 99% — кто-то уже звонит. Остальное (латентность по страницам, ошибки API) добавляйте постепенно.
ℹ️
Правило инцидента: сначала восстановить, потом разбирать. Алерт привёл вас, вы перезапустили, пользователи счастливы — затем ищите первопричину по логам и Sentry.