Как создать ServiceMonitor для Прометея-оператора? - PullRequest
0 голосов
/ 25 октября 2018

Недавно prometheus-operator был переведен на стабильную рулевую диаграмму (https://github.com/helm/charts/tree/master/stable/prometheus-operator).

Я хотел бы понять, как добавить пользовательское приложение для мониторинга с помощью prometheus-operator в кластере k8sБыл бы признателен пример, скажем, gitlab runner, который по умолчанию предоставляет метрики на 9252 (https://docs.gitlab.com/runner/monitoring/#configuration-of-the-metrics-http-server).

. У меня есть элементарный yaml, который, очевидно, не работает, но также не предоставляет никакой обратной связи на what не работает:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: gitlab-monitor
  # Change this to the namespace the Prometheus instance is running in
  namespace: default
  labels:
    app: gitlab-runner-gitlab-runner
    release: prometheus
spec:
  selector:
    matchLabels:
      app: gitlab-runner-gitlab-runner
  namespaceSelector:
    # matchNames:
    # - default
    any: true
  endpoints:
  - port: http-metrics
    interval: 15s

Это конфигурация Prometheus:

> kubectl get prometheus -o yaml

...
serviceMonitorNamespaceSelector: {}
serviceMonitorSelector:
  matchLabels:
    release: prometheus
...

Таким образом, селекторы должны совпадать. Под "не работает" я имею в виду, что конечные точки не отображаютсяв интерфейсе Прометея.

Ответы [ 2 ]

0 голосов
/ 01 июня 2019

Я знаю, что на этот вопрос уже дан ответ.Но у меня была похожая проблема, когда Прометей, развернутый в Кубернетесе со стабильной диаграммой Хелма / оператором Прометея, не смог найти активных целей для моего ServiceMonitor.Оказалось, что моя служба открыла порт, который я не назвал явно:

  - protocol: TCP
    port: 8080
    targetPort: uwsgi

Я мог использовать его в Ingress, настроив порт uwsgi.Но, похоже, ServiceMonitor нужен порт с явным именем в Service, даже если он имеет то же имя, что и его собственный порт taget:

  - name: uwsgi
    protocol: TCP
    port: 8080
    targetPort: uwsgi

Я написал сообщение в блоге об этой проблеме здесь

0 голосов
/ 26 октября 2018

Благодаря Питеру, который показал мне, что идея в принципе не совсем верна, я нашел недостающую ссылку.Поскольку servicemonitor контролирует сервисы (ха-ха), я упустил часть создания сервиса, который не является частью схемы управления gitlab.Наконец, этот ямл помог мне, и в Prometheus появились метрики:

# Service targeting gitlab instances
apiVersion: v1
kind: Service
metadata:
  name: gitlab-metrics
  labels:
    app: gitlab-runner-gitlab-runner
spec:
  ports:
  - name: metrics # expose metrics port
    port: 9252 # defined in gitlab chart
    targetPort: metrics
    protocol: TCP
  selector:
    app: gitlab-runner-gitlab-runner # target gitlab pods
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: gitlab-metrics-servicemonitor
  # Change this to the namespace the Prometheus instance is running in
  # namespace: default
  labels:
    app: gitlab-runner-gitlab-runner
    release: prometheus
spec:
  selector:
    matchLabels:
      app: gitlab-runner-gitlab-runner # target gitlab service
  endpoints:
  - port: metrics
    interval: 15s

Приятно знать: metrics targetPort определено в диаграмме бегуна gitlab.

...