如何将抓取目标添加到安装了 Kubernetes-Helm 的 Prometheus 服务器?

How do you add scrape targets to a Prometheus server that was installed with Kubernetes-Helm?

背景

我已经使用 Helm chart for Prometheus.

在我的 Kubernetes 集群(托管在 Google Container Engineer 上)安装了 Prometheus

问题

我不知道如何将抓取目标添加到 Prometheus 服务器。 prometheus.io 站点描述了我如何将 prometheus.yml 文件(其中包含一个抓取目标列表)挂载到 Prometheus Docker 容器——我已经在本地完成了这个并且它有效。但是,我不知道如何为通过 Kubernetes-Helm 安装的 Prometheus 设置指定抓取目标。我是否需要向包含抓取目标的 Prometheus 服务器 pod 添加一个卷,从而更新 Helm 生成的 YAML 文件?

我也不清楚如何在 Kubernetes Pod 中公开指标——我是否需要转发特定端口?

您需要为要监控的服务添加注解。

apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/scrape: 'true'

来自图表中的prometheus.yml:

  • prometheus.io/scrape:仅抓取值为 true
  • 的服务
  • prometheus.io/scheme:http 或 https
  • prometheus.io/path:如果指标路径不是 /metrics
  • ,则覆盖
  • prometheus.io/port:如果指标暴露在不同的端口

是的,您需要将带有指标的端口公开给服务,以便 Prometheus 可以访问它

首先你需要创建一个Service Monitor,它是一个自定义的K8s资源。只需在清单文件夹中创建一个 servicemonitor.yaml

因为当我们在 K8s 上部署时,我们无法访问 Prometheus.yaml 文件来提及目标,我们创建了 servicemonitor,它又将目标添加到 scrap_config 在 Prometheus.yaml 文件中。您可以从 here.

了解更多信息

这是一个示例 servicemonitor.yaml 文件,用于在 Prometheus 中公开 Flask 应用指标。

apiVersion: monitoring.coreos.com/v1 
kind: ServiceMonitor 
metadata:
  name: flask-metrics
  namespace: prometheus # namespace where prometheus is running
  labels:
    app: flask-app
    release: prom  # name of the release 
    # ( VERY IMPORTANT: You need to know the correct release name by viewing 
    # the servicemonitor of Prometheus itself: Without the correct name, 
    #  Prometheus cannot identify the metrics of the Flask app as the target.)
spec:
  selector:
    matchLabels:
      # Target app service
      app: flask-app # same as above
      release: prom # same as above
  endpoints:
  - interval: 15s # scrape interval
    path: /metrics # path to scrape
    port: http # named port in target app
  namespaceSelector:
    matchNames:
    - flask # namespace where the app is running

还将此发布标签添加到服务和部署文件的元数据和规范部分。

如果遇到 Prometheus 显示 Target 但没有显示端点的情况,请看一下:https://github.com/prometheus-operator/prometheus-operator/issues/3053

一些有用的链接: