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

Transformations


Трансформации — это как сервис кефира: ваш стейк готов (приготовлен Query), но перед подачей нужно добавить салат, масло, перец — в нужном порядке, чтобы получилось вкусно именно для вас и именно так как вы заказали.


Аналогия: конвейер

Представьте заводской конвейер. Идёт деталь, и на каждом этапе с ней что-то делают: сверлят отверстие, вставляют болт, закручивают гайку. Конвейер — это ваш Query (данные приходят сырьём). А каждый этап — это отдельная трансформация. И вы можете сами собрать конвейер — перетаскивая и меняя местами этапы так, как считаете нужным.

Grafana 13.x поддерживает более 35 типов трансформаций. Все они перечислены на вкладке Transform в панели. Мы разберём самые важные — те, что покрывают 90% потребностей.


Как работают трансформации

Важно: трансформации применяются последовательно. Порядок имеет значение. Первая трансформация получает Data Frame из Query, что-то делает, передаёт дальше. Вторая получает результат первой, и так далее. Смена порядка может радикально изменить результат.


Группа 1: Агрегации и вычисления

Reduce

Сворачивает временной ряд в одно число: среднее, максимум, минимум, сумма, последнее значение.

Пример: у вас 100 точек данных с CPU-нагрузкой, вы хотите узнать среднее за весь период. Reduce → Mean. На выходе — одно число. Дальше это число можно использовать в Stat или Gauge панели.

Reduce может порождать несколько агрегатов одновременно: и среднее, и максимум, и минимум — все три значения в столбцах.

Calculate field

Операция над существующими полями. Бинарные операторы: +, -, *, /. Унарные: $A * 100, $A / $B. Результат — новое поле.

Пример: http_requests_total (запросов всего) и http_errors_total (ошибок всего). Calculate field ($http_errors_total / $http_requests_total) * 100 — процент ошибок.

Add field from calculation

Похоже на Calculate field, но проще: два выпадающих меню — выбор поля и выбор операции (add, subtract, multiply, divide, mod, average, min, max). Или свободная формула.


Группа 2: Фильтрация и сортировка

Filter by value

Оставляет или исключает ряды со значением, удовлетворяющим условию. Например: оставить только ряды, где Root Mean Square (RMS) за период > 0.5, чтобы на графике видны были только реально используемые диски.

Четыре варианта фильтрации: greater than, greater than or equal, less than, less than or equal.

Filter data by values

Тот же самый фильтр, но тоньше: условие не только по значению, но и по метке (label) и по значению (value). Позволяет построить комплексные фильтры типа «исключить серверы, у которых метка env=staging И значение < 10».

Sort by

Сортировка по значению поля: ascending, descending. Например, вы получили много временных рядов, и хотите отсортировать их по максимуму значения — чтобы самые высокие метрики были первыми в легенде и на графике.

Limit

Ограничивает количество рядов до N первых (или последних) после сортировки. Необходимый партнёр сортировки: Sort by + Limit = «покажи топ-5».


Группа 3: Перестройка данных

Organize fields

Переименовывает поля, переупорядочивает их, скрывает ненужные. Простая, но самая часто используемая трансформация в реальной работе.

Сценарий: запрос вернул 12 полей, из которых нужны только 3. Organize fields — скрываем 9 лишних, оставшиеся 3 переставляем и переименовываем.

Rows to fields

Превращает строки в поля (столбцы). Полезно, когда данные пришли в «длинном» формате (long / EAV), а нужна широкая таблица.

Series to rows

Обратное: превращает ряды в строки. Каждый временной ряд становится строкой в табличном представлении.

Labels to fields

Извлекает значения меток в отдельные поля-столбцы. Например, метка instance становится полем instance в каждой строке, и вы можете группировать или фильтровать по ней.

Partition by values

Умная группировка: панель делится на несколько под-панелей, каждая показывает данные для одного значения поля. Работает как переменная но на уровне панели. Выбрали Partition by → env = получаете под-панели: env=production, env=staging, env=development — все на одном дашборде, каждая со своим графиком.

Group by

Группирует данные по указанному полю и применяет агрегат (mean, sum, count, min, max и т.д.) к каждой группе.

Merge

Позволяет объединить несколько наборов данных (Data Frame) в один. Нужно, когда несколько запросов A, B, C возвращают данные в разной структуре, а вы хотите их совместить.

Join by field

SQL-подобное соединение двух таблиц по ключевому полю. Аналог SQL JOIN. Требует общее поле в обоих Data Frame.

Concatenate

Простое «склеивание» двух (или более) Data Frames подряд. Если в первом — 10 рядов, во втором — 8, результат — 18 рядов. Не смешивает данные, просто подставляет снизу.


Группа 4: Преобразование типов и значений

Convert field type

Изменяет тип поля: number → string, string → number, number → boolean, boolean → number, time → string и так далее. Полезно когда источник данных вернул время как строку (как это делает SQL Server datetime), а панель ожидает time.

Prepare time series

Подготавливает данные для визуализации временного ряда если они пришли в неправильном формате. Графики ожидают data frame с time-полем, но не все источники так отдают. Подготовка: мульти-фрейм → uni-фрейм (все ряды в одном фрейме с общим time-полем).

Format string

Форматирует строку с помощью шаблона: например, prefix-${value}-template. Позволяет добавлять префиксы, постфиксы, форматировать числа внутри строкового поля.

Regex

Преобразование через регулярные выражения: ищет паттерн в строковом поле и генерирует новое поле с результатом. Замена: регулярное выражение + replacer (new string).

Rename by regex

Переименование полей через регулярные выражения. Например: всё что начинается на tmp_* — это временные файлы и в визуализации их называем Временные данные.

Round

Округляет числовое поле до N знаков. Работает как Math.round(value * 10^N) / 10^N.


Группа 5: Специфические (продвинутые) трансформации

Grouping to matrix

Превращает табличные данные в матрицу. Нужно для Canvas и Matrix визуализации.

Transpose

Транспонирование: строки становятся столбцами, столбцы — строками. Полезно когда источник данных выдал строки, а нужны колонки для визуализации.

Extract fields

Из текстового поля (логи!) извлекает структурированные поля: JSON внутри лога, key=value пары, логи в формате Apache Combined Log Format, logfmt. Очень мощная трансформация для Loki и Elasticsearch.


Далее: Все стандартные панели