Flame graph#
Flame graphs позволяют визуализировать данные профилирования. С помощью этой визуализации профиль может быть представлен в виде графика пламени, верхней таблицы или и того, и другого.
Например, если вы хотите понять, какие части программы потребляют больше всего ресурсов, таких как процессорное время, память или операции ввода-вывода, вы можете использовать flame graph для визуализации и анализа потенциальных проблем с производительностью:

Можно использовать визуализацию flame graph, если вам нужно:
Определить все проблемные точки производительности, чтобы определить, где может потребоваться оптимизация кода.
Выявить основную причину снижения производительности.
Проанализировать поведение сложных систем, включая архитектуры распределенных систем или микросервисов.
Чтобы узнать больше о том, как Grafana Pyroscope визуализирует графики пламени, обратитесь к разделу Flame graphs: Визуализация данных о производительности.
Предусловия#
Пользователь авторизован и имеет права на редактирование дашборда.
Установлен и настроен источник данных, поддерживающий профилировочные данные (например, Grafana Pyroscope).
Данные представлены в формате вложенного набора с обязательными полями:
level,value,label,self.Плагин визуализации «Flame graph» установлен и доступен в редакторе панелей.
Правила эксплуатации#
Используйте Flame graph только для анализа профилировочных данных с корректной иерархией вызовов.
Убедитесь, что данные отформатированы по модели вложенного набора: обязательны поля
level,value,label,self.Не применяйте визуализацию для больших по объему данных без предварительной агрегации — это может привести к снижению производительности.
Используйте режим Sandwich view и Focus block для детального анализа узких участков кода.
Применяйте поиск и группировку для фильтрации шума и выделения значимых функций.
Настройте цветовую схему по пакету, чтобы легче идентифицировать компоненты системы.
Избегайте избыточного использования Field overrides — они могут нарушить стандартное поведение отображения.
Регулярно проверяйте актуальность источника данных и корректность метрик при изменении кодовой базы.
Последовательность выполнения#
Убедитесь, что плагин визуализации «Flame graph» установлен в продукте PVV.
Откройте дашборд визуализации в интерфейсе PVV.
Выберите тип визуализации «Flame graph».
Настройте параметры конфигурации

Поддерживаемые форматы данных#
Чтобы отобразить Flame graph, необходимо отформатировать данные фрейма данных, используя модель вложенного набора.
Модель вложенного набора гарантирует, что каждый элемент flame-графика закодирован в соответствии с уровнем вложенности в виде целого значения, его метаданными и порядком расположения во фрейме данных. Это означает, что порядок элементов важен и должен быть правильным. Упорядочение - это обход элементов в графике flame в глубину, который воссоздает график без использования значений переменной длины во фрейме данных, как в дочернем массиве.
Обязательные поля:
Поле |
Тип |
Описание |
|---|---|---|
level |
число |
Уровень вложенности элемента. Другими словами, сколько элементов находится между этим элементом и верхним элементом диаграммы flame. |
value |
число |
Абсолютное или суммарное значение элемента. Это значение соответствует ширине элемента на графике. |
label |
строка |
Этикетка, которая будет отображаться для конкретного товара. |
self |
число |
Самооценка, которая обычно представляет собой совокупную стоимость элемента за вычетом суммы совокупных значений его непосредственных дочерних элементов. |
В следующей таблице приведен пример типа данных, необходимых для визуализации flame graph, и того, как они должны быть отформатированы:
Уровень |
Значение |
self |
label |
|---|---|---|---|
0 |
16.5 Bil |
16.5 K |
total |
1 |
4.10 Bil |
4.10 k |
test/pkg/agent.(*Target).start.func1 |
2 |
4.10 Bil |
4.10 K |
test/pkg/agent.(*Target).start.func1 |
3 |
3.67 Bil |
3.67 K |
test/pkg/distributor.(*Distributor).Push |
4 |
1.13 Bil |
1.13 K |
compress/gzip.(*Writer).Write |
5 |
1.06 Bil |
1.06 K |
compress/flat.(*compressor).write |
Flame graph mode#
Flame graph использует иерархическую природу профилирования данных. Он объединяет данные в формат, который позволяет легко увидеть, какие пути кода потребляют больше всего системных ресурсов, таких как процессорное время, выделенные объекты или пространство при измерении объема памяти. Каждый блок на графике flame представляет собой вызов функции в стеке, а его ширина - ее значение.
Выделенные серым цветом разделы представляют собой набор функций, которые представляют относительно небольшое значение, и они объединены в один раздел по соображениям производительности.

Можно навести курсор на определенную функцию, чтобы просмотреть всплывающую подсказку, которая показывает вам дополнительные данные об этой функции, такие как значение функции, процент от общего значения и количество выборок с использованием этой функции.

Menu actions#
Можно щелкнуть по функции, чтобы открыть выпадающее меню с дополнительными действиями:

Focus block#
При нажатии кнопки Focus block блоку или функции устанавливается значение, равное 100% ширины диаграммы пламени, и все дочерние функции отображаются с измененной шириной относительно ширины родительской функции. Это упрощает детализацию по меньшим частям диаграммы пламени.

Copy function name#
Когда вы нажимаете кнопку Copy function name, копируется полное название функции, которую представляет блок.
Sandwich view#
Многослойное представление позволяет отобразить контекст выбранной функции. В нем отображаются все вызывающие функции вверху и все вызываемые объекты внизу. Это показывает агрегированный контекст функции, поэтому, если функция существует в нескольких местах на графике flame, все контексты отображаются в виде сэндвича.

Grouping#
В разделе меню Grouping следующие опции позволяют разворачивать и сворачивать группы функций:
Expand group- позволяет развернуть сгруппированную функцию, на которую вы нажали. Отображается, если вы нажмете на функцию, которая была автоматически сгруппирована на диаграмме flame.Expand all groups- Позволяет развернуть все сгруппированные функции на диаграмме flame. Всегда отображается при нажатии на график.Collapse group- сворачивает выбранную вами расширенную функцию. Отображается, если щелкнуть на графике flame функцию, которая была развернута вручную.Collapse all groups- сворачивает все расширенные функции на графике flame. Отображается, если есть какие-либо расширенные функции, когда вы щелкаете по графику.
Status bar#
В строке состояния отображаются метаданные о графике flame и внесенных в данный момент изменениях, например, какая часть графика находится в фокусе или какая функция отображается в режиме «сэндвич-вью». Щелкните крестик в строке состояния, чтобы удалить эти изменения.

Top table mode#
В верхней таблице представлены функции из профиля в табличном формате. Таблица содержит три столбца: символы, «я» и «итог». По умолчанию таблица отсортирована по времени «я», но ее можно изменить по общему времени или названию символа, щелкнув по заголовкам столбцов. Каждая строка представляет агрегированные значения для данной функции, если функция отображается в нескольких местах профиля.

В крайнем левом углу каждой строки также есть кнопки действий. Первая кнопка выполняет поиск по названию функции, в то время как вторая кнопка отображает ее в виде «сэндвича».
Toolbar#
В следующей таблице перечислены функции панели инструментов:
Опция |
Описание |
|---|---|
Используйте поле поиска, чтобы найти функции с определенным названием. Все функции на графике flame, соответствующие поиску, останутся цветными, в то время как остальные функции будут отображены серым цветом. |
|
Reset |
Верните график пламени в исходное состояние в режиме фокусировки «блок» или «сэндвич». Значок сброса отображается только в том случае, если график пламени находится в одном из этих двух состояний. |
Переключайтесь между функциями раскраски по их значению или по названию пакета, чтобы визуально связать функции из одного пакета воедино. |
|
Grouping |
Разверните или сверните все группы, чтобы отобразить все экземпляры функции или сгруппированную функцию. |
Text align |
Выровняйте текст либо по левому, либо по правому краю, чтобы показать более важные части названия функции, если оно не помещается в блок. |
Visualization picker |
Выберите отображение только графика пламени, только таблицы или того и другого одновременно. |
Search#
Можно использовать поле поиска, чтобы найти функции с определенным названием. Все функции на графике flame, соответствующие поиску, останутся цветными, в то время как остальные функции будут выделены серым цветом.

Color schema picker#
Можно переключаться между функциями раскраски по их значению или по названию пакета, чтобы визуально связать функции из одного пакета воедино.

Параметры конфигурации#
В следующем разделе описываются параметры конфигурации, доступные в панели редактора панелей для этой визуализации. Эти параметры, насколько это возможно, упорядочены так, как они отображаются в Grafana.
Panel options#
В разделе Panel options на панели редактора панелей задайте основные параметры, такие как заголовок и описание панели, а также ссылки на панели. Дополнительные сведения смотри в разделе Настройка параметров панели.
Standard options#
Стандартные параметры в панели редактора панелей позволяют изменять способ отображения данных полей в визуализациях. При установке стандартного параметра изменение применяется ко всем полям или рядам. Для более детального управления отображением полей обратитесь к разделу Настройка переопределения полей.
Можно настроить следующие стандартные параметры:
Опция |
Описание |
|---|---|
Unit |
Этот параметр позволяет вам выбрать, какую единицу измерения следует использовать в поле. Для получения дополнительной информации о параметрах единиц измерения, а также о создании пользовательских единиц измерения, обратитесь к документации по конфигурации единиц измерения. |
Decimals |
Укажите количество десятичных знаков, которые Grafana включает в выводимое значение. |
Field overrides#
Переопределения позволяют настраивать параметры визуализации для определенных полей или серий. Когда вы добавляете правило переопределения, оно нацелено на определенный набор полей и позволяет задать несколько вариантов отображения этого поля.
Выберите один из следующих вариантов переопределения:
Опция |
Описание |
|---|---|
Fields with name |
Выберите поле из списка всех доступных полей. |
Field with name matching regex |
Укажите поля для переопределения с помощью регулярного выражения. |
Fields with type |
Выберите поля по типу, например строковые, числовые или временные. |
Fields returned by query |
Выберите все поля, возвращаемые определенным запросом, например A, B или C.7 |
Fields with values |
Выберите все поля, возвращаемые заданным вами условием сокращения, такие как Min, Max, Count, Total. |
Результат#
После настройки и сохранения панели с визуализацией Flame graph выполните следующие шаги для проверки корректности ее работы:
Проверка отображения графика пламени
Убедитесь, что:Данные корректно отображаются в виде графика пламени.
Ширина блоков пропорциональна значению поля
value.Уровень вложенности (
level) соответствует иерархии вызовов — каждый уровень отображается ниже предыдущего.Блоки сгруппированы логически, а серые блоки (сгруппированные функции) отображаются при необходимости.
Проверка отображения таблицы (Top table)
Убедитесь, что:
Таблица отображает все основные функции из профиля.
Столбцы Symbols, Self, Total содержат корректные данные.
Сортировка по столбцам работает при клике на заголовки.
При выборе функции в таблице — она подсвечивается на графике пламени (если включен режим отображения обоих представлений).
Проверка интерактивности и функций взаимодействия
Убедитесь, что:
При наведении на блок отображается всплывающая подсказка с информацией: название функции, значение, процент от общего, количество примеров.
При клике на блок открывается контекстное меню с действиями:
Focus block — масштабирует выбранный блок на 100% ширины.
Copy function name — копирует полное имя функции в буфер обмена.
Sandwich view — переключает отображение на контекст вызовов (вызывающие и вызываемые функции).
Grouping — позволяет разворачивать/сворачивать сгруппированные функции.
После применения Focus block или Sandwich view в строке состояния отображается соответствующее сообщение.
Кнопка Reset возвращает график в исходное состояние.
Проверка работы поиска и фильтрации
Убедитесь, что:
Поле поиска на панели инструментов позволяет находить функции по имени.
Найденные функции остаются цветными, остальные — затемняются (серый цвет).
Поиск поддерживает частичные совпадения и регистронезависимый ввод.
При очистке поля поиска отображение возвращается к полному графику.
Проверка настройки цветовой схемы
Убедитесь, что:
Переключатель Color schema picker позволяет выбирать между раскраской:
По значению (
Value) — цвет зависит от величины метрики.По названию пакета (
Package) — функции из одного пакета окрашиваются одинаково.
Цветовая легенда (если доступна) отображается корректно.
Проверка выравнивания текста
Убедитесь, что:
Опция Text align позволяет выравнивать текст в блоках:
По левому краю — видны начальные части имени функции.
По правому краю — видны конечные части (часто более значимые, например, имя метода).
При изменении выравнивания текст перераспределяется без обрезания.
Проверка режимов отображения (визуализация)
Убедитесь, что:
Переключатель Visualization picker позволяет выбирать:
Только Flame graph.
Только Top table.
Оба представления одновременно.
При смене режима отображение обновляется без потери данных.
Проверка группировки функций
Убедитесь, что:
Серые блоки (сгруппированные функции) отображаются при достижении определенного порога мелких вызовов.
При клике на сгруппированный блок появляется опция Expand group.
Доступны действия:
Expand all groups — разворачивает все сгруппированные блоки.
Collapse group / Collapse all groups — сворачивает раскрытые блоки.
После разворачивания отображаются все детали вызовов.
Проверка работы с данными и производительностью
Убедитесь, что:
При обновлении временного диапазона — данные перезагружаются и график обновляется.
При большом объеме данных график и таблица отображаются без зависаний.
Использование Field overrides и Standard options (например, единицы измерения, количество знаков после запятой) применяется корректно.
Проверка отображения в разных режимах дашборда
Убедитесь, что:
Визуализация корректно отображается в режиме редактирования и в режиме просмотра.
При открытии дашборда на полный экран — элементы масштабируются адекватно.
На разных разрешениях экрана — текст и блоки не накладываются друг на друга.
После выполнения всех проверок сохраните дашборд и убедитесь, что визуализация сохраняет настройки при повторном открытии. При необходимости скорректируйте параметры и повторите проверку.