Без observability вы узнаёте о проблеме от пользователя в Telegram. Минимум: JSON-логи, 5 golden metrics, алерт на 5xx и latency.

Логи
- Structured JSON: traceId, userId, route, duration
- Не логировать PII и card data
- Centralize: Loki/ELK/CloudWatch
Метрики
- RED: rate, errors, duration per endpoint
- Business: orders/min, payment success rate
- Infra: CPU, memory, PG connections
Алерты
Alert on symptom (error rate), not cause (cpu 80%) alone. Runbooks в Notion.

Чеклист
- Dashboard per service
- On-call rotation documented
- Post-incident review template
Runbook на 1 страницу
Симптом → dashboard → likely cause → mitigation → escalate. Для 5xx spike: проверить deploy time, DB connections, external PSP timeout.
SLO для продукта
Задайте error budget: 99.9% availability = ~43 мин downtime в месяц. Алерт только если сжигаете budget быстрее плана — иначе on-call выгорает от шума.
Минимальный стек для MVP
JSON logs в stdout → Loki или CloudWatch. Prometheus node_exporter + postgres_exporter, Grafana dashboard «API RED». Алерт: error rate >1% 5m OR p95 latency >2s на /api/checkout.
Business metrics в том же Prometheus: `payment_success_total`, `orders_created`. On-call без runbook бесполезен — одна страница на каждый алерт с командами и эскалацией.
TraceId пробрасывайте из Caddy/Nginx в Nest через X-Request-Id — support находит логи пользователя за секунды, а не перебирает grep по времени вручную.
Observability за один день
- Structured JSON logs с traceId
- Dashboard: error rate и p95 latency top-5 routes
- Один алерт на 5xx spike с ссылкой на runbook
- Post-incident: допишите runbook, не только «починили»