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
因此,我在要抓取的 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"
现在由于某种原因,所有这些目标在抓取目标中出现两次(在不同的端口下),如 Prometheus UI 所示:
为什么会这样?为什么会出现在80端口下?带有端口的目标9090
显示它从注释中读取端口的重新标记配置有效。
附加信息:
- prometheus pod 是有状态集的一部分
- 它只定义了一个(未命名的)端口 9090
- 它有一个不暴露端口的初始化容器
- 屏幕截图显然只显示了
kubernetes-pods
作业中的抓取目标 - 这只是普罗米修斯(v2.22.0),不由普罗米修斯运营商管理
解决方案
Prometheus的pod
服务发现角色为 Pod 的每个容器创建一个目标,包括 init 容器。您的 Pod 中有一个 init 容器,因此这会产生两个目标。
如果容器未声明端口(如您的 init 容器),则会创建一个无端口目标。这意味着,您replace
设置的规则中的正则表达式__address__
不匹配,然后 Prometheus 默认使用端口 80 作为该目标。
要删除 init 容器目标,请尝试添加以下规则:
- source_labels: [ __meta_kubernetes_pod_container_init ]
regex: true
action: drop
推荐阅读
- java - c++ (u256)*(h256 const*)(char*[] + int) 强制转换重写为java
- javascript - jQueryUI DatePicker 没有在 IE 中关闭
- ionic-framework - Ionic iOS输入字段隐藏在键盘后面
- mysql - Mysql更新用户余额SQL语法错误
- c++ - 我正在尝试在 Arduino 中制作一个对象但出现错误
- aws-lambda - Cloudwatch 日志过滤器触发 lambda,然后从日志数据中提取值
- windows - Robocopy 批处理脚本不断重启
- spring-boot - 了解多模块项目中的 Spring Boot Maven 插件
- javascript - 如何将电子文件从“require”转换为“import”以与 TypeScript 一起使用?角2+
- node.js - 关于visual studio代码的方法建议