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

«Что такое Grafana и как её используют в DevOps?» — вопрос из категории Мониторинг и логирование, который задают на 24% собеседований 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) или инцидентах, чтобы видеть корреляцию между изменениями и метриками.