标签: promql

Prometheus 查询和区分大小写

我有一个查询,我试图在一个标签上连接两个指标。K_Status_Value == 5 和 ON(macAddr) state_details{live="True"}

标签 macAddr 出现在两个指标中。标签的值有时以大写 (78:32:5A:29:2F:0D) 有时以小写 (78:72:5d:39:2f:0a) 出现在“K_Status_Value”中,但始终以大写出现'state_details' 的情况。有什么方法可以使查询中的标签 macAddr 值不区分大小写,以便我不会错过案例不匹配的情况?

prometheus promql prometheus-alertmanager

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

Prometheus 查询以获取 kubernetes pod 中的 CPU 和内存使用情况

我需要使用 prometheus 查询获取 kubernetes pod 中的 CPU 和内存使用情况。有人可以帮忙吗?

grafana kubernetes prometheus promql

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

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

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

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

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

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

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

loops function operators prometheus promql

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

如何使用 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万
查看次数

Prometheus 正则表达式匹配不同标签

我想在普罗米修斯中根据所有标签进行过滤。假设我在 prometheus 中的标签是实例、cpu、查询 node_cpu_seconds_total 的模式,我想做一个类似的操作,

input = ".*abc.*"

node_cpu_seconds_total{instance=~".*abc.*" or mode=~".*abc.*" or cpu=~".*abc.*"}
Run Code Online (Sandbox Code Playgroud)

基本上我希望我的正则表达式与所有标签值进行比较。有什么解决方案可以实现这一目标吗?

prometheus promql

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

Prometheus - 如何从范围查询中过滤掉过时的指标?

在我的 Prometheus 实例上,我设置了storage.tsdb.retention.sizeto128GiBstorage.tsdb.retention.timeto 0s,因此 Prometheus 会保留旧数据,直到达到 128 GB 限制。

现在,我有一些时间序列已经很长时间没有更新(即陈旧)。如果我对最近不再存在的过时指标进行范围查询,那么一切都很好。

例如,PromQL 查询:

> metric{label1="foo"}[1d]
Run Code Online (Sandbox Code Playgroud)

返回:

...
metric{label1="foo"}  <value>@<timestamp>  # <== OK, fresh time series
Run Code Online (Sandbox Code Playgroud)

但是,如果我在过时指标仍在更新时进行更远的范围查询,则该过时时间序列将包含在结果中。

例如,查询:

> metric{label1="foo"}[60d]
Run Code Online (Sandbox Code Playgroud)

返回:

...
metric{label1="foo"}               <value>@<timestamp>  # <== OK, newest timestamp right now
...
metric{label1="foo",label2="bar"}  <value>@<timestamp>  # <== !! newest timestamp one month ago!
Run Code Online (Sandbox Code Playgroud)

我不希望结果中包含第二个(陈旧)时间序列,我只希望第一个(新鲜)时间序列的数据达到 60 天前。

有没有办法用 PromQL 来实现这一点,即从范围查询中过滤掉过时的时间序列?

monitoring prometheus promql

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

根据标签值沉默普罗米修斯警报/忽略标签中的警报

太长了;博士

我在普罗米修斯中有一个名为“ignore”的标签,其值为“yes”:

metric_test{label1="label1",ignore="yes"} 1
Run Code Online (Sandbox Code Playgroud)

我想禁用带有此标签的任何指标的警报。我不想手动编辑 500 多个警报。警报不应出现在 prometheus GUI 中。

有没有一个解决方案可以本地执行此操作?


我有各种机器和服务,其指标是通过 kubernetes_exporter 或 node_exporter 等导出器收集的。

我有一个警报“正常运行时间”,当机器出现故障时会触发该警报。

所有机器都有此警报,警报如下:

- alert: Uptime
  expr: up{} == 0
  for: 2m
  labels:
    severity: critical
Run Code Online (Sandbox Code Playgroud)

有些机器我不关心。它们会在计划外的时间持续关闭,并且通常并不重要,因此我想将此类机器从上述警报中排除。

我发现有效的是修改上面的表达式,添加被忽略的机器:

- alert: Uptime
  expr: up{ignore!="yes"} == 0
  for: 2m
  labels:
    severity: critical
Run Code Online (Sandbox Code Playgroud)

假设我有一个我不关心的 kubernetes 命名空间,我可以添加namespace!="test",Prometheus 仍然会收集指标,但不会触发警报。

我发现它也可以通过在 expr 末尾添加来使用AND up{ignore!="yes"},同时保持表达式的其余部分不变。

惊人的!

此处讨论以下方法:禁用对特定主机的警报,同时对所有其他主机发出警报

但这种方法有一个问题,那就是随着添加的忽略规则越多,您必须添加的条件就越多。当然,您可以像上面讨论的那样将事物分组在一起,添加标签,enableAlert="true"以便每台机器都enableAlert="false"被忽略。这可以工作,但仍然需要手动工作,并且还需要为每个警报进行手动配置。

那么,让我们看看其他可能的解决方案:

重新贴标签

正如此处讨论的Prometheus 配置忽略 Kubernetes 中特定命名空间的指标抓取,当存在某个标签的值(例如 kubernetes 命名空间)时,可以删除指标。

请参阅上述讨论中的一个示例:

  relabel_configs:
  # This will ignore …
Run Code Online (Sandbox Code Playgroud)

monitoring prometheus promql

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

来自 Prometheus 指标的 Grafana 表,带有键值标签

metadata在普罗米修斯中有一个如下所示的指标

# HELP metadata Process metadata
# TYPE metadata counter
metadata{hostname="server-a",key="version",value="v1.1.0"} 1
metadata{hostname="server-a",key="feature1",value="true"} 1
metadata{hostname="server-a",key="feature2",value="false"} 1
metadata{hostname="server-b",key="version",value="v1.0.0"} 1
metadata{hostname="server-b",key="feature1",value="false"} 1
Run Code Online (Sandbox Code Playgroud)

其中key标签具有字段名称,value标签具有字符串值。我们不关心指标的值,但它始终是 1。

Grafana 是否可以将其格式化为表格?即像这样

主机名 版本 特征1 特征2
服务器-a v1.1.0 真的 错误的
服务器-b v1.0.0 错误的

如果我对每种可能都有一个单独的查询(使用表格式)key,那么我可以通过两次转换使其看起来像这样:一个Outer join按主机名,然后一个Organize fields删除多余的字段。

但是,我希望无需对每个进行单独的查询key,甚至key在可能的情况下进行硬编码。但尽管我摆弄了所有变换,我还是不知道如何实现。这里还有几个问题询问类似的事情,但没有一个完全符合我的要求:

还有一些不起作用的事情

  • 表格式的单个查询metadata{}有一个键列和一个值列,而不是包含键名称的列
  • 我得到的最接近的是时间序列查询,然后是Label to fields转换,其中有一列 1,其名称为 的值key

那么我想要的东西在 Grafana 中是否可能实现呢?

grafana prometheus promql

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

PromQL:查询警报是否被静音

我已成功消除了当前已关闭节点的警报(并且在我们有时间物理替换它之前会持续一段时间)。

虽然我认为沉默会阻止警报在 Slack 通道中重新出现,但我也想在我们在 Prometheus 之上运行的 Grafana 仪表板上删除它。这是对 grafana 中各个图块的查询。

sum(ALERTS{alertname="NodeDown", alertstate="firing"})
Run Code Online (Sandbox Code Playgroud)

我的问题是是否有一个关键字可以替换“射击”,“不静音”不起作用(“静音”也不起作用;}),它只会向我显示警报未静音的机器。

alert prometheus promql

5
推荐指数
1
解决办法
2030
查看次数

计算 Group By 语句中的值

使用案例:

我有 10 个 Kubernetes 节点(将它们视为虚拟机),它们有 7 到 14 个可分配的 CPU 核心,可由 Kubernetes Pod 请求。因此我想展示一个表格来显示

  1. 可分配的CPU核心
  2. 请求的CPU核心
  3. 请求/可分配 CPU 核心的比率

按节点分组。

问题

为前两个要求创建表很容易。我只是在 Grafana 中创建了一个表并添加了这两个指标:

sum(kube_pod_container_resource_requests_cpu_cores) by (node)
sum(kube_node_status_allocatable_cpu_cores) by (node)
Run Code Online (Sandbox Code Playgroud)

然而我在第三个方面遇到了困难。我尝试了这个查询,但它显然没有返回任何数据:

sum(kube_pod_container_resource_requests_cpu_cores / kube_node_status_allocatable_cpu_cores) by (node)
Run Code Online (Sandbox Code Playgroud)

问题

在我给定的示例中,如何实现 group by 语句中两个不同指标的计算?

grafana prometheus promql

5
推荐指数
1
解决办法
6336
查看次数