如何配置 kube-prometheus-stack helm 安装来抓取 Kubernetes 服务?

Posted

技术标签:

【中文标题】如何配置 kube-prometheus-stack helm 安装来抓取 Kubernetes 服务?【英文标题】:How to configure kube-prometheus-stack helm installation to scrape a Kubernetes service? 【发布时间】:2021-06-26 17:13:37 【问题描述】:

我已将 kube-prometheus-stack 作为 依赖项 安装在 Mac Kubernetes 集群 v1.19.7 的本地 docker 上的 helm 图表中。我可以查看 kube-prometheus-stack 提供的默认 prometheus 目标。

我有一个 python 烧瓶服务,它提供了我可以使用 kubectl port forward 在 kubernetes 集群中成功查看的指标。

但是,我无法在 prometheus 目标 Web 界面上显示这些指标。

kube-prometheus-stack 文档指出 Prometheus.io/scrape 不支持基于注释的服务发现。相反,读者可以参考ServiceMonitorsPodMonitors 的概念。

所以,我的服务配置如下:

---
kind:                       Service
apiVersion:                 v1  
metadata:
  name:                     flask-api-service                    
  labels:
    app:                    flask-api-service
spec:
  ports:
    - protocol:             TCP 
      port:                 4444
      targetPort:           4444
      name:                 web 
  selector:
    app:                    flask-api-service                    
    tier:                   backend 
  type:                     ClusterIP
---
apiVersion:                 monitoring.coreos.com/v1
kind:                       ServiceMonitor
metadata:
  name:                     flask-api-service
spec:
  selector:
    matchLabels:
      app:                  flask-api-service
  endpoints:
  - port:                   web 

随后,我设置了一个端口转发来查看指标:

Kubectl port-forward prometheus-flaskapi-kube-prometheus-s-prometheus-0 9090

然后访问http://localhost:9090的prometheus网页

当我选择 Status->Targets 菜单选项时,我的 flask-api-service 没有显示。

我知道该服务已启动并正在运行,并且我已检查是否可以使用 kubectl port-forward <pod name> 4444 查看我的 flask-api-service 的 pod 指标。

查看类似的issue,它看起来好像有一个配置值serviceMonitorSelectorNilUsesHelmValues,默认为true。将此设置为 false 会使操作员在 helm 中查看其发布标签之外的内容??

除了extraScrapeConfigs 配置值之外,我还尝试将此添加到我的舵图的values.yml。但是,当单击 Status->Targets 菜单选项时,flask-api-service 仍然不会作为附加目标出现在 prometheus 网页上。

prometheus:
  prometheusSpec:
    serviceMonitorSelectorNilUsesHelmValues: false
  extraScrapeConfigs: |
    - job_name: 'flaskapi'
    static_configs:
      - targets: ['flask-api-service:4444']

如何让我的 flask-api-servicehttp://localhost:9090 的 prometheus 目标页面上得到识别?

我正在通过我的 helm 图表将 Kube-Prometheus-Stack 作为依赖项安装,默认值如下所示:

Chart.yaml

apiVersion: v2
appVersion: "0.0.1"
description: A Helm chart for flaskapi deployment
name: flaskapi
version: 0.0.1
dependencies:
- name: kube-prometheus-stack
  version: "14.4.0"
  repository: "https://prometheus-community.github.io/helm-charts"
- name: ingress-nginx
  version: "3.25.0"
  repository: "https://kubernetes.github.io/ingress-nginx"
- name: redis
  version: "12.9.0"
  repository: "https://charts.bitnami.com/bitnami"

Values.yaml

docker_image_tag: dcs3spp/
hostname: flaskapi-service
redis_host: flaskapi-redis-master.default.svc.cluster.local 
redis_port: "6379"

prometheus:
  prometheusSpec:
    serviceMonitorSelectorNilUsesHelmValues: false
  extraScrapeConfigs: |
    - job_name: 'flaskapi'
    static_configs:
      - targets: ['flask-api-service:4444']

【问题讨论】:

请通过 kube-prometheus-stack helm chart 分享您用于安装 prometheus 的 values.yaml(只是您覆盖的值)文件。 谢谢,问题已添加详细信息 【参考方案1】:

Prometheus 自定义资源定义有一个名为 serviceMonitorSelector 的字段。 Prometheus 只监听那些匹配的 serviceMonitor。在 helm 部署的情况下,它是您的版本名称。

release:  $.Release.Name | quote 

因此,在您的 serviceMonitor 中添加此字段应该可以解决问题。那么你的 serviceMonitor 清单文件将是:


apiVersion:                 monitoring.coreos.com/v1
kind:                       ServiceMonitor
metadata:
  name:                     flask-api-service
  labels:
      release: <your_helm_realese_name_>
spec:
  selector:
    matchLabels:
      app:                  flask-api-service
  endpoints:
  - port:                   web 

【讨论】:

魔术,非常感谢,它成功了。非常感谢!!!!接受答案并投票:) 乐于助人。 :) @PulakKantiBhowmick 你一定指的是这个字段:github.com/prometheus-community/helm-charts/blob/main/charts/… 你在哪里看到它的值是默认发布名称? 请查看这里github.com/prometheus-community/helm-charts/blob/main/charts/… 谢谢。为了讨论方便,如果默认matchLabelsrelease: $.Release.Name | quote ,你觉得这里的说法有误吗:github.com/prometheus-community/helm-charts/blob/main/charts/…

以上是关于如何配置 kube-prometheus-stack helm 安装来抓取 Kubernetes 服务?的主要内容,如果未能解决你的问题,请参考以下文章

如何动态修改Mysql的配置参数

如何配置我的 emacs 配置?

如何安装,配置MongoDB

如何安装,配置MongoDB

如何配置PostgreSQL允许被远程访问

什么是拦截器,如何配置拦截器,如何使用拦截器