如何在普罗米修斯中连接两个度量,其中一个度量的标签是包含逗号分隔值的另一个度量标签的一部分?



在查阅完文档和网页后,也许你能帮我解决这个问题。

我在Grafana中使用Prometheus作为数据源。

我们有第一个度量,称为module_status。我使用特定的模块名称对其进行过滤:

module_status{module_name="MODULE1"}

原始的即时结果是:

module_status{dependencies="SERVICE_1,SERVICE_4,SERVICE_5", module_name="MODULE1"} 4

(4是status = OK的实际值)

我们有第二个度量,称为service_status。度量的原始即时结果将是:

service_status{service_name="SERVICE_1"} 4
service_status{service_name="SERVICE_2"} 4
service_status{service_name="SERVICE_3"} 4
service_status{service_name="SERVICE_4"} 4
service_status{service_name="SERVICE_5"} 4

我们只需要显示service_name包含在module_status的标签依赖项中的service_status。

非常感谢您的帮助!

我已经试过了:我基于以下查询创建了一个包含module_name的变量module_name:label_values(module_status, module_name)

然后,我创建了另一个变量module_services,包含基于此查询的模块列表:label_values(module_status{module_name="$module_name"}, dependencies)

它工作得很好,因为它返回一行CSV值,例如SERVICE_1,SERVICE_4,SERVICE_5

但是,我无法在变量…

中为每个值创建一行。

有一个简单的方法。在PromQL中,您可以使用带有theon和group_left操作符的连接。在您的情况下,解决方案是:

service_status * on(service_name) group_left(dependencies) module_status{module_name="MODULE1"}

最新更新