Мониторинг SaaS на Vercel — health URL и status page
Vercel упрощает выкладку Next.js, но production всё равно требует health endpoint для интернета и внешнего мониторинга. Ниже — App Router (app/api/health/route.ts), production URL и проверка в StillOnline со status page.
Общие шаги: быстрый старт health URL. Для Railway: гайд Railway.
1. Файл app/api/health/route.ts
При обращении к БД держите роут dynamic, иначе возможен закэшированный «ok».
import { NextResponse } from "next/server";
export const dynamic = "force-dynamic";
export async function GET() {
let db: "ok" | "error" = "ok";
try {
// Опционально: await prisma.$queryRaw`SELECT 1`;
} catch {
db = "error";
}
const healthy = db === "ok";
const status = healthy ? "ok" : "degraded";
return NextResponse.json(
{
status,
service: "my-saas",
db,
timestamp: new Date().toISOString(),
},
{ status: healthy ? 200 : 503 },
);
}
503 при blip БД — честно, но шумно при миграциях. Для liveness верните 200 без пинга БД.
2. Деплой на Vercel
- Репозиторий, production branch, env в панели.
- Хост:
https://your-app.vercel.appили свой домен.
curl -sS https://your-app.vercel.app/api/health
3. Типичные проблемы Vercel
| Проблема | Решение |
|---|---|
middleware режет /api/health | Исключить путь в matcher |
| Edge без драйвера БД | Node runtime или без БД в health |
| Protection на preview | Мониторить только production |
| Редирект www | Указать финальный HTTPS URL |
4. Проверка в StillOnline
- Начать бесплатно.
- Проект + slug status page.
- HTTP →
https://your-app.vercel.app/api/health, 200, 5 мин. - Ссылка
https://stillonline.tech/ru/s/{slug}в футере. - Pro: MCP для автоматизации после смены домена.
Free: 1 URL, история 24 ч. Pro $9/мес: 10 URL, приватные страницы, API/MCP, 90 д — Тарифы.
StillOnline не деплоит на Vercel и не читает логи Vercel — только HTTP GET.
5. Vercel зелёный, продукт «лежит»
- Cold start serverless — редкие таймауты.
- Один регион — один монитор = слепая зона; для критичного — второй инструмент (shortlist).
- Stripe и др. — health отражает ваш SLA; внешние deps — через инциденты на status page.
FAQ
Route Handler или страница?
Для пробы — Route Handler в app/api/health/route.ts.
Speed Insights вместо uptime?
Нет, это перформанс, не алерты доступности.
Preview-деплои?
На Free один URL — production. Staging — Pro или отдельный аккаунт.
Тот же паттерн, что у StillOnline?
У нас похожий JSON health с пингом БД; ваш может быть проще — см. /ru/docs/api.