TL;DR
Sentry w Next.js 15 to nie tylko console.error w chmurze — to jeden dashboard dla błędów klienta, Server Actions, route handlerów i middleware. W produkcji konfigurujesz DSN per środowisko, release tracking powiązany z deployem na DevStudioIT Cloud, alerty Slack przy spike'u 500 i scrubbing PII zanim email z formularza trafi do logów. Bez monitoringu błędów klient widzi „coś poszło nie tak" przy wysyłce leada — Ty dowiadujesz się z maila trzy dni później. Poniżej: pełna konfiguracja @sentry/nextjs, reguły beforeSend i integracja z pipeline CI.
Dla kogo to jest
- Zespołów Next.js z formularzami kontaktowymi i Server Actions — błąd 500 = utracony lead
- Firm B2B na DevStudioIT Cloud bez dedykowanego SRE — Sentry to pierwsza linia obrony
- Developerów wdrażających RODO/GDPR — trzeba wiedzieć, co Sentry zbiera z payloadu formularza
- Projektów z integracją CRM (n8n) — webhook fail musi być widoczny natychmiast
- Każdego, kto ma „działa u mnie na localhost" i brak widoczności po deployu
Fraza (SEO)
sentry nextjs produkcja, monitoring błędów next.js, sentry server actions, scrubbing pii sentry, alerty slack sentry, error tracking app router 2026
Dlaczego console.log nie wystarczy w produkcji
W developmentzie błąd Server Action wyświetla stack trace w terminalu. W produkcji Next.js ukrywa szczegóły przed użytkownikiem — słusznie, ale bez Sentry Ty też ich nie widzisz. Typowe scenariusze:
| Scenariusz | Bez Sentry | Ze Sentry |
|---|---|---|
| Timeout połączenia z PostgreSQL w Branchly | Ciche 500, lead ginie | Alert + stack + query context |
| Błąd walidacji Zod w Server Action | Użytkownik widzi generyczny komunikat | Widzisz dokładne pole i payload (po scrub) |
| Hydration mismatch na stronie /pl | Trudne do reprodukcji | Breadcrumbs + session replay (opcjonalnie) |
| Spike błędów po deploy | Dowiesz się z supportu | Alert w 2 min, rollback decyzja |
Monitoring błędów to część SLA utrzymania — nie luksus dla dużych SaaS.
Instalacja Sentry w Next.js App Router
Oficjalny wizard @sentry/wizard@latest -i nextjs generuje pliki konfiguracyjne. Struktura minimalna:
npx @sentry/wizard@latest -i nextjsKluczowe pliki:
| Plik | Rola |
|---|---|
sentry.client.config.ts |
Błędy w przeglądarce, hydration |
sentry.server.config.ts |
Server Components, route handlers |
sentry.edge.config.ts |
Middleware, edge routes |
instrumentation.ts |
Hook Next.js do inicjalizacji |
W next.config.ts wrapper withSentryConfig uploaduje source maps przy buildzie — tylko w CI, nie lokalnie z kluczem produkcyjnym.
Konfiguracja produkcyjna — DSN, środowiska, sampling
// sentry.server.config.ts
import * as Sentry from '@sentry/nextjs';
Sentry.init({
dsn: process.env.SENTRY_DSN,
environment: process.env.SENTRY_ENVIRONMENT ?? 'production',
release: process.env.SENTRY_RELEASE,
tracesSampleRate: 0.1,
profilesSampleRate: 0.1,
beforeSend(event) {
return scrubPii(event);
},
});| Zmienna env (DevStudioIT Cloud) | Wartość |
|---|---|
SENTRY_DSN |
DSN projektu Sentry |
SENTRY_ENVIRONMENT |
production / staging |
SENTRY_RELEASE |
git sha z CI — np. abc1234 |
SENTRY_AUTH_TOKEN |
Tylko w CI — upload source maps |
Staging na osobnym projekcie Sentry lub tym samym z environment: staging — nie mieszaj błędów testowych z produkcją.
Scrubbing PII — formularze, RODO, beforeSend
Formularz kontaktowy wysyła email, telefon, treść wiadomości. Server Action może logować payload do Sentry przy błędzie walidacji — musisz to oczyścić:
function scrubPii(event: Sentry.Event): Sentry.Event | null {
if (event.request?.data) {
const data = typeof event.request.data === 'string'
? JSON.parse(event.request.data)
: event.request.data;
delete data.email;
delete data.phone;
delete data.message;
event.request.data = JSON.stringify(data);
}
event.user = event.user ? { id: event.user.id } : undefined;
return event;
}Dodatkowo w panelu Sentry: Settings → Security & Privacy → Data Scrubbing — włącz domyślne reguły dla email, credit card, IP (opcjonalnie hashuj IP zamiast usuwać — mniej użyteczne przy debugowaniu geo).
| Dane | W Sentry | Rekomendacja |
|---|---|---|
| Email leada | ❌ nigdy | Scrub w beforeSend |
| User ID (z sesji) | ✅ hash | Identyfikacja bez PII |
| Stack trace | ✅ | Core value |
| Request URL | ✅ | Bez query z tokenami |
| Cookies | ❌ | sendDefaultPii: false |
Alerty — Slack, spike detection, regresje po deploy
W Sentry Alerts → Create Alert:
- New issue — pierwszy wystąpienie nieznanego błędu → Slack
#dev-alerts - Spike — >10 eventów/min tego samego issue → PagerDuty lub SMS on-call
- Regression — issue marked resolved wraca po deploy → link do release w Sentry
Powiąż release z deployem na DevStudioIT Cloud:
# fragment GitHub Actions
- name: Set Sentry release
run: |
export SENTRY_RELEASE="${{ github.sha }}"
npx @sentry/cli releases new "$SENTRY_RELEASE"
npx @sentry/cli releases finalize "$SENTRY_RELEASE"Po deploy widzisz ** który commit wprowadził regresję** — bez zgadywania między pięcioma PR-ami z tego tygodnia.
Server Actions i route handlery — kontekst błędu
Server Action z zapisem do PostgreSQL w Branchly:
'use server';
import * as Sentry from '@sentry/nextjs';
export async function submitContact(formData: FormData) {
return Sentry.withServerActionInstrumentation(
'submitContact',
{ recordResponse: false },
async () => {
const parsed = contactSchema.safeParse(Object.fromEntries(formData));
if (!parsed.success) {
Sentry.captureMessage('Contact validation failed', 'warning');
return { ok: false, errors: parsed.error.flatten() };
}
// zapis do Branchly / webhook n8n
}
);
}recordResponse: false — nie wysyłaj odpowiedzi z danymi osobowymi do Sentry. Dla route handlerów API użyj Sentry.captureException(error, { tags: { route: '/api/webhook' } }).
Performance vs koszt — sampling i limity
Sentry Performance (traces) kosztuje więcej niż sam error tracking. Dla strony firmowej:
| Typ | Sample rate | Uzasadnienie |
|---|---|---|
| Errors | 100% | Każdy błąd 500 się liczy |
| Transactions | 10% | Wystarczy do trendów LCP backend |
| Profiling | 5–10% | Tylko gdy debugujesz wolne Server Actions |
Na staging ustaw tracesSampleRate: 1.0 — pełna widoczność bez kosztu produkcyjnego.
Release health — dashboard po deployu
W Sentry Releases porównuj crash-free sessions między wersjami:
| Metryka | Cel | Akcja przy regresji |
|---|---|---|
| Crash-free rate | > 99,5% | Rollback na DevStudioIT Cloud |
| New issues w 1 h po deploy | 0 critical | Hotfix lub revert |
| P95 transaction duration | ±10% vs poprzedni release | Profiling Server Action |
Powiązanie deploy → release wymaga jednej zmiennej SENTRY_RELEASE=${GITHUB_SHA} w pipeline — bez tego Sentry grupuje błędy w „unknown release" i tracisz sens regression alertów.
FAQ
Czy Sentry zastępuje logi serwera na DevStudioIT Cloud?
Nie — Sentry to błędy i performance traces. Logi stdout (requesty, startup) zostają w panelu hostingu. Używaj obu: Sentry dla exceptionów, logi dla audytu i debugowania infrastruktury.
Session Replay — włączać na stronie z formularzem?
Ostrożnie. Replay nagrywa DOM — może uchwycić wpisywany email zanim formularz wyśle. Wyłącz na /kontakt lub użyj maskAllText: true i blocklist selektorów formularza.
Self-hosted Sentry vs SaaS?
Dla większości klientów DevStudio Sentry SaaS z EU region i scrubbing PII wystarczy. Self-hosted ma sens przy tysiącach eventów/min i dedykowanym DevOps — koszt utrzymania rośnie szybciej niż licencja.
Jak testować integrację przed produkcją?
Route /api/sentry-test za flagą env, wywołany tylko na staging. Albo Sentry.captureException(new Error('Staging test')) w deploy preview. Nigdy nie zostawiaj test endpointu na produkcji bez auth.
Chcesz monitoring błędów w swoim Next.js?
- Skontaktuj się z nami — wdrożymy Sentry, scrubbing PII i alerty pod Twój stack na DevStudioIT Cloud
- Branchly + PostgreSQL — warstwa danych obok hostingu aplikacji
- n8n i formularze CRM — gdy webhook padnie, Sentry to pierwszy sygnał
O autorze
Budujemy szybkie strony WWW, aplikacje web/mobile, chatboty AI i hosting — z naciskiem na SEO i konwersję.
Przydatne linki
Od teorii do produkcji — Branchly, hosting i realizacje.
