← Блог

Мониторинг 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

  1. Начать бесплатно.
  2. Проект + slug status page.
  3. HTTP → https://your-app.vercel.app/api/health, 200, 5 мин.
  4. Ссылка https://stillonline.tech/ru/s/{slug} в футере.
  5. 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.

Маркетинг или API?

Если платят за API — мониторьте API.

Speed Insights вместо uptime?

Нет, это перформанс, не алерты доступности.

Preview-деплои?

На Free один URL — production. Staging — Pro или отдельный аккаунт.

Тот же паттерн, что у StillOnline?

У нас похожий JSON health с пингом БД; ваш может быть проще — см. /ru/docs/api.