Ответ
Да, использовал Grafana в связке с Prometheus для мониторинга Node.js приложений в production-среде.
Моя типичная настройка для Node.js:
- Сбор метрик: Использовал
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 };
- Экспорт метрик в 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.