Перейти к содержанию

Архитектура дашборда


Путь данных: от источника до пикселя

Вот так выглядит путь данных через 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-плагин), который выполняет две вещи:

  1. Устанавливает HTTP/grpc-соединение с реальным API источника.
  2. Преобразует результат в универсальный формат — 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