从自定义 K8s prometheus 导出器中删除默认变量
Posted
技术标签:
【中文标题】从自定义 K8s prometheus 导出器中删除默认变量【英文标题】:Remove default vars from custom K8s prometheus exporter 【发布时间】:2020-12-10 04:06:36 【问题描述】:我开始使用自定义导出器(使用 kubernetes、grafana 和 prometheus),但遇到了问题。我设法正确地公开了我的指标,但每次我杀死发送它们的 pod 时,vars 都会改变,grafana 会绘制不同的颜色(比如新信息)。
有没有办法只将应用程序保留为 var,我认为问题在于改变的 vars(pod 名称和 ip)?
MyMetricapp="prometheus-export-mymetric",instance="172.26.32.69:3000",job="kubernetes-pods",kubernetes_namespace="default",kubernetes_pod_name="prometheus-export-mymetric-66694564b8-r4pqc",pod_template_hash="66694564b8"
提前致谢。
【问题讨论】:
我根据@Vlad Ulshin 的回答玩了这个。我有规则来替换 pod 名称和哈希但不是实例。如果您需要,我认为 kubernetes_sd_configs 的不同角色是要走的路 - github.com/prometheus-operator/prometheus-operator/issues/… 【参考方案1】:您应该使用重新部署后保持不变的 pod 标签,而不是 kubernetes_pod_name。
在 prometheus 配置中,我们使用的是这样的:
- job_name: kubernetes-pods
honor_timestamps: true
scrape_interval: 15s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
separator: ;
regex: "true"
replacement: $1
action: keep
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
separator: ;
regex: (.+)
target_label: __metrics_path__
replacement: $1
action: replace
- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
separator: ;
regex: ([^:]+)(?::\d+)?;(\d+)
target_label: __address__
replacement: $1:$2
action: replace
- separator: ;
regex: __meta_kubernetes_pod_label_(.+)
replacement: $1
action: labelmap
- source_labels: [__meta_kubernetes_namespace]
separator: ;
regex: (.*)
target_label: kubernetes_namespace
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_pod_name]
separator: ;
regex: (.*)
target_label: kubernetes_pod_name
replacement: $1
action: replace
【讨论】:
以上是关于从自定义 K8s prometheus 导出器中删除默认变量的主要内容,如果未能解决你的问题,请参考以下文章
Prometheus 的黑盒导出器中的 3 个 ICMP 阶段是啥意思?
更新 opentelemetry prometheus 导出器中的标签
Prometheus 无法从自定义 Rest Endpoint 读取指标
如何使用 JSON 格式获取 Prometheus 节点导出器指标
如何在模块化的 java 11 应用程序中动态加载 Libreoffice jar,而不从自定义类加载器中获取 ClassCastException