Использовал ли вы Grafana для мониторинга?

«Использовал ли вы Grafana для мониторинга?» — вопрос из категории DevOps, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, использовал Grafana в связке с Prometheus для мониторинга Node.js приложений в production-среде.

Моя типичная настройка для Node.js:

  1. Сбор метрик: Использовал prom-client для экспорта метрик приложения в формате Prometheus
// metrics.js
const client = require('prom-client');
const collectDefaultMetrics = client.collectDefaultMetrics;
collectDefaultMetrics({ timeout: 5000 });

// Кастомные метрики
const httpRequestDuration = new client.Histogram({
  name: 'http_request_duration_seconds',
  help: 'Duration of HTTP requests in seconds',
  labelNames: ['method', 'route', 'status_code'],
  buckets: [0.1, 0.5, 1, 2, 5]
});

const activeConnections = new client.Gauge({
  name: 'nodejs_active_connections',
  help: 'Number of active connections'
});

module.exports = { client, httpRequestDuration, activeConnections };
  1. Экспорт метрик в Express:
    
    // server.js
    const express = require('express');
    const { client } = require('./metrics');

const app = express();

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


**Что настраивал в Grafana:**
* **Дашборды для Node.js:** Мониторинг heap memory, event loop lag, GC статистики
* **Бизнес-метрики:** Количество запросов в секунду, 95-й перцентиль времени ответа, error rate
* **Алерты:** Настраивал уведомления в Slack при превышении пороговых значений (например, memory usage > 80%)
* **Интеграция с Loki:** Для корреляции логов и метрик — находил конкретные запросы, которые вызывали проблемы

**Пример запроса в Grafana для мониторинга памяти:**
```promql
process_resident_memory_bytes{job="node-app"} / 1024 / 1024

Также использовал Grafana для визуализации метрик из PostgreSQL через встроенный datasource.