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

Ответ

Да, использовал 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.

Ответ 18+ 🔞

Э, слушай, вот это я понимаю — реальная работа, а не просто в мониторинг тыкать пальцем! Сам так же настраивал, блядь, только у меня там ещё и Redis торчал, который память жрал как не в себя.

Моя типичная настройка для Node.js — это вообще отдельная песня:

  1. Сбор метрик: Использовал 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 };
  1. Экспорт метрик в 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 на красивых графиках. Главное — не перегрузить дашборды, а то глаза разбегутся. В общем, инструмент мощный, если руки из правильного места.