如何从 PromQL 获取“布尔”指标的标签到 Grafana Vizualization

问题描述 投票:0回答:1

背景

主要问题是使用这些类型的指标:

some_state_metric{name="something", state="active"} = 1
some_state_metric{name="something", state="inactive"} = 0
some_state_metric{name="something", state="failing"} = 0

我不知道它们叫什么,但我将它们称为“布尔指标”或“状态指标”

它们通过使用 1 和 0 作为布尔值来指示状态是否处于活动状态来跟踪超时状态。

它们为何存在?

据我所知,这用于解决 PromQL/Prometheus 没有有效的度量文本/枚举值,只有数字的事实。
实现者有两个选项,就是让值代表一种状态...(如 0=null、1=active、2=inactive、3=failing)

该解决方案的问题在于,它不能很好地转换为任何使用标签作为重要分区指示器的 PromQL 查询。

...或者,按照惯例,将每个状态表示为单独的标签,然后使用布尔值来指示哪个状态处于活动状态。

这也可以用来表示“组合”状态。

野外的例子

  • Unix Node Exporter 的 systemd
    node_systemd_unit_state
  • Kubelet Pod 阶段
    kube_pod_status_phase

无法使用它们'

遗憾的是,普罗米修斯没有原生的方式来以有用的格式表示这些。 请参阅此处

我希望有一个特殊的函数可以处理这种类型的指标:

group(boolean_metric(some_state_metric, "state")) by(name)

产生数据框:

vector<something>(1708277100, "active")
vector<something>(1708277101, "active")
vector<something>(1708277102, "active")
vector<something>(1708277103, "active")
vector<something>(1708277104, "failing")

不要将此数据框表示视为福音,
我知道普罗米修斯是基于向量原理工作的,所以需要有 一个方向(我认为的时间)和一个幅度(我认为的值)然后 用特定标签将它们分组
但我不知道如何传达这些信息,也不知道它的内部是什么样子

它基本上返回标签(状态)的值,其中每个值都等于 1,在实例标签上分区。

但是不,这不存在。

为什么?

我想使用 状态时间线状态历史记录可视化来表示状态。

问题是这两个都无法指定备用

Value
字段。
他们还期望数据帧(时间序列)格式,所以我不能真正使用表格。

它们都期望查询返回一个唯一的离散值来映射到一个状态,因此 1 和 0 实际上不起作用。

实验

我确实尝试过将给定状态乘以偏移量:

some_state_metric{state="active"} * 10
  or
some_state_metric{state="inactive"} * 100
  or
some_state_metric{state="failing"} * 1000

然后您可以映射

10 -> active
100 -> inactive
1000 -> failing

但是我在合并查询时遇到了困难(我认为我做错了)。 这也是“坏”的,因为它涉及多个查询,而实际上,1 个查询就可以。

问题

如何将 Prometheus“状态指标”/“布尔指标”转换为可与 Grafana 状态时间线状态历史记录一起使用的格式?

prometheus grafana transformation metrics promql
1个回答
0
投票

想通了一些事情

使用新的按值分区转换!

实际上非常简单(虽然确实花了我一些时间)

我将使用节点导出器的 systemd 模块中的

node_systemd_unit_state

步骤

查询

第一步是将我们想要的标签分组:

记得将格式设置为“表格”

group(node_systemd_unit_state{} == 1) by(name, state)

转型

第二步是从结果中删除“值”,只保留

Time
name
state
您可以通过按名称过滤字段转换来执行此操作。

您可以使用 GUI 来设置它们,也可以指定正则表达式

/^(?!Value)/
,这应该删除
Value
字段

然后您在 name 字段上使用

按值分区
进行分区

记得设置“作为框架名称”

可视化

现在只需将“值映射”的颜色设置为所需的表示形式即可!

状态时间线(附加)

您可能希望将“最小间隔”设置为

30m
1h
1d
,具体取决于您正在处理的比例。

© www.soinside.com 2019 - 2024. All rights reserved.