Ответ
Да, использовал 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.
Ответ 18+ 🔞
Э, слушай, вот это я понимаю — реальная работа, а не просто в мониторинг тыкать пальцем! Сам так же настраивал, блядь, только у меня там ещё и Redis торчал, который память жрал как не в себя.
Моя типичная настройка для Node.js — это вообще отдельная песня:
- Сбор метрик: Использовал
prom-client, конечно. Без него нихуя не соберёшь нормально. Экспорт настроил — и поехали.
// 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: Тут всё просто, как три копейки. Открыл эндпоинт — и пусть Prometheus хавает.
// 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: Следил за памятью, за event loop'ом, который мог встать колом, за сборкой мусора. Без этого — пиши пропало.
- Бизнес-метрики: Считал запросы, смотрел, как долго они идут, ловил ошибки. Если 95-й перцентиль ползёт вверх — это первый звоночек, что пора разбираться.
- Алерты: Настроил уведомления в Slack. Как только память за 80% — сразу сигнал. А то бывало, приложение тихо сдохнет, а ты нихуя не в курсе.
- Интеграция с Loki: Это вообще вещь! Связал логи и метрики. Видишь в графике аномалию — тут же находишь в логах, какой конкретно запрос всё сломал. Красота, блядь!
Пример запроса в Grafana для мониторинга памяти — элементарно:
process_resident_memory_bytes{job="node-app"} / 1024 / 1024
А ещё, ядрёна вошь, Grafana отлично с PostgreSQL дружит. Подключил datasource — и вот тебе все запросы, транзакции, locks на красивых графиках. Главное — не перегрузить дашборды, а то глаза разбегутся. В общем, инструмент мощный, если руки из правильного места.