Архитектура дашборда¶
Путь данных: от источника до пикселя¶
Вот так выглядит путь данных через Grafana:
┌──────────────────┐
│ Data Source │ ← Prometheus, Loki, PostgreSQL, всё остальное
│ (хранит данные) │
└────────┬─────────┘
│ raw data
▼
┌──────────────────┐
│ Data Source │ ← код, который умеет говорить на языке источника
│ Plugin │ (HTTP API / SQL / gRPC)
└────────┬─────────┘
│ Data Frames
▼
┌──────────────────┐
│ Query Editor │ ← вы пишете PromQL / LogQL / TraceQL / SQL
│ (ваш запрос) │ (или просто кнопки нажимаете)
└────────┬─────────┘
│ Data Frames (поле после обработки источником)
▼
┌──────────────────┐
│ Transformations │ ← опционально: переименовать, объединить,
│ (преобразования) │ отфильтровать, вычислить новое поле
└────────┬─────────┘
│ Data Frames (трансформированные)
▼
┌──────────────────┐
│ Visualization │ ← движок рендеринга отрисовывает SVG / Canvas
│ (панель) │
└──────────────────┘
Разберём по шагам.
Data Source (Источник Данных) — источник, который Grafana не хранит¶
Повторим главное: Grafana не хранит ваши данные. Никогда. Даже в кеше, даже временно. Grafana — это визуализатор. Данные живут в источнике: в PostgreSQL, в Prometheus, в Loki, Tempo, Mimir — где угодно. Grafana их только читает.
Но логический «Source» в настройках Grafana — это URL (или локальный прокси) до конкретного сервера, базы данных, кластера Prometheus. На один тип источника может быть несколько экземпляров: «Prometheus Production», «Prometheus Staging», «PostgreSQL Users DB».
Data Source Plugin (Плагин источника) — переводчик¶
Как Grafana понимает, что ей прислал Prometheus? Через плагин источника данных. Это код (Go-плагин), который выполняет две вещи:
- Устанавливает HTTP/grpc-соединение с реальным API источника.
- Преобразует результат в универсальный формат — Data Frame.
Плагин источника данных отвечает за «перевод» с наречий вашего источника: он переводит PromQL, SQL, LogQL, TraceQL, Jaeger-запросы и т. д. в единый внутренний формат Grafana.
Query (Запрос) — что именно мы хотим увидеть¶
Вы пишете запрос либо вручную в поле для ввода запроса (PromQL, SQL), либо через графический редактор переменных Grafana. Запрос определяет какой именно срез данных нужен: «Покажи utilisation CPU за последний час, фильтруй по label job: "my-app"».
Запрос доставляется через плагин источника на API источника данных, который его выполняет и отдаёт результат обратно плагину.
Data Frame — универсальный ответ источника¶
Вся внутренняя магия вращается вокруг концепции Data Frame. Это похоже на лист Excel: таблица с заголовками колонок (fields) и рядом строк (records).
Каждое поле (field) имеет:
- Имя (name): например, «Time», «CPU», «Instance».
- Тип данных (data type): Number, String, Time, Boolean, Array.
- Значения (values): массив «Cell values» — одно значение на каждый ряд кадра.
Пример Data Frame:
| Time | Value | Instance |
|---|---|---|
| 2026-01-15 12:30:00 | 43 | server-01 |
| 2026-01-15 12:30:15 | 67 | server-01 |
| 2026-01-15 12:30:00 | 21 | server-02 |
| ... | ... | ... |
Сырые данные от Prometheus («metrics») превращаются в Data Frame, где Time и Value — поля типа Number.
Grafana использует только Data Frames. Всё, что вы видите в любом графике, уже было в Data Frame.
Transformations (преобразования) — необязательный шаг¶
Иногда данные приходят не в том виде, в каком их удобно визуализировать на графике. Label instance или job от Prometheus приходит в виде metadata поля в Data Frame; чтобы использовать её как отдельный столбец, нужно оператором Transform выполнить операцию «Extract fields».
Или конвертировать поле из строки в число, или смержить два Data Frame'а в один (Join).
Transformations — это этап, на котором можно модифицировать те самые прилетевшие поля до того, как данные пойдут на рисование графика.
Panel Visualization (Визуализация панели) — собственно картинка¶
Последний этап — рендеринг. Здесь движок Grafana превращает Data Frame'ы в векторную SVG-графику или растровый Canvas (для Scatterplots, State Timeline и проч.).
Тип визуализации задаётся при создании панели: Time Series, Table, Stat, Gauge, Bar Chart (вкладка Panel Edit, параметр «Visualization» в первом блоке).
Как только данные получены, Grafana рисует панель.
Почему это важно — аналогия с почтовой службой¶
Если представить, что Data Source — это отправитель (Склад товаров на Amazon), то Data Source Plugin — служба доставки (DHL / Почта России), которая забирает товар и помещает его в универсальный чемодан (Data Frame). Query — ваш заказ: «Пришли мне три пары кроссовок, размер 45, цвет чёрный». Transformations — обработка на таможне: упаковку переупаковывают, добавляют этикетки. Visualization — момент, когда вы открываете коробку и достаёте покупку, чтобы использовать или показать коллегам.
Как только вы понимаете эту схему, всё остальное в Grafana укладывается в голове легко.
Далее: OSS vs Enterprise vs Cloud