使用 promql 获取结果总数或高于阈值的百分比
Posted
技术标签:
【中文标题】使用 promql 获取结果总数或高于阈值的百分比【英文标题】:Get total number of results or percentage above threshold with promql 【发布时间】:2021-12-11 05:01:53 【问题描述】:我正在尝试获取基于阈值的百分比。我的数据如下所示:
"request":
"url": "api/datasources/proxy/1/api/v1/query_range?query=health&start=1635183780&end=1635184080&step=15",
"method": "GET",
"hideFromInspector": false
,
"response":
"status": "success",
"data":
"resultType": "matrix",
"result": [
"metric":
"__name__": "health",
"application": "myapp"
,
"values": [
[
1635183780,
"3"
],
[
1635183795,
"3"
],
[
1635183810,
"3"
],
[
1635183825,
"3"
],
[
1635183840,
"3"
],
[
1635183855,
"3"
],
[
1635183870,
"3"
],
[
1635183885,
"3"
],
[
1635183900,
"3"
],
[
1635183915,
"3"
],
[
1635183930,
"3"
],
[
1635183945,
"3"
],
[
1635183960,
"3"
],
[
1635183975,
"3"
],
[
1635183990,
"3"
],
[
1635184005,
"3"
],
[
1635184020,
"3"
],
[
1635184035,
"3"
],
[
1635184050,
"3"
],
[
1635184065,
"3"
],
[
1635184080,
"3"
]
]
]
我想得到值是 3 时的百分比。所以就像在这种情况下它是 100%,但如果它低于 3,那将降低百分比。
我在 grafana 中使用 promql。我曾尝试做类似count
或count_over_time
的操作,但由于结果显示它是即时向量而不是范围,因此出现错误。我的理解非常有限,所以我不确定如何获得此处表示的值的总数。甚至做类似count(health == 3) / count(health)
【问题讨论】:
我无法重现您的问题。我能够毫无问题地使用 count(metric==3)/count(metric) 。你能澄清一下到底是什么错误吗? @MarceloÁviladeOliveira 随着时间的推移使用时出现错误,但使用计数时,我只得到 1。我想得到结果的数量,在这种情况下为 21。 count(health==3) 将返回 21,但在您的问题中,您曾说过“我想获取值为 3 时的百分比”,并且您在尝试时遇到了错误。 是的,我在使用 count_over_time 时出现错误。计数有效,但我没有得到 21,我只得到 1。我确实想要一个百分比,但我包括了,以防有另一种方法可以获得相同的结果(promql 内置的东西) 【参考方案1】:我终于能够解决这个问题,以防万一有人遇到问题。
在 grafana 中,我不得不将类型更改为即时。这将使用查询调用而不是 query_range 来查询 api。
那么就可以使用count_over_time:count_over_time(health[15m])
我仍然需要在值为 3 的情况下获取此指标,而简单地执行 count_over_time((health == 3)[15m])
是行不通的。它基本上缺少一件事,那就是步骤。所以,我的最终查询最终是:count_over_time((health == 3)[15m:])
,这让我得到了我需要的结果。
【讨论】:
最好在方括号中的冒号后面显式设置step
持续时间,否则如果传递给step
的查询参数超过/api/v1/query_range
,则可能只考虑一部分原始样本原始样本之间的间隔。另一方面,如果查询 arg 中的 step
小于样本之间的间隔,则查询将返回膨胀的结果。最好使用 MetricsQL 中的count_eq_over_time 函数。
@valyala metricsQL 是插件吗?仍在尝试习惯 grafana 及其工作原理。
MetricsQL 是 VictoriaMetrics 的查询语言。它受到 PromQL 的启发,并且大部分都向后兼容 PromQL(docs.victoriametrics.com/MetricsQL.html 中提到了一些例外情况)。这意味着 Grafana 中的 Prometheus 仪表板在从 Prometheus 切换到 VictoriaMetrics 后应该继续工作以上是关于使用 promql 获取结果总数或高于阈值的百分比的主要内容,如果未能解决你的问题,请参考以下文章