【问题标题】:Prometheus filtering based on LabelsPrometheus 基于 Labels 的过滤
【发布时间】:2020-05-20 21:17:23
【问题描述】:

如何在 Prometheus 查询中添加标签过滤器?

kube_pod_info

kube_pod_info{created_by_kind="ReplicaSet",created_by_name="alertmanager-6d9f74d4c5",instance="kube-state-metrics:8080",job="kube-state-metrics",namespace="test",pod=" alertmanager-6d9f74d4c5-xlqrv"}

kube_pod_labels

kube_pod_labels{instance="kube-state-metrics:8080",job="kube-state-metrics",label_app="alertmanager",label_pod_template_hash="6d9f74d4c5",namespace="test",pod="alertmanager- 6d9f74d4c5-xlqrv”,label_source="k8s"}

在这里,我在 prometheus 中有 kube_pod_info 和 kube_pod_labels 的 kube 状态指标信息。

kube_pod_info{namespace="test"} ---> 按命名空间测试过滤 pod。

在这里,我也想包含基于标签的过滤器。我在 kube_pod_labels 中有一个名为“label_source=”k8s”的标签。如何加入 kube_pod_info 和 kube_pod_labels 来应用标签过滤器?

【问题讨论】:

    标签: prometheus grafana


    【解决方案1】:

    您可以使用+ 运算符加入指标。在这里,group_left() 将包含额外的标签:label_source 来自正确的度量标准kube_pod_labels。您加入的指标被强制为零(即0 * kube_pod_labels),这样它就不会影响第一个指标的结果。

    (
    kube_pod_info{namespace="test"}
    )
       + on(namespace) group_left(label_source)
    (
       0 * kube_pod_labels
    )
    

    【讨论】:

    • 执行查询时出错:在操作的右侧找到匹配组 {namespace="test1"} 的重复系列:... ..... 多对多匹配不允许:匹配的标签在一侧必须是唯一的
    • @user1578872,是的,这是有意的。您需要通过唯一标签连接两个指标。比如on(instance) group_left(label_source)
    【解决方案2】:

    根据“Join Metrics”文档here,您基本上可以将kube_pod_info 查询中的标签与kube_pod_labels 查询中的标签组合起来。

    类似这样的事情:

    kube_pod_info{namespace="test"} * on (namespace, pod) group_left() kube_pod_labels{label_source="k8s"}
    

    此查询应为您提供命名空间 test 中的所有 Pod,它们的 source 标签设置为 k8s

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 2019-10-05
      • 2021-11-25
      相关资源
      最近更新 更多