我使用的抓取配置与示例中建议的配置非常相似。由于某种原因,我有重复的抓取目标。我想知道为什么会这样
我的抓取配置:
- 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显示从注释中读取端口的重新标记配置有效。
附加信息:
kubernetes-pods目标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)
| 归档时间: |
|
| 查看次数: |
2875 次 |
| 最近记录: |