问题标签 [promql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1215 浏览

prometheus - 如何基于一个标签值进行聚合,但保留其他标签值?

我想根据一个标签获取指标的最小值,但保留其他标签,以便以后提取它们。

假设我有这些指标:

如果我做

我得到正确的结果:

但我丢失了 label2,我想稍后提取它。

有没有办法按 label1 最小化,同时仍然在结果中保留 label2?

我希望我的聚合的输出是:

0 投票
1 回答
649 浏览

prometheus - 什么是平均不在这里做

我看到一个 PromQL 已针对 linux 系统上的节点导出器运行,如下所示:

我可以很容易地理解以下内容在做什么:

但我没有得到什么

是在做。without(cpu, mode)有什么用

你能帮忙吗?

谢谢

0 投票
1 回答
3426 浏览

filter - prometheus 按day_of_week过滤范围向量

我使用子查询来获取上周的每小时聚合值,例如:上周整个小时的 http 请求数,它将在范围向量中返回 168 个值。

现在我想过滤该值以仅返回特定工作日的值,假设仅返回星期一的 24 值。我发现了一些关于 day_of_week、timestamp、bool expr 的提示,但我无法将它们结合起来使其正常工作,或者这可能是不可能的?就像是:

0 投票
1 回答
4705 浏览

prometheus - 如何查询具有特定值和时间偏移的 Prometheus 向量?

在 Prometheus 中,我想查询过去的即时向量,其值等于 1。我可以用 PromQL 做到这一点,还是需要用记录规则来实现?

直觉上,我尝试了类似的方法:

但它给了我错误:“执行查询时出错:无效参数'查询':在字符 39 处解析错误:偏移量修饰符必须在一个即时或范围选择器之前,但在 *promql.NumberLiteral 之后”

我认为这是一个操作员订单问题,因为之前的部分offset是一个即时向量。所以我加了括号:

但它给出了另一个错误:“执行查询时出错:无效参数'查询':在字符 34 处解析错误:无法解析剩余输入“偏移 30m”...”

所以我问是否有任何方法可以在 30 分钟前获得一个值等于 1 的向量?我必须使用录制规则来实现这一点吗?

0 投票
0 回答
1020 浏览

function - prometheus 循环遍历范围或即时向量的值并应用函数

假设我有一个 promQL 返回一个范围或一个即时向量:范围向量 ->metric[1h]或实例向量 ->increase(metric[1h])

有没有办法将范围转换为即时向量和/或反之亦然?因为许多数学运算/函数只能在即时向量上进行。

如果无法进行转换,有没有办法对范围向量的每个值应用特定的操作或函数?例如(值的平方):

(7 @1554105600, 5 @1554710400, 2 @1555315200, 12 @1555920000)变成

(49 @1554105600, 25 @1554710400, 4 @1555315200, 144 @1555920000)

0 投票
1 回答
3617 浏览

grafana - 大计数器重置后的单一统计

我们使用 Grafana + Prometheus 来监控我们的基础设施,最近我们添加了一些以业务为中心的指标,我一直在使用我们跟踪的一个计数器时遇到问题。这是一个会话时间计数器。基本上,每次会话结束时,我们都会将该计数器增加用户在该会话中花费的时间。因此,如果用户使用该软件花费 2m,则计数器将增加 120000 ms。几天来,这种方法效果很好,但是从昨天开始,当我们在一个实例计数器和其他实例计数器之间存在很大差异时,并且由于部分服务重新启动而重置了那个大计数器,我无法获得有意义的单一统计面板了。

这是所发生情况的图表(此计数器有 3 个标签,导致 >50 个标签组合)

普罗米修斯图

此计数器跟踪的当前所有时间总计为 13.8 年,为期 4 天,但自从计数器重置后,我的单一统计指标在 24 小时内为 -20 年(使用差异)或 35 年(使用范围)。如果您不考虑计数器重置,这并没有错,因为 diff 和 range 将查看 min/max/first/current 值,但它不再是一个有用的指标。

如果我将时间范围设置为不包括计数器重置,则 Diff 和 Range 都显示非常接近预期的值(我们的使用非常线性且可预测)。

单统计面板公式如下所示

如何处理单统计指标的计数器中的重置?

0 投票
1 回答
357 浏览

prometheus - 计算移动时间窗口中连续点之间百分比下降的发生次数

我想在普罗米修斯中根据一个简单的英语会读到类似的规则发出警报

满足此规则的要求是测量以 1 分钟间隔出现的连续数据点的下降,如果任何数据点的下降大于或等于 5%,我们就会发送警报。

我正在使用不同记录规则的组合来实现这一点。我要的算法如下

第二条录音规则怎么写?我已经尝试过clamp_max/min。但我不认为那是我想要的。对我有帮助的是 promQL 中的 if/else 构造。没有时间序列查询方面的经验也无济于事。对此的任何帮助将不胜感激。

0 投票
2 回答
6125 浏览

prometheus - 如何在 PromQL 中获得两个指标中的最小值?

我正在寻找类似于 SQL 的 LEAST() 函数的东西。
由于存在二元运算符(以及定义明确的匹配行为),因此人们会期望也会有 min/max,但找不到这样的函数。

我知道使用正则表达式(即,min(__name__=~"a|b"))可以实现这一点,但如果可能的话,我希望避免这种黑客攻击。

0 投票
1 回答
12069 浏览

grafana - 如何过滤 label_values(label) 的结果以获取与正则表达式匹配的标签列表?

我有几个带有“服务”标签的指标。我想获取以“abc”开头并以“xyz”结尾的所有“服务”级别的列表。这些将是 grafana 模板变量的值。

这是我尝试过的: label_values(service) =~ "abc.*xyz"

但是,这会产生错误Template variables could not be initialized: parse error at char 13: could not parse remaining input "(service_name) "...

关于如何过滤标签值的任何想法?

0 投票
0 回答
328 浏览

prometheus - 如何重新标记 consul sd 配置以获取基于 consul 元数据的服务发现统计信息?

这是领事中许多服务中的两种服务的样子:

这些服务中的每一项都有健康检查。

我的目标是找到所有基于 consul KV 的健康服务。比如,在"USA"中找到所有“通过”的服务,或者在"CANADA"中找到所有“关键”服务。

我尝试了一些选项,我遇到的问题是所有指标都有 config.yaml 中提到的每个重新标签

查询 1

consul_health_service_status{status="passing", instance="USA"}

输出

consul_health_service_status{check="service:1",instance="USA",job="consul",node="machine",service_id="1",service_name="Service X",status="passing"} 1

consul_health_service_status{check="service:2",instance="USA",job="consul",node="machine",service_id="2",service_name="Service Y",status="passing"} 1

查询 2

consul_health_service_status{status="passing", instance="CANADA"}

输出

consul_health_service_status{check="service:1",instance="CANADA",job="consul",node="machine",service_id="1",service_name="Service X",status="passing"} 1

consul_health_service_status{check="service:2",instance="CANADA",job="consul",node="machine",service_id="2",service_name="Service Y",status="passing"} 1

配置

我很想看到这样的输出:

查询 1

consul_health_service_status{status="passing", instance="USA"}

输出

consul_health_service_status{check="service:1",instance="USA",job="consul",node="machine",service_id="1",service_name="Service X",status="passing"} 1

查询 2

consul_health_service_status{status="passing", instance="CANADA"}

输出

consul_health_service_status{check="service:2",instance="CANADA",job="consul",node="machine",service_id="2",service_name="Service Y",status="passing"} 1