Monitoring and Observability

1. Setting Up Application Monitoring

ToolDetail
Datadog APMAuto-instrumentation
New RelicNode agent
Grafana CloudProm + Tempo + Loki

2. Implementing Health Checks

app.get("/health/db", async (_, res) => {
  try { await prisma.$queryRaw`SELECT 1`; res.json({ ok: true }); }
  catch { res.status(503).json({ ok: false }); }
});
ProbeDetail
LivenessProcess responsive
ReadinessDB reachable
Cadence5-30s in k8s

3. Tracking Query Metrics

const prom = await prisma.$metrics.prometheus();
app.get("/metrics", (_, res) => res.type("text/plain").send(prom));
MetricDetail
prisma_client_queries_totalCounter
prisma_client_queries_duration_histogram_msHistogram
prisma_pool_connections_openGauge

4. Using OpenTelemetry

import { PrismaInstrumentation } from "@prisma/instrumentation";
import { registerInstrumentations } from "@opentelemetry/instrumentation";
registerInstrumentations({ instrumentations: [new PrismaInstrumentation()] });
AspectDetail
SpansOne per query + engine work
Attributesdb.system, db.statement, model

5. Implementing Alerting

SignalAlert
Error rate> 1% sustained
p95 latency> SLO threshold
Pool saturation> 80% sustained
Migration failurePage on-call

6. Monitoring Database Performance

MetricDetail
CPU/IORDS Performance Insights / pganalyze
Slow queriespg_stat_statements
Replication lagReplica health

7. Tracking Error Rates

ToolDetail
SentryCapture w/ stack + breadcrumbs
Bugsnag/RollbarAlternatives
TaggingAdd prisma.code tag

8. Implementing Distributed Tracing

BackendDetail
JaegerOSS
TempoGrafana stack
HoneycombWide-event SaaS

9. Using Performance Dashboards

PanelDetail
QPSCounter rate
Latency histogramp50/p95/p99
Pool gaugesopen / idle / waiting
Error breakdownBy Prisma code

10. Implementing Audit Trails

Combine extension-based audit logging (50.8) with append-only storage, signed events, and correlation IDs from OpenTelemetry to produce a complete, tamper-evident trail across services. Forward audit events to a separate sink (e.g., S3 with Object Lock or a dedicated audit DB) for compliance retention.

ElementDetail
WhoActor user ID / API key
WhatModel + operation + diff
WhenServer timestamp (UTC)
WhereTrace ID, request ID
RetentionPer compliance (e.g., 7 years)