普罗米修斯只刮一个吊舱
Posted
技术标签:
【中文标题】普罗米修斯只刮一个吊舱【英文标题】: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?
【问题讨论】:
【参考方案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: "<exporter_port_here>"
注解
这是official example
被刮掉的豆荚可能是普罗米修斯本身
【讨论】:
以上是关于普罗米修斯只刮一个吊舱的主要内容,如果未能解决你的问题,请参考以下文章
Rancher、普罗米修斯、Cadvisor、Grafana、skywalking