在不同端口上重复抓取目标

Duplicate scrape targets on different ports

我使用的抓取配置与示例中建议的配置非常相似。出于某种原因,我有重复的抓取目标。我想知道为什么会这样

我的抓取配置:

  - job_name: 'kubernetes-pods'
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [ __meta_kubernetes_pod_annotation_prometheus_io_scrape ]
        action: keep
        regex: true
      - source_labels: [ __meta_kubernetes_pod_annotation_prometheus_io_path ]
        action: replace
        target_label: __metrics_path__
        regex: (.+)
      - source_labels: [ __address__, __meta_kubernetes_pod_annotation_prometheus_io_port ]
        action: replace
        regex: (.+):(?:\d+);(\d+)
        replacement: :
        target_label: __address__
      - action: labelmap
        regex: __meta_kubernetes_pod_label_(.+)
      - action: labeldrop
        regex: statefulset_kubernetes_io_pod_name # This is duplicate because we already have the pod_name
      - source_labels: [ __meta_kubernetes_namespace ]
        action: replace
        target_label: kubernetes_namespace
      - source_labels: [ __meta_kubernetes_pod_name ]
        action: replace
        target_label: kubernetes_pod_name

因此我设置了要抓取的注释pods:

metadata:
  annotations:
    checksum/config: "8755a7a06e8302a6861c536738da919828761d7c6a794b2c52c920b4ddae163e"
    cni.projectcalico.org/podIP: "172.22.130.165/32"
    kubernetes.io/psp: "prometheus"
    prometheus.io/path: "/metrics"
    prometheus.io/port: "9090"
    prometheus.io/scrape: "true"

现在由于某些原因,所有这些目标在抓取目标中出现了两次(在不同的端口下),如 Prometheus UI:

为什么会这样?为什么会出现在80端口下?端口为 9090 的目标表明它从注释中读取端口的重新标记配置有效。

附加信息:

Prometheus 的 pod 服务发现角色为 Pod 的每个容器创建一个目标,包括初始化容器。您的 Pod 中有一个初始化容器,因此这会产生两个目标。

如果容器未声明端口(如您的初始容器),则会创建 port-free 目标。这意味着,设置 __address__replace 规则中的正则表达式不匹配,然后 Prometheus 默认为此目标使用端口 80。

要删除初始容器目标,请尝试添加以下规则:

- source_labels: [ __meta_kubernetes_pod_container_init ]
  regex: true
  action: drop