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

ken*_*tor 3 prometheus

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

我的抓取配置:

  - 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: ${1}:${2}
        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
Run Code Online (Sandbox Code Playgroud)

因此,我在要抓取的 pod 上设置了注释:

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"
Run Code Online (Sandbox Code Playgroud)

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

普罗米修斯抓取目标

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

附加信息:

  • prometheus pod 是有状态集的一部分
  • 它只定义了一个(未命名)端口 9090
  • 它有一个不公开端口的初始化容器
  • 屏幕截图显然只显示了作业中的抓取kubernetes-pods目标
  • 这只是 prometheus (v2.22.0),不由 prometheus 操作员管理

wei*_*eld 5

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

如果容器没有声明端口(如初始化容器),则会创建一个无端口目标。这意味着,replace规则中设置的正则表达式__address__不匹配,Prometheus 默认使用端口 80 来实现该目标。

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

- source_labels: [ __meta_kubernetes_pod_container_init ]
  regex: true
  action: drop
Run Code Online (Sandbox Code Playgroud)