从自定义 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 (k8s) 中动态定义指标

Prometheus 的黑盒导出器中的 3 个 ICMP 阶段是啥意思?

更新 opentelemetry prometheus 导出器中的标签

Prometheus 无法从自定义 Rest Endpoint 读取指标

如何使用 JSON 格式获取 Prometheus 节点导出器指标

如何在模块化的 java 11 应用程序中动态加载 Libreoffice jar,而不从自定义类加载器中获取 ClassCastException