APM: Application Performance Monitoring
APM — мониторинг производительности приложения в реальном времени: время ответа эндпоинтов, трассировка запросов, ошибки и узкие места в коде.
Зачем нужно
Метрики сервера (CPU, RAM) не показывают, почему конкретный API-запрос занимает 5 секунд. APM даёт трассировку на уровне кода: видно, что 4.5 секунды уходит на медленный SQL-запрос. Это позволяет находить и устранять узкие места до того, как они станут проблемой для пользователей.
Где используется
- Production API: отслеживание latency каждого эндпоинта
- Поиск N+1 запросов к БД
- Трассировка запроса через несколько микросервисов (distributed tracing)
- Алертинг при деградации производительности
Основной контент
Популярные APM-инструменты
| Инструмент | Тип | Особенности |
|---|---|---|
| Datadog APM | SaaS | Полнофункциональный, дорогой |
| New Relic | SaaS | Хорош для Node.js |
| Sentry | SaaS (open-source) | Ошибки + трассировка, есть бесплатный план |
| OpenTelemetry | Open standard | Vendor-neutral, интегрируется в любой бэкенд |
| Jaeger | Open-source | Distributed tracing, self-hosted |
OpenTelemetry для Node.js
npm install @opentelemetry/sdk-node \
@opentelemetry/auto-instrumentations-node \
@opentelemetry/exporter-trace-otlp-http
// tracing.js — подключается ДО всех остальных модулей
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
const sdk = new NodeSDK({
traceExporter: new OTLPTraceExporter({
url: 'http://jaeger:4318/v1/traces',
}),
instrumentations: [getNodeAutoInstrumentations],
});
sdk.start();
# Запуск с трассировкой
node -r ./tracing.js server.js
Sentry для отслеживания ошибок и производительности
npm install @sentry/node @sentry/profiling-node
const Sentry = require('@sentry/node');
const { nodeProfilingIntegration } = require('@sentry/profiling-node');
Sentry.init({
dsn: process.env.SENTRY_DSN,
integrations: [nodeProfilingIntegration],
tracesSampleRate: 0.1, // 10% запросов трассируются
profilesSampleRate: 0.1,
});
// В Express — добавить до всех роутов
app.use(Sentry.Handlers.requestHandler);
app.use(Sentry.Handlers.tracingHandler);
// После роутов
app.use(Sentry.Handlers.errorHandler);
Ключевые метрики APM
- Latency — время ответа эндпоинта (P50, P95, P99)
- Throughput — запросов в секунду (RPS)
- Error rate — доля запросов с ошибками
- Apdex — оценка удовлетворённости (fast/tolerable/frustrated)
Частые ошибки
- Мониторить только CPU/RAM без метрик приложения — не виден реальный user experience
- Трассировать 100% запросов в продакшне — создаёт нагрузку, обычно достаточно 1-10%
- Не настраивать алерты — данные собираются, но никто не смотрит на деградацию
Связанные темы
- _MOC DevOps
- Мониторинг -- Prometheus и Grafana
- Логирование -- ELK stack
- Health Checks -- проверка состояния
- Alerting -- настройка оповещений