直方图和热力图简介
直方图是数值数据分布的一种图形表示。它将值分组到桶(有时也称为 bin)中,然后计算每个桶中包含的值数量。
直方图不绘制实际值,而是绘制桶。每个条代表一个桶,条的高度代表落入该桶区间内的值的频率(例如计数)。
直方图示例
此直方图显示了几个时间序列的值分布。您可以轻松看到大多数值落在 240-300 之间,峰值在 260-280 之间。
这是一个显示人口身高分布的示例。

有关直方图可视化选项的更多信息,请参阅直方图。
直方图只查看特定时间范围内的值分布。直方图的问题在于您无法看到随时间推移的分布趋势或变化。这就是热力图的用武之地。
热力图
热力图类似于直方图,但它是随时间变化的,每个时间片代表其自身的直方图。它不使用条高来表示频率,而是使用单元格,并根据桶中值的数量为单元格着色。
在此示例中,您可以清楚地看到哪些值更常见以及它们随时间推移的趋势。
有关热力图可视化选项的更多信息,请参阅热力图。
预分桶数据
有许多数据源支持随时间变化的直方图,例如 Elasticsearch(通过使用 Histogram 桶聚合)或 Prometheus(使用 histogram 指标类型并将格式化为选项设置为 Heatmap)。但通常来说,只要满足以下要求,任何数据源都可以使用:它要么返回系列名称代表桶边界的系列,要么返回按边界升序排序的系列。
原始数据 vs 聚合数据
如果您对常规时间序列数据(未预分桶)使用热力图,那么重要的是要记住您的数据通常已经由您的时间序列后端聚合。大多数时间序列查询不返回原始样本数据,而是包含按时间间隔分组或 maxDataPoints 限制以及聚合函数(通常是平均值)。
这当然都取决于您的查询时间范围。但重要的一点是要知道 Grafana 执行的直方图分桶可能是在已经聚合和平均的数据上完成的。要获得更精确的热力图,最好在指标采集期间进行分桶,或将数据存储在 Elasticsearch 或任何其他支持对原始数据进行直方图分桶的数据源中。
如果您在查询中移除或降低按时间分组(或提高 maxDataPoints)以返回更多数据点,您的热力图将更精确,但这也会对您的浏览器造成很大的 CPU 和内存负担,如果数据点数量变得过大,可能会导致挂起或崩溃。