菜单
Grafana Cloud Enterprise 开源

火焰图

火焰图让您可以可视化性能分析数据。使用此可视化,性能分析可以表示为火焰图顶部表格或两者兼有。

例如,如果您想了解程序的哪些部分消耗了最多的资源(如 CPU 时间、内存或 I/O 操作),您可以使用火焰图来可视化和分析潜在的性能问题所在。

A flame graph visualization for a system profile with both flame graph and top table mode.

如果您需要,可以使用火焰图可视化来

  • 识别任何性能热点,找到可能需要代码优化的位置。
  • 诊断任何性能下降的根本原因。
  • 分析复杂系统的行为,包括分布式系统或微服务架构。

要了解有关 Grafana Pyroscope 如何可视化火焰图的更多信息,请参阅火焰图:可视化性能数据

配置火焰图可视化

创建仪表盘后,以下视频将向您展示如何配置火焰图可视化

Give it a try using Grafana Play
使用 Grafana Play 尝试一下

借助 Grafana Play,您可以探索并了解其工作原理,从实际示例中学习,以加速您的开发。此功能可在火焰图页面查看。

支持的数据格式

要渲染火焰图,必须使用嵌套集合模型格式化数据帧数据。

嵌套集合模型确保火焰图中的每个项都根据其嵌套级别(整数值)、元数据及其在数据帧中的顺序进行编码。这意味着项的顺序非常重要且必须正确。该顺序是火焰图中各项的深度优先遍历,无需像子项数组那样在数据帧中使用变长值即可重建图表。

必需字段

字段名类型描述
level数字该项的嵌套级别。换句话说,就是该项与火焰图顶部项之间的项数量。
value数字该项的绝对值或累积值。这对应于图中该项的宽度。
label字符串该特定项将显示的标签。
self数字自有值,通常是该项的累积值减去其直接子项累积值的总和。

示例

下表是火焰图可视化所需数据类型及其格式的示例

levelvalueselflabel
016.5 Bil16.5 Ktotal
14.10 Bil4.10 ktest/pkg/agent.(*Target).start.func1
24.10 Bil4.10 Ktest/pkg/agent.(*Target).start.func1
33.67 Bil3.67 Ktest/pkg/distributor.(*Distributor).Push
41.13 Bil1.13 Kcompress/gzip.(*Writer).Write
51.06 Bil1.06 Kcompress/flat.(*compressor).write

火焰图模式

火焰图利用了性能分析数据的分层特性。它将数据浓缩成一种格式,使您可以轻松查看哪些代码路径消耗了最多的系统资源,例如 CPU 时间、分配的对象或测量内存时的空间。火焰图中的每个块表示堆栈中的函数调用,其宽度表示其值。

灰色部分表示值相对较小的一组函数,出于性能原因,它们被折叠在一起。

A flame graph visualization for a system profile with flame graph mode.

您可以将鼠标悬停在特定函数上,查看一个工具提示,显示该函数的附加数据,例如函数的 value、占总 value 的百分比以及包含该函数的样本数量。

A flame graph visualization with a hover tooltip.

您可以单击一个函数以显示一个包含附加操作的下拉菜单

A flame graph visualization with drop-down actions.

聚焦块

当您单击聚焦块时,该块或函数将被设置为火焰图宽度的 100%,并且其所有子函数将以相对于父函数宽度更新的宽度显示。这使得更容易向下钻取火焰图的较小部分。

A flame graph visualization with focus block action selected.

复制函数名称

当您单击复制函数名称时,将复制该块所代表函数的完整名称。

Sandwich 视图

Sandwich 视图允许您显示单击函数的上下文。它在顶部显示该函数的所有调用者,在底部显示所有被调用者。这显示了函数的聚合上下文,因此如果该函数在火焰图中的多个位置存在,所有上下文都会在 Sandwich 视图中显示并聚合。

A flame graph visualization with sandwich view selected.

分组

在菜单的分组部分下,以下选项允许您展开和折叠函数组

  • 展开组 - 展开您单击的分组函数。如果您单击了火焰图中自动分组的函数,此选项将显示。
  • 展开所有组 - 展开火焰图中所有分组函数。当您单击图表时,此选项总是显示。
  • 折叠组 - 折叠您单击的已展开函数。如果您单击了火焰图中手动展开的函数,此选项将显示。
  • 折叠所有组 - 折叠火焰图中所有已展开函数。当您单击图表时,如果存在任何已展开函数,此选项将显示。

状态栏

状态栏显示关于火焰图和当前应用的修改的元数据,例如图表的哪个部分处于聚焦状态或哪个函数在 Sandwich 视图中显示。单击状态栏药丸中的 X 以移除该修改。

A flame graph visualization's status bar.

顶部表格模式

顶部表格以表格格式显示性能分析中的函数。表格有三列:符号(symbols)、自有(self)和总计(total)。表格默认按自有时间排序,但可以通过点击列标题按总时间或符号名称重新排序。如果函数在性能分析中的多个位置出现,每行代表该函数的聚合值。

Table view

每行的最左侧还有操作按钮。第一个按钮用于搜索函数名称,第二个按钮显示该函数的 Sandwich 视图。

工具栏

下表列出了工具栏的功能

选项描述
搜索使用搜索字段查找具有特定名称的函数。火焰图中所有匹配搜索条件的函数将保持有色,而其余函数将显示为灰色。
重置将火焰图从聚焦块或 Sandwich 视图重置回原始状态。重置图标仅在火焰图处于这两种状态之一时显示。
颜色方案选择器在按函数的 value 或其包名进行着色之间切换,以便将来自同一包的函数视觉上关联起来。
分组展开或折叠所有组,以显示函数的所有实例或显示分组的函数。
文本对齐将文本向左或向右对齐,以便在函数名称不适合块时显示更重要的部分。
可视化选择器选择仅显示火焰图、仅显示表格或同时显示两者。

您可以使用搜索字段查找具有特定名称的函数。火焰图中所有匹配搜索条件的函数将保持有色,而其余函数将显示为灰色。

Searching for a function name in a flame graph visualization.

颜色方案选择器

您可以在按函数的 value 或其包名进行着色之间切换,以便将来自同一包的函数视觉上关联起来。

Different color scheme

配置选项

以下部分描述了此可视化在面板编辑器窗格中可用的配置选项。这些选项尽可能按照它们在 Grafana 中的出现顺序排列。

面板选项

在面板编辑器窗格的面板选项部分,设置基本选项,例如面板标题和描述,以及面板链接。要了解更多信息,请参阅配置面板选项

标准选项

面板编辑器窗格中的标准选项允许您更改字段数据在可视化中的显示方式。当您设置标准选项时,更改将应用于所有字段或系列。要更精细地控制字段的显示,请参阅配置字段覆盖

您可以自定义以下标准选项

选项描述
单位此选项允许您选择字段应使用的单位。有关单位选项以及创建自定义单位的更多信息,请参阅单位配置文档
小数位数指定 Grafana 在渲染值中包含的小数位数。

字段覆盖

覆盖允许您自定义特定字段或系列的可视化设置。当您添加覆盖规则时,它会针对特定的字段集,并允许您为该字段的显示方式定义多个选项。

选择以下覆盖选项

选项描述
按名称匹配字段从所有可用字段列表中选择一个字段。
按正则表达式匹配字段名称使用正则表达式指定要覆盖的字段。
按类型匹配字段按类型选择字段,例如字符串、数字或时间。
按查询返回字段选择特定查询返回的所有字段,例如 A、B 或 C。
按值匹配字段选择由您定义的聚合条件返回的所有字段,例如 最小最大计数总计

要了解更多信息,请参阅配置字段覆盖