【问题标题】:Prometheus only scrapes one pod普罗米修斯只刮一个吊舱
【发布时间】:2020-01-17 08:03:59
【问题描述】:

我正在使用 Prometheus 从我的 pod 中抓取指标。我感兴趣的应用程序通过一项提供访问的服务被复制了几次。 Prometheus 使用此服务来抓取指标。在我的应用中,指标设置如下:

import * as Prometheus from 'prom-client';

const httpRequestDurationMicroseconds = new Prometheus.Histogram({
    name: 'transaction_amounts',
    help: 'Amount',
    labelNames: ['amount'],
    buckets: [0, 5, 15, 50, 100, 200, 300, 400, 500, 10000],
});

const totalPayments = new Prometheus.Counter('transaction_totals', 'Total payments');

我正在使用 helm 安装 Prometheus,scrape 配置如下所示:

prometheus.yml:
  rule_files:
    - /etc/config/rules
    - /etc/config/alerts

  scrape_configs:
    - job_name: prometheus
      static_configs:
        - targets:
          - localhost:9090
    - job_name: transactions
      scrape_interval: 1s
      static_configs:
        - targets:
          - transaction-metrics-service:3001

我可以看到 prometheus 内部的指标,但它似乎只来自一个 pod。例如,在 Prometheus 中,当我查询 transaction_totals 时,它给出:

我认为instance 标签不能唯一标识我的 pod。我应该怎么做才能查询所有 pod?

【问题讨论】:

    标签: kubernetes prometheus metrics


    【解决方案1】:

    请尝试使用 Prometheus 提供的 kubernetes_sd_configs Kubernetes Service Discovery,而不是使用仅抓取一台主机的 static_config。 你的配置文件看起来像这样:

    - job_name: 'kubernetes-pods'
    
      kubernetes_sd_configs:
      - role: pod
    
      relabel_configs:
      # only scrape when annotation prometheus.io/scrape: 'true' is set
      - 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_(.+)
      - source_labels: [__meta_kubernetes_namespace]
        action: replace
        target_label: kubernetes_namespace
      - source_labels: [__meta_kubernetes_pod_name]
        action: replace
        target_label: kubernetes_pod_name
    

    然后将注释添加到您的 Kubernetes 部署 yaml 配置中,如下所示:

    kind: Deployment
    
    ...
    
    spec:
      template:
        metadata:
          annotations:
            prometheus.io/scrape: "true"
            prometheus.io/port: "<< PORT OF YOUR CONTAINER >>"
    
    

    你可以看到full working example here

    【讨论】:

    • 非常感谢,这行得通!我必须补充一点,@EfratLevitan 的答案也是正确的,因为单独的注释也可以解决问题
    【解决方案2】:

    向您的服务添加 prometheus 注释,因为 prom 只会抓取以下服务:

    • 暴露出口商端口
    • prometheus.io/scrape: "true"注解
    • prometheus.io/port: "&lt;exporter_port_here&gt;"注解

    这是official example

    被刮掉的豆荚可能是普罗米修斯本身

    【讨论】:

      猜你喜欢
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2017-09-03
      • 1970-01-01
      • 2022-10-17
      • 2022-12-02
      相关资源
      最近更新 更多