普罗米修斯中覆盖标签的问题

obj*_*ion 2 monitoring kubernetes prometheus

我从掌舵安装了稳定/普罗米修斯。默认情况下,job_namekubernetes-service-endpoints包含node-exporterkube-state-metrics作为组件标签。我在 prometheus.yml 中添加了以下配置以包含命名空间、pod 和节点标签。

      - source_labels: [__meta_kubernetes_namespace]
        separator: ;
        regex: (.*)
        target_label: namespace
        replacement: $1
        action: replace
      - source_labels: [__meta_kubernetes_pod_name]
        separator: ;
        regex: (.*)
        target_label: pod
        replacement: $1
        action: replace
      - source_labels: [__meta_kubernetes_pod_node_name]
        separator: ;
        regex: (.*)
        target_label: node
        replacement: $1
        action: replace
Run Code Online (Sandbox Code Playgroud)

kube_pod_info{component="kube-state-metrics"}已经有了命名空间、pod 和节点标签,因此生成了导出的标签。并且该指标node_cpu_seconds_total{component="node-exporter"}现在正确地具有标签命名空间、pod 和节点。

要正确使用这些标签,我需要在上述两个指标名称中都包含这 3 个标签。为了实现这一点,我可以覆盖exported_labels 的值。我尝试添加以下配置但无济于事。

      - source_labels: [__name__, exported_pod]
        regex: "kube_pod_info;(.+)"
        target_label: pod
      - source_labels: [__name__, exported_namespace]
        regex: "kube_pod_info;(.+)"
        target_label: namespace
      - source_labels: [__name__, exported_node]
        regex: "kube_pod_info;(.+)"
        target_label: node
Run Code Online (Sandbox Code Playgroud)

这里提到类似的方法。我看不到我的一段代码的问题。任何解决方向都会非常有帮助。

更新 - (添加完整的工作)

    - job_name: kubernetes-service-endpoints
      kubernetes_sd_configs:
      - role: endpoints

      metric_relabel_configs:
      - source_labels: [__name__, exported_pod]
        regex: "kube_pod_info;(.+)"
        target_label: pod
      - source_labels: [__name__, exported_namespace]
        regex: "kube_pod_info;(.+)"
        target_label: namespace
      - source_labels: [__name__, exported_node]
        regex: "kube_pod_info;(.+)"
        target_label: node

      relabel_configs:
      - action: keep
        regex: true
        source_labels:
        - __meta_kubernetes_service_annotation_prometheus_io_scrape
      - action: replace
        regex: (https?)
        source_labels:
        - __meta_kubernetes_service_annotation_prometheus_io_scheme
        target_label: __scheme__
      - action: replace
        regex: (.+)
        source_labels:
        - __meta_kubernetes_service_annotation_prometheus_io_path
        target_label: __metrics_path__
      - action: replace
        regex: ([^:]+)(?::\d+)?;(\d+)
        replacement: $1:$2
        source_labels:
        - __address__
        - __meta_kubernetes_service_annotation_prometheus_io_port
        target_label: __address__
      - action: labelmap
        regex: __meta_kubernetes_service_label_(.+)
      - action: replace
        source_labels:
        - __meta_kubernetes_namespace
        target_label: namespace
      - action: replace
        regex: (.*)
        replacement: $1
        separator: ;
        source_labels:
        - __meta_kubernetes_pod_name
        target_label: pod
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_node_name
        target_label: node
Run Code Online (Sandbox Code Playgroud)

promql 的结果

kube_pod_info 结果

wei*_*eld 5

所以,你的目标是重新命名的度量标准标签exported_podpod等,为kube_pod_info指标?

在这种情况下,您需要在从目标中获取指标时进行指标重新标记

- job_name: 'kubernetes-service-endpoints'

  kubernetes_sd_configs:
    - role: endpoints

  metric_relabel_configs:
    - source_labels: [__name__, exported_pod]
      regex: "kube_pod_info;(.+)"
      target_label: pod
    - source_labels: [__name__, exported_namespace]
      regex: "kube_pod_info;(.+)"
      target_label: namespace
    - source_labels: [__name__, exported_node]
      regex: "kube_pod_info;(.+)"
      target_label: node
  relabel_configs:
    # Insert the same what you have so far
Run Code Online (Sandbox Code Playgroud)

背景:

正常重新标记( relabel_configs) 在服务发现时应用于服务发现过程自动发现的目标标签。它定义了明确的目标标签。在抓取时,目标标签会添加到来自目标的所有指标的指标标签中。正常的重新标记只能用于在服务发现后处理目标的标签,这些标签通常是以 开头的元标签__

指标重新标记( metric_relabel_configs)在抓取时应用于指标标签。因此,这可用于重命名由公开指标本身的应用程序定义的标签。