标签: promql

普罗米修斯缺席功能

我想检查某个指标是否在普罗米修斯中不可用 5 分钟。

我正在使用absent(K_KA_GCPP)并给出 5 分钟阈值。但似乎我无法将缺少的功能分组到某些标签(例如站点 ID)上。

如果指标不适用于所有 4 个站点 ID,则缺席有效。我想查明所有 4 个站点 ID 中的 1 个站点 ID 的指标是否不可用或不存在,并且我不想在查询中对站点 ID 标签进行硬编码,它应该是通用的。我有什么办法可以做到这一点吗?

prometheus promql prometheus-alertmanager

8
推荐指数
1
解决办法
2万
查看次数

Prometheus - 通过正则表达式聚合和重新标记

我目前有以下 Promql 查询,它允许我查询每个 K8S pod 使用的内存:

sum(container_memory_working_set_bytes{image!="",name=~"^k8s_.*"}) by (pod_name)

Pod 的名称后跟由 K8S 定义的哈希:

weave-net-kxpxc
weave-net-jjkki
weave-net-asdkk
Run Code Online (Sandbox Code Playgroud)

哪些都属于同一个应用程序: weave-net

我想要的是聚合属于同一个应用程序的所有 pod 的内存。

因此,查询会将所有weave-netPod的内存相加,并将结果放在名为weave. 比如结果是:

{pod_name="weave-net"}            10
Run Code Online (Sandbox Code Playgroud)

代替

{pod_name="weave-net-kxpxc"}       5
{pod_name="weave-net-jjkki"}       3
{pod_name="weave-net-asdkk"}       2
Run Code Online (Sandbox Code Playgroud)

甚至有可能这样做,如果是,如何?

prometheus promql

7
推荐指数
1
解决办法
5551
查看次数

如何根据一个标签值进行聚合,但保留其他标签值?

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

假设我有这些指标:

Metric{label1="1",label2="2"}  0
Metric{label1="1",label2="3"}  1
Metric{label1="2",label2="2"}  10
Metric{label1="2",label2="3"}  100
Run Code Online (Sandbox Code Playgroud)

如果我做

min(Metric)by(label1) 
Run Code Online (Sandbox Code Playgroud)

我得到正确的结果:

{label1="1"} 0
{label1="2"}  10
Run Code Online (Sandbox Code Playgroud)

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

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

我希望聚合的输出是:

Metric{label1="1",label2="2"}  0
Metric{label1="2",label2="2"}  10
Run Code Online (Sandbox Code Playgroud)

prometheus promql

7
推荐指数
1
解决办法
3983
查看次数

如何过滤 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) "...

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

grafana prometheus promql

7
推荐指数
1
解决办法
8614
查看次数

Prometheus 报告 node_memory_Active_bytes 和 free -b 的值不同

我对普罗米修斯很陌生,所以这可能是一个愚蠢的问题 - 但就这样吧。

当我请求 node_memory_Active_bytes 和 node_memory_MemTotal_bytes 时,我得到:

node_memory_Active_bytes{instance="10.1.4.9:9100",job="node-exporter"}  3257815040

(..and..)

node_memory_MemTotal_bytes{instance="10.1.4.9:9100",job="node-exporter"}    16509550592
Run Code Online (Sandbox Code Playgroud)

但是,在盒子上,如果我运行free -b,我会得到以下信息:

$ free -b
              total        used        free      shared  buff/cache   available
Mem:    16509550592  2264915968  6787731456    59121664  7456903168 14140530688
Swap:             0           0           0
Run Code Online (Sandbox Code Playgroud)

我正在努力将普罗米修斯的内存视图与实际机器的视图进行映射。我确信我一定做错了什么,但我不知道是什么。总体匹配,但免费

prometheus promql prometheus-node-exporter

7
推荐指数
2
解决办法
1万
查看次数

PromQL:rate() 函数的用途是什么?

我有一个关于 PromQL 及其查询函数rate() 以及如何正确使用它的问题。在我的应用程序中,我有一个线程正在运行,我使用 Micrometer 的计时器来监视线程的运行时间。使用 Timer 可以为您提供一个带有后缀 _count 的计数器和另一个带有后缀 _sum 所花费的秒数总和的计数器。例如 my_metric_sum 和 my_metric_count。

我的原始数据如下所示(抓取间隔 30 s,范围向量 5m):

在此输入图像描述

现在根据文档,https://prometheus.io/docs/prometheus/latest/querying/functions/#rate 计算范围向量中时间序列的每秒平均增长率(此处为 5m)。

现在我的问题是:我为什么想要那个?我的执行运行时间的相对变化对我来说似乎毫无用处。事实上,仅使用 sum/count 看起来更有用,因为它为我提供了每个时刻的平均绝对持续时间。同时,这就是让我困惑的地方,在我找到的文档中

要根据名为 http_request_duration_seconds 的直方图或摘要计算过去 5 分钟内的平均请求持续时间,请使用以下表达式:

速率(http_request_duration_seconds_sum[5m]) / 速率(http_request_duration_seconds_count[5m])

来源: https: //prometheus.io/docs/practices/histograms/

但据我了解文档,这个表达式似乎会计算请求持续时间的每秒平均增长率,即不是请求平均花费多长时间,而是请求持续时间平均改变了多少最后5分钟。

prometheus promql micrometer

7
推荐指数
1
解决办法
2万
查看次数

根据 Grafana 中的变量值显示或隐藏查询结果

我试图根据仪表板变量值在图形面板上显示/隐藏查询。

\n

动机。

\n

在同一个图形面板(用于显示多个主机)上,我有两个查询:

\n
rate(ClickHouseProfileEvents_Query{instance=~"$instance"}[$__rate_interval])\n
Run Code Online (Sandbox Code Playgroud)\n

和:

\n
max_over_time( (irate(ClickHouseProfileEvents_Query{instance=~"$instance"}[2m]))[$__rate_interval:15s] )\n
Run Code Online (Sandbox Code Playgroud)\n

哪里ClickHouseProfileEvents_Query有柜台。

\n

第一个是通常的汇率,更适合显示趋势,另一个是稍微复杂一点但显示所有选择。当然,我想为图表制作一个面板,但也有一些开关,例如趋势/选择来分析两者。我引入了带有自定义值的 grafana 仪表板变量,但我无法理解如何使用它来隐藏或显示特定查询。

\n

or另外,我尝试使用诸如or 之类的东西进行单个查询,unless但没有成功。

\n

环境:Grafana v7.5.2、Prometheus v2.26.0

\n

更新

\n

感谢Marcelo \xc3\x81vila de Oliveira回答。我当前的解决方案有点不同,但基于他的想法。

\n

首先,我添加Custom带有值的类型变量1null.

\n

在此输入图像描述

\n

其次,我在查询中使用乘法而不是除法。

\n

在此输入图像描述

\n

最后,例如,当我关闭趋势显示时,我也没有在图表和图例中看到它们

\n

在此输入图像描述

\n

grafana prometheus promql grafana-variable

7
推荐指数
2
解决办法
1万
查看次数

从多个指标(相同标签集,不同名称)绘制rate()时如何避免“向量不能包含具有相同标签集的指标”错误

在 Prometheus 中,有时我们需要同时绘制多个指标(例如,具有名称、拟合相同的正则表达式),就像 PromQL 查询一样:

{name=~"camel_proxy.*count"}
Run Code Online (Sandbox Code Playgroud)

它工作正常,相同的标签集线用不同的名称绘制。

当我们想要绘制它们的rate()时,我们面临标题中的错误:

rate({name=~"camel_proxy.*count"}[5m])
Run Code Online (Sandbox Code Playgroud)

因此,这里的方法是使标签集不相同,并将 移动__name__到某个标签,使每个标签集都是唯一的:

rate(label_replace({name=~"camel_proxy.*count"},"name_label","$1","name", "(.+)")[5m])
Run Code Online (Sandbox Code Playgroud)

但我们仍然收到这样的错误

1:90: parse error: ranges only allowed for vector selectors"
Run Code Online (Sandbox Code Playgroud)

如何避免它并正确绘制比率?

grafana prometheus promql

7
推荐指数
2
解决办法
1万
查看次数

PromQL 中的增加和增量有什么区别?

给定一个这样的计数器在给定时间范围内增加,计算和http_requests_total有何区别?delta(http_requests_total[5m])increase(http_requests_total[5m])

据我理解的文档,delta计算时间范围的开始值和结束值之间的差。increase计算rate,然后将其与时间范围相乘。

但实际的区别是什么?这两个值不是总是相同吗?

就像,假设我有以下值,每个值都在下一秒:

t0: 5
t1: 11
t2: 18
t3: 30
Run Code Online (Sandbox Code Playgroud)

那么delta就会是30 - 5 = 25。这rate将是各个增量的平均值,即8.333。如果我将其乘以时间范围3,那么我会25再次得到。那么两者实际上有什么区别呢?

prometheus promql

7
推荐指数
1
解决办法
5340
查看次数

如何使用 PromQL 的 hour() 函数?

我正在尝试在 Prometheus 的alert.rules 文件中设置一个警报,该警报仅在特定时间段内触发。我已经在 expr 标签内测试了下面的代码块,没有时间限制,并且它工作得非常好。
正如PromQL 文档:hour()所述,hour()根据当前 UTC 返回 0 到 23 之间的值。

- alert: test_down 
        expr: absent(container_memory_usage_bytes{name="test_ap"}) and hour() > 5 and hour() < 22
        for: 30s
        labels:
          severity: critical
        annotations:
          summary: "test_ap down"
          description: "test_ap is down for more than 30 seconds."
Run Code Online (Sandbox Code Playgroud)

但在这里,不会触发任何警报通知。有谁知道为什么没有任何东西被解雇以及我该如何解决这个问题?

编辑:我已经解决了。我不明白为什么我必须像我这样做的方式那样做,但以下方法有效:
替换and hour() > 5 and hour() < 22and ON() hour() > 5 < 22

prometheus promql prometheus-alertmanager

6
推荐指数
1
解决办法
1万
查看次数