Prometheus PromQL上两个布尔即时向量的逻辑位与

Prometheus PromQL上两个布尔即时向量的逻辑位与,prometheus,promql,prometheus-blackbox-exporter,Prometheus,Promql,Prometheus Blackbox Exporter,我试图将来自用户PoV的服务的E2E访问可用性定义为在表示单个服务可用性的两个布尔即时向量之间应用逐位AND操作的结果 我正在使用预先安装的blackbox\u导出器从“用户节点”获取ping这两个服务(例如S1和S2)的probe\u success结果: +-------+ +---------------------+ +-------+ |S1 | | | |

我试图将来自用户PoV的服务的E2E访问可用性定义为在表示单个服务可用性的两个布尔即时向量之间应用逐位AND操作的结果

我正在使用预先安装的
blackbox\u导出器
从“用户节点”获取ping这两个服务(例如S1和S2)的
probe\u success
结果:

            +-------+     +---------------------+     +-------+
            |S1     |     |                     |     |     S2|
            |       |     |   User node with    |     |       |
            |       +<----+  blackbox_exporter  +---->+       |
            |       | icmp|                     |icmp6|       |
            +-------+     +---------------------+     +-------+

正如我所读到的,逻辑的
并不是我想要的。在ProMQ中有没有一种简单的方法来执行这种“逐位”操作?

因为
probe\u success{job=“S1”,user=“foo”}
probe\u success{job=“S2”,user=“foo”}
之间的基数不一样,逻辑
运算符将不会产生具有所需效果的向量/标量

没有比这更复杂的方法了。我会用这样的方式:

(scalar(probe_success{job="S1", user="foo"}) + scalar(probe_success{job="S2", user="foo"})) == bool(2)
scalar
将单个元素输入向量转换为标量<如果使用绝对基数,则代码>探测成功
是一个单元素输入向量。例如,如果将同一表达式与
probe_success{user=“foo”}
一起使用,则该表达式将不起作用,因为它将导致多个元素向量

+
运算符显然将两个标量相加


之所以使用
bool()。关于这一点,请看这里。

保留标签的细微变化:

sum(probe_success{job~"S[12]", user="foo"})by(user)== bool(2) 

令人惊叹的;这基本上就是我想做的。然而,由于这将导致标量本身;不是即时向量-我无法应用聚合运算符(如
avg()
)来获得联合服务的平均SLA。t图表视图显示了我试图平均的时间序列-有没有办法将所有这些结果放回一个即时向量?一种方法是使用。有了它,您可以添加任何标签作为规则的一部分,这将产生一个向量。不确定这是否是你想要实现的。这确实是我想要实现的-但是因为
scalar()
probe\u success
中删除了所有原始标签。我需要为每个
用户定义一个录制规则。是吗?是的,是的。。但我相信根据你的具体情况有更好的办法
sum(probe_success{job~"S[12]", user="foo"})by(user)== bool(2)