我该如何使用Promdash或Grafana可视化直方图?

34

我被 Prometheus 中的直方图(和摘要)时间序列吸引,但是我在 Promdash 或 Grafana 中未成功显示直方图。我期望能够展示:

  • 某个时间点上的直方图,例如 X 轴上的桶,Y 轴上的每个桶的计数以及每个桶的一个柱子
  • 堆叠图形式的桶直方图,使得每个桶都有不同的颜色并且总堆叠等于 inf 桶

一个示例度量值可以是 HTTP 服务器的响应时间。


似乎Grafana现在支持直方图,而不需要Prometheus作为数据源?http://docs.grafana.org/features/panels/graph/#x-axis,以及Pankaj答案中的链接。 - David
4个回答

38

Grafana v5+提供直接支持将Prometheus直方图表示为热力图的功能。 http://docs.grafana.org/features/panels/heatmap/#histograms-and-buckets

相比于直方图,热力图更受欢迎,因为直方图无法展示趋势随时间的变化。所以,如果您有一个时间序列的直方图数据,那么请使用热力图面板来呈现。

以下是一个用于Prometheus数据的示例:

假设您有一个如下的直方图:

http_request_duration_seconds_bucket(le=0.2) 1,
http_request_duration_seconds_bucket(le=0.5) 2,
http_request_duration_seconds_bucket(le=1.0) 2,
http_request_duration_seconds_bucket(le=+inf) 5
http_request_duration_seconds_count 5
http_request_duration_seconds_sum 3.07

你可以使用以下查询将此直方图数据呈现为热力图:sum(increase(http_request_duration_seconds_bucket [10m]))按(le),确保将格式设置为“heatmap”,将图例格式设置为{{ le }} ,并在面板设置中将可视化设置为“heatmap”。

enter image description here


应该使用sum(rate())而不是sum(increase())。 - HackToHell
4
@HackToHell:“增加(increase)”和“比率(rate)”函数都是有效的,没有一种比另一种更正确。选择使用哪个函数取决于你想要可视化的“趋势”。 - Pankaj
9
对我而言,图例格式应该只是{{le}},添加s会导致桶排序出现问题。在可视化选项卡中应使用y轴单位选项来解决这个问题。最后,在可视化选项卡中设置数据格式为时间序列桶将排列y轴以匹配桶边界。 - Jendrik
4
注意:查询面板中的“Format as”需要选择“热力图”。截图中展示了该选项,但容易被忽略(否则你将得到累积热力图列,这是相当无用的)。 - ron
4
如果您能将实际查询作为文本放置,以便我们可以复制,那将非常棒。其次,值得一提的是如何实际显示直方图。 - Pithikos
@Pithikos 我已经编辑了答案,将查询类型和必须更改的面板设置都打出来了。 - wickedchicken

10
@brian-brazil上面的回答基本有效,但还需要一些额外的事情来完成。

您可以制作标准的非堆叠图形和柱状图的比率,由于Prometheus直方图是累积的,因此您将获得所需的结果。

  1. Grafana中的x轴需要处于系列模式
  2. 如果您在系列中使用其他不同的标签,则需要按le标签聚合结果

之后,您将获得一个漂亮的直方图。唯一让我感到不爽的是Grafana的x轴排序顺序是自然字符串排序。因此,x轴从+Inf开始,然后是0.1、0.2、..1、1.5、10、2,...

PS:在grafana 5.1中,将有支持Prometheus的热力图。有一个问题适用于直方图随时间变化而显示趋势/历史记录的原生支持热图可视化。


2
我遇到了这个问题(即x轴排序),它真的很糟糕。这是一个非常小的问题,使得Grafana基本上无法用于分析直方图。 - KJ Tsanaktsidis
你可以通过在小数字左侧填充零来解决排序问题。 - Matthew Jones
2
您提到了通过标签聚合结果-这是在Grafana查询中完成的吗?我问的原因是,我已经成功地将它堆叠起来了,但每个桶对于Y轴都显示相同的值,所以要么我们很擅长传播赌注,要么我做错了什么。 - eggsy84
2
@eggsy84,你能解释一下你的实现是什么样子的吗?你是否使用Prometheus作为数据源? - harpratap

7

Grafana最近的版本有一个内置的热力图可视化类型,但是要谨慎使用,因为它可以非常消耗计算资源。

通过选择Graph可视化,然后在Axes下选择X-Axis>Mode中的Histogram可以实现直方图。

这里是Grafana 7.03的示例。 数据由ceph_exporter收集到Prometheus中。指标为ceph_osd_utilization。查询使用了一个模板变量,但与此问题无关。

直方图面板示例的屏幕截图


Jeremy,你是如何将图片移动到行内的?我一开始也想这么做,但不知道怎么实现。 - anthonyeleven

1
我不相信Grafana支持直方图的条形图。
您可以绘制一个标准的非堆叠图表,显示直方图的速率。由于Prometheus直方图是累积的,因此您将获得所需的结果。

1
你关于非堆叠图表的观点是正确的,但我只看到了线条,因此在视觉上并不是很吸引人,而且它们经常彼此重叠,使得很难确定事物实际落入哪个区间。 - TvE
有关添加热图的讨论,但我认为目前还没有相应的代码。 - brian-brazil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接