Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Grafana: создание первых дашбордов
grafana_dashboards

Grafana: создание первых дашбордов

Интерфейс Grafana, панели, визуализации и связка с Prometheus

Grafana: создание первых дашбордов

«Хороший дашборд отвечает на вопросы, которые вы ещё не успели задать»

#Что такое Grafana

Grafana — это платформа для визуализации данных и аналитики.

Prometheus хранит метрики, но не умеет строить красивые графики. Grafana подключается к Prometheus (и другим источникам данных) и превращает числа в информативные дашборды.

Возможности Grafana:

  • Графики, таблицы, heatmap, geomap
  • Алерты (в новых версиях)
  • Переменные для динамической фильтрации
  • Аннотации для маркировки событий (деплои, инциденты)
  • Поддержка множества источников данных (Prometheus, Loki, Elasticsearch, PostgreSQL...)

#Интерфейс Grafana

После входа (http://localhost:3000, admin/admin) вы увидите:

┌─────────────────────────────────────────────────────────────┐
│  Grafana  🏠 Home  📊 Dashboards  ⚙️ Settings      🔔 👤  │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  + New Dashboard  + New Visualization                       │
│                                                              │
│  Recent dashboards:                                         │
│  - Prometheus Stats                                         │
│  - Application Metrics                                      │
│                                                              │
└─────────────────────────────────────────────────────────────┘

#Ключевые разделы

  • Dashboards — список всех дашбордов
  • Settings → Data sources — источники данных (Prometheus, Loki...)
  • Settings → Users — управление пользователями

#Первый дашборд

#Шаг 1: Создание

  1. Нажмите Create → Dashboard
  2. Нажмите Add visualization
  3. Выберите источник данных (Prometheus)

#Шаг 2: Добавление панели

Вы увидите редактор запросов:

┌────────────────────────────────────────────────────────────┐
│ Query                                                      │
├────────────────────────────────────────────────────────────┤
│ A  ▼  prometheus                                           │
│                                                            │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ rate(http_requests_total[5m])                          │ │
│ └────────────────────────────────────────────────────────┘ │
│                                                            │
│ ▶ Run    Legend: {{method}} - {{endpoint}}                │
└────────────────────────────────────────────────────────────┘

Поля:

  • Строка запроса — PromQL выражение
  • Run — выполнить запрос
  • Legend — формат подписи на графике (используйте {{лейбл}})

#Шаг 3: Настройка визуализации

Справа от редактора — панель настроек:

Visualization types:

  • Time series — линейный график (по умолчанию)
  • Stat — одно число (текущее значение)
  • Table — таблица
  • Gauge — спидометр
  • Bar chart — столбчатая диаграмма
  • Heatmap — тепловая карта

Panel settings:

  • Title — заголовок панели
  • Description — описание (появляется при наведении)
  • Unit — единицы измерения (секунды, байты, проценты)

#Шаг 4: Сохранение

Нажмите Save (Ctrl+S), введите название дашборда.


#Типы визуализаций

#Time series

Для чего: временные ряды, тренды, сравнение метрик.

Примеры запросов:

# Запросов в секунду rate(http_requests_total[5m]) # Использование памяти node_memory_Used_bytes / node_memory_MemTotal_bytes * 100 # 95-й перцентиль времени ответа histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))

Настройки:

  • Show points — показывать точки на графике
  • Fill opacity — прозрачность заливки
  • Line width — толщина линии

#Stat

Для чего: одно ключевое значение (KPI).

Примеры запросов:

# Текущее количество ошибок sum(rate(http_requests_total{status=~"5.."}[5m])) # Uptime в процентах avg_over_time(up[5m]) * 100 # Количество инстансов count(up == 1)

Настройки:

  • Show — значение, изменение, оба
  • Color mode — цвет по значению или по изменению
  • Graph mode — мини-график на фоне

#Gauge

Для чего: метрики с пределами (проценты, квоты).

Примеры запросов:

# Использование памяти в процентах node_memory_Used_bytes / node_memory_MemTotal_bytes * 100 # Заполненность диска (node_disk_size_bytes - node_disk_free_bytes) / node_disk_size_bytes * 100

Настройки:

  • Min/Max — пределы шкалы (0-100 для процентов)
  • Thresholds — цветовые пороги (зелёный < 60%, жёлтый < 80%, красный > 80%)

#Table

Для чего: детализированные данные, сравнение по инстансам.

Примеры запросов:

# CPU по инстансам 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) # Топ запросов по эндпоинтам topk(10, sum by (endpoint) (rate(http_requests_total[1h])))

Настройки:

  • Columns — какие колонки показывать
  • Sort — сортировка по колонке

#Heatmap

Для чего: распределение значений во времени (идеально для histogram).

Примеры запросов:

# Распределение времени ответа rate(http_request_duration_seconds_bucket[5m])

Настройки:

  • Data format — time series buckets
  • Color scheme — цветовая схема

#Переменные (Variables)

Переменные позволяют создавать динамические дашборды.

#Создание переменной

  1. Откройте дашборд
  2. Нажмите ⚙️ (Dashboard settings)
  3. Variables → New

#Типы переменных

Query — значения из запроса Prometheus:

Name: instance
Type: Query
Query: label_values(up, instance)
Refresh: On Dashboard Load

Теперь в запросах можно использовать:

rate(http_requests_total{instance="$instance"}[5m])

Custom — фиксированный список:

Name: environment
Type: Custom
Values: production, staging, development

All — специальный вариант для выбора всех значений.

#Использование в запросах

# Одна переменная rate(http_requests_total{instance="$instance"}[5m]) # Несколько значений (через запятую) rate(http_requests_total{instance=~"$instance"}[5m]) # Переменная в legend Legend: {{instance}} - $instance

#Алерты в Grafana

Grafana 8+ поддерживает алерты (Unified Alerting).

#Создание алерта

  1. Откройте панель
  2. Нажмите Alert → Create alert rule
  3. Настройте правило

#Компоненты алерта

Condition:

WHEN last() OF query A, 5m, IS ABOVE 80

Означает: если последнее значение за 5 минут выше 80.

Evaluation:

  • Evaluate every — как часто проверять (15s, 1m)
  • Evaluate for — как долго условие должно выполняться (5m)

Notifications:

  • Email
  • Slack
  • PagerDuty
  • Webhook

#Пример: алерт на высокий CPU

# Запрос 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) # Condition WHEN last() OF query A, 5m, IS ABOVE 80 # Evaluate Every: 1m For: 5m # Annotations Summary: High CPU on {{ $labels.instance }} Description: CPU usage is {{ $value }}% on {{ $labels.instance }}

#Готовые дашборды

Grafana имеет каталог готовых дашбордов: https://grafana.com/grafana/dashboards/

#Импорт дашборда

  1. Dashboards → Import
  2. Введите ID дашборда или загрузите JSON
  3. Выберите источник данных
  4. Нажмите Import

#Популярные дашборды для Prometheus

IDНазваниеОписание
3662Prometheus StatsМетрики самого Prometheus
8919Node Exporter FullПолный мониторинг сервера
10798cAdvisorМетрики Docker контейнеров
11666Application DashboardШаблон для приложений

#Best practices дашбордов

#1. Начинайте с вопросов

Каждый дашборд должен отвечать на вопросы:

Инфраструктура:

  • Хватает ли ресурсов?
  • Есть ли узкие места?

Приложение:

  • Сколько запросов обрабатывается?
  • Как быстро отвечают?
  • Сколько ошибок?

Бизнес:

  • Сколько активных пользователей?
  • Сколько заказов/транзакций?

#2. Группируйте по смыслу

┌─────────────────────────────────────────────────────────┐
│  Application Dashboard                                  │
├─────────────────────────────────────────────────────────┤
│  Overview (Stat)                                        │
│  - Requests/s, Errors, Latency p95, Uptime              │
├─────────────────────────────────────────────────────────┤
│  Traffic (Time series)                                  │
│  - Requests by endpoint                                 │
│  - Requests by method                                   │
├─────────────────────────────────────────────────────────┤
│  Performance (Time series)                              │
│  - Latency p50, p95, p99                                │
│  - Request duration heatmap                             │
├─────────────────────────────────────────────────────────┤
│  Errors (Time series + Table)                           │
│  - Error rate over time                                 │
│  - Errors by endpoint (table)                           │
└─────────────────────────────────────────────────────────┘

#3. Используйте осмысленные заголовки

# ПЛОХО
Panel Title

# ХОРОШО
HTTP Requests per Second by Endpoint

#4. Добавляйте описания

Description появляется при наведении — используйте для объяснения метрики.

#5. Настраивайте единицы измерения

  • Время: Seconds, Milliseconds
  • Память: Bytes, MB, GB
  • Проценты: Percent (0-100), Percent (0-1)

#6. Используйте пороги (thresholds)

Цветовая индикация помогает быстро понять состояние:

Green:  0-60%   (OK)
Yellow: 60-80%  (Warning)
Red:    80-100% (Critical)

#7. Избегайте перегруженности

  • Не больше 10-15 панелей на дашборд
  • Не больше 5-10 линий на одном графике
  • Используйте переменные для фильтрации

#Отладка дашбордов

#Проблема: график пустой

Причины:

  • Неправильный PromQL запрос
  • Неправильный диапазон времени
  • Нет данных за выбранный период

Решение:

  • Проверьте запрос в Prometheus UI
  • Расширьте диапазон времени
  • Убедитесь, что метрики существуют

#Проблема: медленная загрузка

Причины:

  • Слишком много панелей
  • Сложные запросы
  • Большой диапазон времени

Решение:

  • Уменьшите количество панелей
  • Используйте rate()[5m] вместо rate()[1h]
  • Включите агрегации

#Проблема: непонятные легенды

Решение: используйте форматирование:

# Шаблон легенды
{{instance}} - {{method}} {{endpoint}}

# Результат
server1 - GET /api/users

#Пример: дашборд приложения

Создадим дашборд для Flask приложения из предыдущей темы.

#Панель 1: Requests per Second (Stat)

sum(rate(http_requests_total[5m]))

Visualization: Stat Unit: requests/s Description: Total HTTP requests per second

#Панель 2: Error Rate (Stat)

sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) * 100

Visualization: Stat Unit: Percent Thresholds: 0, 1, 5 (green < 1%, yellow < 5%, red > 5%)

#Панель 3: Latency p95 (Stat)

histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))

Visualization: Stat Unit: Seconds

#Панель 4: Requests by Endpoint (Time series)

sum by (endpoint) (rate(http_requests_total[5m]))

Visualization: Time series Legend: {{endpoint}}

#Панель 5: Requests in Progress (Time series)

sum by (method) (http_requests_in_progress)

Visualization: Time series

#Панель 6: Uptime (Gauge)

avg_over_time(up[5m]) * 100

Visualization: Gauge Min/Max: 0, 100 Thresholds: 99, 99.9

Далее: Алертинг в Prometheus: когда что-то идёт не так