如何配置 kube-prometheus-stack helm 安装以抓取 Kubernetes 服务?
How to configure kube-prometheus-stack helm installation to scrape a Kubernetes service?
我已经在 Mac Kubernetes 集群 v1.19.7 的本地 docker 的 helm chart 中将 kube-prometheus-stack 作为 依赖项 安装。我可以查看 kube-prometheus-stack 提供的默认 prometheus 目标。
我有一个 python flask 服务,它提供了我可以在 kubernetes 集群中使用 kubectl port forward
.
成功查看的指标
但是,我无法在 prometheus 目标 Web 界面上显示这些指标。
kube-prometheus-stack 文档指出 Prometheus。io/scrape 不支持基于注解的服务发现。相反,reader 指的是 ServiceMonitors
和 PodMonitors
.
的概念
所以,我的服务配置如下:
---
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 网页
当我 select Status->Targets 菜单选项时,我的 flask-api-service 没有显示。
我知道该服务已启动并且 运行 我已经检查过我可以使用 kubectl port-forward <pod name> 4444
查看我的 flask-api-服务的 pod 指标。
查看类似的 issue 似乎有一个默认为 true 的配置值 serviceMonitorSelectorNilUsesHelmValues
。将此设置为 false 会使操作员查看其在 helm 中的发布标签之外?
除了 extraScrapeConfigs
配置值之外,我还尝试将其添加到我的 helm chart 的 values.yml
中。但是,flask-api-service 在单击 Status->Targets 菜单选项时仍然没有作为附加目标出现在 prometheus 网页上。
prometheus:
prometheusSpec:
serviceMonitorSelectorNilUsesHelmValues: false
extraScrapeConfigs: |
- job_name: 'flaskapi'
static_configs:
- targets: ['flask-api-service:4444']
如何在 http://localhost:9090
的普罗米修斯目标页面上识别我的 flask-api-服务?
我正在通过我的 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']
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
我已经在 Mac Kubernetes 集群 v1.19.7 的本地 docker 的 helm chart 中将 kube-prometheus-stack 作为 依赖项 安装。我可以查看 kube-prometheus-stack 提供的默认 prometheus 目标。
我有一个 python flask 服务,它提供了我可以在 kubernetes 集群中使用 kubectl port forward
.
但是,我无法在 prometheus 目标 Web 界面上显示这些指标。
kube-prometheus-stack 文档指出 Prometheus。io/scrape 不支持基于注解的服务发现。相反,reader 指的是 ServiceMonitors
和 PodMonitors
.
所以,我的服务配置如下:
---
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
当我 select Status->Targets 菜单选项时,我的 flask-api-service 没有显示。
我知道该服务已启动并且 运行 我已经检查过我可以使用 kubectl port-forward <pod name> 4444
查看我的 flask-api-服务的 pod 指标。
查看类似的 issue 似乎有一个默认为 true 的配置值 serviceMonitorSelectorNilUsesHelmValues
。将此设置为 false 会使操作员查看其在 helm 中的发布标签之外?
除了 extraScrapeConfigs
配置值之外,我还尝试将其添加到我的 helm chart 的 values.yml
中。但是,flask-api-service 在单击 Status->Targets 菜单选项时仍然没有作为附加目标出现在 prometheus 网页上。
prometheus:
prometheusSpec:
serviceMonitorSelectorNilUsesHelmValues: false
extraScrapeConfigs: |
- job_name: 'flaskapi'
static_configs:
- targets: ['flask-api-service:4444']
如何在 http://localhost:9090
的普罗米修斯目标页面上识别我的 flask-api-服务?
我正在通过我的 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']
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