Что такое Grafana и как её используют в DevOps?

Ответ

Grafana — это open-source платформа для визуализации и анализа временных рядов, которая стала стандартом де-факто в DevOps для создания операционных и бизнес-дашбордов. Её основная сила — универсальность (подключение к десяткам источников данных) и гибкость визуализации.

Как я применяю Grafana в работе:

  1. Единый источник истины для мониторинга: Подключаю к одному дашборду данные из разных систем:

    • Infrastructure: Метрики из Prometheus (CPU, memory, disk I/O с Node Exporter).
    • Application: Кастомные метрики приложений (RPS, latency, error rates), также из Prometheus.
    • Logs: Агрегированные логи из Loki или Elasticsearch (например, количество ошибок по сервисам).
    • Business Metrics: Данные из PostgreSQL или Google BigQuery (количество регистраций, транзакций).
  2. Создание дашбордов для разных команд:

    • Для SRE/DevOps: Дашборды с детальным состоянием инфраструктуры, потреблением квот, статусом алертов.
    • Для разработчиков: Дашборды по конкретным сервисам с метриками RED (Rate, Errors, Duration) и SLO.
    • Для бизнеса: Высокоуровневые дашборды с ключевыми бизнес-показателями (KPI).
  3. Настройка алертинга: Использую встроенную систему алертов Grafana для метрик, где Prometheus Alertmanager не подходит (например, для данных из БД). Настраиваю уведомления в Slack, Telegram и PagerDuty.

Пример панели для мониторинга микросервиса (схема PromQL):

-- Rate запросов в секунду
sum(rate(http_requests_total{service="api-gateway", method="POST"}[5m]))

-- 95-й перцентиль задержки
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{service="cart-service"}[5m])) by (le))

-- Error rate (5xx)
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))

Ключевые практики:

  • Дашборды как код: Хранение конфигураций дашбордов в JSON в Git, развертывание через CI/CD или утилиты вроде grafana-cli.
  • Использование переменных (Variables): Создание динамических дашбордов, где можно выбрать environment=prod, service=payment, и все панели автоматически обновятся.
  • Annotation: Добавление на графики отметок о деплоях (из GitLab CI/CD) или инцидентах, чтобы видеть корреляцию между изменениями и метриками.

Ответ 18+ 🔞

Да, Grafana, ёпта! Это ж как тот универсальный пульт управления, на который можно завести всё, что шевелится и пишет цифры. В общем, open-source платформа для картинок и разбора полётов по временным рядам. Стала уже таким де-факто стандартом в DevOps, что без неё как без рук — дашборды и для операционки, и для бизнеса лепишь.

Как я её, блядь, применяю на практике:

  1. Единая точка сбора всей правды по мониторингу. Тыкаю в один дашборд данные ото всюду, и волнение ебать — всё как на ладони:

    • Инфраструктура: Метрики из Prometheus — там CPU, память, дисковый ввод-вывод, которые Node Exporter стряпает.
    • Приложения: Свои, кастомные метрики сервисов — запросы в секунду, задержки, ошибки. Тоже из Prometheus обычно.
    • Логи: Агрегированную писанину из Loki или Elasticsearch. Например, чтобы видеть, не пошла ли у какого сервиса ошибок овердохуища.
    • Бизнес-метрики: Циферки из PostgreSQL или BigQuery — регистрации, платежи, всё такое.
  2. Леплю дашборды на все случаи жизни и для всех зрителей:

    • Для SRE/DevOps-ребят: Тут всё детально — состояние железа и облаков, квоты, алерты. Чтобы видеть, где сейчас горит или вот-вот накроется медным тазом.
    • Для разрабов: Прицельно по их сервисам. Метрики RED (Rate, Errors, Duration) и SLO, чтобы сразу было понятно, где косяк.
    • Для бизнеса: Высокоуровневые картинки с ключевыми показателями (KPI), чтобы большие начальники смотрели и кивали.
  3. Настройка алертинга. Иногда встроенная система алертов в Grafana просто спасает, когда Prometheus Alertmanager не катит — например, для данных прямиком из базы. Настраиваю уведомления куда надо: Slack, Telegram, PagerDuty. Чтобы не проспать, когда всё летит в пизду.

Вот, смотри, пример запросов для панели по микросервису (PromQL):

-- Rate запросов в секунду
sum(rate(http_requests_total{service="api-gateway", method="POST"}[5m]))

-- 95-й перцентиль задержки
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{service="cart-service"}[5m])) by (le))

-- Error rate (5xx)
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))

А теперь, чувак, ключевые практики, без которых никуда:

  • Дашборды как код. Конфиги в JSON, всё в Git, раскатываешь через CI/CD или grafana-cli. Чтобы не было этой мартышлюшки с ручным редактированием.
  • Использование переменных (Variables). Делаешь дашборд динамическим: выбрал environment=prod, service=payment — и все графики мгновенно переключились. Красота, ядрёна вошь!
  • Annotation. Это вообще мощнейшая штука. На графики добавляешь метки о деплоях из GitLab или об инцидентах. Сразу видно, после какого изменения метрика поехала. Прям подозрение ебать чувствуешь — ага, вот после этого коммита латенси поползла вверх!