如何查询 Prometheus 中所有具有特定标签值的时间序列?

Posted

技术标签:

【中文标题】如何查询 Prometheus 中所有具有特定标签值的时间序列?【英文标题】:How to query all time series that have certain label value in Prometheus? 【发布时间】:2021-11-12 04:28:44 【问题描述】:

我将指标存储在 Prometheus 中,并且一些指标属于某些事件并具有 event_id 标签。每个事件都是独一无二的,并且只发生一次,因此它会有一些开始时间、结束时间和持续时间。

我需要查询所选指标的值(让我们将它们命名为 metric1metric2)以获取所选的 event_id,而不知道事件何时开始和结束,但知道它发生了。我还需要设置样本的时间步长(或频率)。假设我只需要知道每 10 秒的指标值,而不是记录的每个值。

什么 PromQL 查询可以让我完成这个?

【问题讨论】:

【参考方案1】:

如果您查看this answer,您会发现您面临的问题是相似的。在普罗米修斯你可以使用:

event_id="ID", __name__=~"metric.*" [1d]

也许您可以使用alert manager,并设置规则(找到正确的触发器)以在 eventID 发生时发出警报:

name: Event 
expr: node_load5 > 2 #find the right trigger
for: 2m
labels:
  eventID: eventID #use static or generate from time or sth
  startTime: startTime
  endTime: endTime
  severity: minor
annotations:
  summary: High load

【讨论】:

据我所知,[1d] 表示法表示将获取每个样本的持续时间。但是我怎样才能指定频率,以便不是每个样本都被提取,而是每分钟或每 5 分钟或每 30 分钟等一个样本? 可能使用一些aggregattion-over-time 或aggregation operators 尝试将以下查询发送到/api/v1query:metric[1d:5m] - 它会在最后一天每 5 分钟返回一个样本。

以上是关于如何查询 Prometheus 中所有具有特定标签值的时间序列?的主要内容,如果未能解决你的问题,请参考以下文章

在 Prometheus 查询中选择最大的标签值

启动 zipkin 服务器时出错:Prometheus 要求所有具有相同名称的仪表具有相同的标签键集

如何在 Prometheus 查询中对标签进行分组?

如何在 Prometheus/Grafana 中不指定标签的情况下通过唯一标签计算指标数量?

具有相关字段但标签不同的 promql 示例

如何查找具有特定数据属性的所有标签?