普罗米修斯直方图的Grafana表达

egg*_*y84 6 histogram grafana prometheus

有人可以帮助我将普罗米修斯直方图可视化为图表和apdex吗?

忽略任何二级标签(暂时),我只是想将它们可视化为Grafana上的直方图(堆积的条形图很好),并且在grafana中显示apdex确实很有用。

Prometheus Web控制台中的存储桶示例

someoperation_duration_seconds_bucket{
    labelOne="some_consistent_label",
    exported_instance="foo",
    exported_job="my_job",
    instance="10.0.0.0:9091",
    job="kubernetes-service-endpoints",
    kubernetes_name="prometheus-push-gateway",
    kubernetes_namespace="monitoring",
    le="+Inf",
    labelTwo="some_label_that_changes1"
}

someoperation_duration_seconds_bucket{
    labelOne="some_consistent_label",
    exported_instance="foo",
    exported_job="my_job",
    instance="10.0.0.0:9091",
    job="kubernetes-service-endpoints",
    kubernetes_name="prometheus-push-gateway",
    kubernetes_namespace="monitoring",
    le="120",
    labelTwo="some_label_that_changes1"
} etc etc
Run Code Online (Sandbox Code Playgroud)

我看过这篇文章,如何使用promdash或grafana可视化直方图,并使图表显示为堆积的条形图,并且该系列的值为“ le”(桶),但是每个桶的Y轴值正好相同的值。

由于操作的性质,度量标准是通过PushGateway收集的。不确定是否有影响。

非常感谢大家

Sas*_*ann 0

相同大小的桶最适合面板类型直方图。三个精心挑选的桶非常适合 apdex 计算。

直方图

选择直方图作为面板类型并使用以下查询:

someoperation_duration_seconds_bucket{
    labelOne="some_consistent_label",
    exported_instance="foo",
    exported_job="my_job",
    instance="10.0.0.0:9091",
    job="kubernetes-service-endpoints",
    kubernetes_name="prometheus-push-gateway",
    kubernetes_namespace="monitoring",
    labelTwo="some_label_that_changes1"
}
Run Code Online (Sandbox Code Playgroud)

请注意,我只是复制了您自己的查询,但省略了标签 le。

我想您对值随时间的变化感兴趣,因此可视化以下查询可能会很有用:

increase(someoperation_duration_seconds_bucket{ ... }[TIME])
Run Code Online (Sandbox Code Playgroud)

时间可以是 10m、1h 或 1d,具体取决于您的要求。

X 轴不会使用与您在应用程序中定义的相同的存储桶大小。您可以将存储桶大小设置为面板选项,但这可能不是您要搜索的内容。

Apdex

如果您知道哪种性能可以被客户接受,您只能计算 apdex。让我们假设 80 到 120 秒是可以容忍的,一切快一点都可以,一切慢一点都是不可接受的。现在假设您仅定义了三个存储桶 b1=[0,80]、b2=[0,120]、b3=[0,+Inf]。apdex计算方式如下:

((count(b1) + (count(b2)-count(b1)) * 0.5)) / count(b3)
Run Code Online (Sandbox Code Playgroud)

您已经给出了计算桶计数的公式:

someoperation_duration_seconds_bucket{
    ...,
    le="BUCKET",
    ...
}
Run Code Online (Sandbox Code Playgroud)

对于我的示例,BUCKET 将为 80 和 120。Bucket +Inf 为您提供总计数。计算随时间的增加可能再次有用:

increase(someoperation_duration_seconds_bucket{
    ...,
    le="BUCKET",
    ...
}[TIME])
Run Code Online (Sandbox Code Playgroud)

这里唯一的问题是,您需要知道应用程序定义的存储桶大小。这些尺寸必须符合客户的容忍性能边界。如果 80 和 120 没有桶边界,我们无法计算上面示例中的 apdex。三个以上的存储桶就可以了,但您至少需要这三个与可容忍的性能边界相匹配的存储桶。

我发现这个答案非常有趣,因为它计算了与某些 SLA 协议相对应的 apdex 阈值,但采用了与我不同的方法。