Как настроить установку kube-prometheus-stack helm для очистки службы Kubernetes?

Я установил kube-prometheus-stack в качестве зависимости в моей диаграмме управления на локальном докере для кластера Mac Kubernetes v1.19.7. Я могу просмотреть цели Prometheus по умолчанию, предоставленные kube-prometheus-stack.

У меня есть служба python flask, которая предоставляет метрики, которые я могу успешно просматривать в кластере kubernetes, используя kubectl port forward.

Однако я не могу отобразить эти показатели в веб-интерфейсе целей Prometheus.

kube-prometheus-stack указано, что Prometheus.io/scrape не поддерживает обнаружение сервисов на основе аннотаций. Вместо этого читатель обращается к концепции 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

Когда я выбираю пункт меню Status- ›Targets, мой flask-api-service не отображается.

Я знаю, что служба запущена и работает, и проверил, могу ли я просматривать метрики модуля для моей службы flask-api с помощью kubectl port-forward <pod name> 4444.

Глядя на аналогичную проблему, похоже, что существует значение конфигурации serviceMonitorSelectorNilUsesHelmValues, которое по умолчанию равно true. Установка этого значения в false заставляет оператора смотреть за пределы меток выпуска в helm ??

Я попытался добавить это в values.yml моей диаграммы штурвала в дополнение к значению конфигурации extraScrapeConfigs. Однако flask-api-service по-прежнему не отображается в качестве дополнительной цели на веб-странице Prometheus при выборе пункта меню «Статус-› Цели ».

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

Как мне распознать мою flask-api-service на странице целей prometheus по адресу http://localhost:9090?

Я устанавливаю 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']

person anon_dcs3spp    schedule 30.03.2021    source источник
comment
Пожалуйста, поделитесь файлом values.yaml (только те значения, которые вы переопределяете), который вы использовали для установки prometheus через диаграмму управления kube-prometheus-stack.   -  person rock'n rolla    schedule 30.03.2021
comment
Спасибо, подробности добавлены в вопрос   -  person anon_dcs3spp    schedule 30.03.2021


Ответы (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 
person Pulak Kanti Bhowmick    schedule 30.03.2021
comment
Магия, которую мы очень ценим, сделала свое дело. Большое спасибо!!!! Принятие ответа и голосование :) - person anon_dcs3spp; 30.03.2021
comment
Рад помочь. :) - person Pulak Kanti Bhowmick; 30.03.2021
comment
@PulakKantiBhowmick Вы, должно быть, имеете в виду это поле: github.com/prometheus-community/helm-charts/blob/main/charts/ Где вы видите его значение, являющееся названием выпуска по умолчанию? - person rock'n rolla; 30.03.2021
comment
Пожалуйста, проверьте здесь github.com/prometheus-community/helm-charts/blob/main/charts/ - person Pulak Kanti Bhowmick; 30.03.2021
comment
Спасибо. Для обсуждения, если по умолчанию matchLabels равно release: {{ $.Release.Name | quote }}, считаете ли вы, что приведенное здесь утверждение неверно: github.com/prometheus-community/helm-charts/blob/main/charts/ - person rock'n rolla; 30.03.2021
comment
Мне кажется, это нормально. Для этого пользователя необходимо установить serviceMonitorSelectorNilUsesHelmValues: true - person Pulak Kanti Bhowmick; 30.03.2021
comment
Извините, что перебил вас по этому поводу, но вы хотели сказать, что serviceMonitorSelectorNilUsesHelmValues необходимо установить в false для этого утверждения: github.com/prometheus-community/helm-charts/blob/main/charts/, чтобы быть правдой. Только тогда он установит serviceMonitorSelector в {} и выберет все ServiceMonitors в соответствии с условием здесь: github.com/prometheus-community/helm-charts/blob/main/charts/ - person rock'n rolla; 30.03.2021
comment
Давайте продолжим это обсуждение в чате. - person rock'n rolla; 30.03.2021