普罗米修斯只刮一个豆荚 [英] Prometheus only scrapes one pod

查看:105
本文介绍了普罗米修斯只刮一个豆荚的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Prometheus从我的广告连播中抓取指标.我感兴趣的应用程序通过提供访问权限的一项服务被复制了两次. Prometheus使用此服务来抓取指标.在我的应用中,指标设置如下:

I'm using Prometheus to scrape metrics from my pods. The application I'm interested in is replicated a couple of times with one service providing access. Prometheus uses this service to scrape the metrics. In my app the metrics are setup as follows:

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');

我正在使用头盔安装Prometheus,并且抓取配置如下所示:

I'm using helm to install Prometheus and the scrape config looks like this:

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中,当我查询transaction_totals时,它给出:

I can see the metrics inside prometheus, but it seems to be from just one pod. For example, in Prometheus, when I query for transaction_totals it gives:

我认为instance标签不能唯一标识我的豆荚.我应该怎么做才能查询所有吊舱?

I don't think that the instance label can uniquely identify my pods. What should I do to be able to query all pods?

推荐答案

请尝试使用Prometheus提供的kubernetes_sd_configs Kubernetes Service Discovery,而不是仅刮刮一台主机的static_config. 您的配置文件如下所示:

Instead of using a static_config that scrapes just one host, try using kubernetes_sd_configs Kubernetes Service Discovery as provided by Prometheus. Your config file would look something like this:

- 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配置中,如下所示:

and then add the annotation to your Kubernetes Deployment yaml config like this:

kind: Deployment

...

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

您可以在此处看到完整的示例

这篇关于普罗米修斯只刮一个豆荚的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆