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.
Далее: Все стандартные панели