Monitoring 我怎么能';加入';普罗米修斯查询中的两个度量?

Monitoring 我怎么能';加入';普罗米修斯查询中的两个度量?,monitoring,consul,prometheus,Monitoring,Consul,Prometheus,我正在用我的服务来摄取普罗米修斯的健康和状态。我想在Concur中的服务和节点的状态非常关键时触发警报,然后在路由这些警报时使用从Concur提取的标记 我从中了解到,服务标签可能会作为一个单独的指标导出,但我不确定如何将一个系列与另一个系列连接起来,以便我可以利用健康状态的标签 例如,以下查询: max(consul_health_service_status{status="critical"}) by (service_name, status,node) == 1 可以返回: {nod

我正在用我的服务来摄取普罗米修斯的健康和状态。我想在Concur中的服务和节点的状态非常关键时触发警报,然后在路由这些警报时使用从Concur提取的标记

我从中了解到,服务标签可能会作为一个单独的指标导出,但我不确定如何将一个系列与另一个系列连接起来,以便我可以利用健康状态的标签

例如,以下查询:

max(consul_health_service_status{status="critical"}) by (service_name, status,node) == 1
可以返回:

{node="app-server-02",service_name="app-server",status="critical"} 1
但我也喜欢本系列中的“env”:

consul_service_tags{node="app-server-02",service_name="app-server",env="prod"} 1
要加入节点和服务名称,请将以下内容作为单个系列传递给Alertmanager:

{node="app-server-02",service_name="app-server",status="critical",env="prod"} 1
然后,我可以在我的路由中匹配“env”


有没有办法做到这一点?在我看来,任何操作或函数都没有赋予我这样分组或加入的能力。据我所见,标签已经需要是领事健康服务状态度量的标签。

您可以使用
组左
的参数列表来包括右操作数的额外标签(为了清晰起见,括号和缩进):

这里的重要部分是(服务名称、节点)组左(env)上的操作
+

  • +
    作为联接运算符被“滥用”(因为
    0*领事服务\u标记的值始终为0,所以没有问题)

  • group\u left(env)
    是一个修饰符,它包含右侧的额外标签
    env
    consu\u service\u标签

一个改进是通过这样做(添加一个强制为0的度量):
+对(服务名称、节点)组左(env)(0*领事服务标签)
@EladAmit-是的,完美!谢谢我更改了帖子以反映您的改进。
consul\u service\u标签始终为1,因此,与
*0
+
不同,更简单的方法是通过(service\u name,node)组左(env)上的(service\u name,status,node)==1)执行
(max(consul\u health\u service\u status{critical”})领事服务标签
如果你像几个小时前对我一样难以理解:joy:
(
  max(consul_health_service_status{status="critical"}) 
  by (service_name,status,node) == 1
)
   + on(service_name,node) group_left(env)
(
   0 * consul_service_tags
)