Мониторинг Node.js: инструменты и библиотеки для observability

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Мониторинг приложений JavaScript (Node.js): библиотеки и инструменты

В современной веб-разработке мониторинг Node.js приложений — это не просто опция, а необходимость. Без него невозможно гарантировать стабильность, производительность и быстрое обнаружение ошибок. В этой статье мы подробно разберём ключевые инструменты и библиотеки для построения системы observability (наблюдаемости) в экосистеме Node.js.

Зачем нужен мониторинг Node.js?

Node.js — однопоточная среда с неблокирующим вводом-выводом. Это означает, что одна ошибка или утечка памяти могут парализовать всё приложение. Мониторинг помогает:

  • Отслеживать метрики (CPU, память, количество запросов, время ответа).
  • Обнаруживать аномалии (внезапный рост ошибок, падение производительности).
  • Проводить профилирование (узкие места в коде, утечки памяти).
  • Настраивать алерты (уведомления в Slack, Telegram, email).

Основные библиотеки для мониторинга Node.js

1. Prometheus Client (prom-client)

Это стандартный экспортер метрик для Node.js, совместимый с популярной системой сбора метрик Prometheus. Библиотека позволяет создавать кастомные счётчики, гистограммы и суммарные метрики.

const client = require('prom-client');
const express = require('express');
const app = express();

// Создаём счётчик запросов
const httpRequestsTotal = new client.Counter({
  name: 'http_requests_total',
  help: 'Total number of HTTP requests',
  labelNames: ['method', 'route', 'status']
});

// Middleware для сбора метрик
app.use((req, res, next) => {
  const start = Date.now();
  res.on('finish', () => {
    httpRequestsTotal.inc({
      method: req.method,
      route: req.route?.path || 'unknown',
      status: res.statusCode
    });
  });
  next();
});

// Эндпоинт для Prometheus
app.get('/metrics', async (req, res) => {
  res.set('Content-Type', client.register.contentType);
  res.end(await client.register.metrics());
});

app.listen(3000);

2. OpenTelemetry для Node.js

OpenTelemetry — это современный стандарт для сбора телеметрии (трассировки, метрики, логи). Для Node.js доступен пакет @opentelemetry/sdk-node. Он автоматически инструментирует популярные библиотеки (Express, HTTP, gRPC) и собирает распределённые трассы.

const { NodeSDK } = require('@opentelemetry/sdk-node');
const { ConsoleSpanExporter } = require('@opentelemetry/sdk-trace-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');

const sdk = new NodeSDK({
  traceExporter: new ConsoleSpanExporter(),
  instrumentations: [getNodeAutoInstrumentations()]
});

sdk.start();

// Пример автоматической трассировки Express
const express = require('express');
const app = express();
app.get('/', (req, res) => res.send('Hello'));
app.listen(3000);

3. PM2 — менеджер процессов с мониторингом

PM2 не только управляет запуском Node.js процессов, но и предоставляет встроенный мониторинг. Команда pm2 monit показывает CPU, память и количество перезапусков в реальном времени. Для продвинутого мониторинга используйте pm2-plus или pm2-metrics.

// ecosystem.config.js
module.exports = {
  apps: [{
    name: 'my-app',
    script: 'app.js',
    instances: 2,
    exec_mode: 'cluster',
    env: {
      NODE_ENV: 'production'
    }
  }]
};

4. Clinic.js — профилирование и диагностика

Clinic.js — это набор инструментов для глубокого анализа производительности Node.js. Он включает Doctor (быстрая диагностика), Bubbleprof (асинхронные задержки) и Flame (flamegraph для CPU).

// Установка: npm install -g clinic
// Запуск с профилированием:
clinic doctor -- node app.js

// После остановки приложения (Ctrl+C) откроется HTML-отчёт
// Пример вывода: "CPU usage: 85%, Event loop delay: 120ms"

Дополнительные инструменты

  • Express Status Monitor — веб-интерфейс для отслеживания метрик Express в реальном времени.
  • Node.js Inspector — встроенный отладчик Chrome DevTools для Node.js (node --inspect).
  • Log4js / Winston — структурированное

Рекомендаций