web-dev-qa-db-fra.com

Comment créer un ServiceMonitor pour prometheus-operator?

Récemment, prometheus-operator a été promu au tableau de barre stable ( https://github.com/helm/charts/tree/master/stable/prometheus-operator ).

Je voudrais comprendre comment ajouter une application personnalisée à la surveillance par prometheus-operator dans un cluster k8s. Un exemple pour dire gitlab runner qui fournit par défaut des métriques sur 9252 serait apprécié ( https://docs.gitlab.com/runner/monitoring/#configuration-of-the-metrics-http-server ).

J'ai un yaml rudimentaire qui ne fonctionne évidemment pas mais ne fournit pas non plus de retour sur ce qui ne fonctionne pas:

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

Voici la configuration de prometheus:

> kubectl get prometheus -o yaml

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

Les sélecteurs doivent donc correspondre. Par "ne fonctionne pas", je veux dire que les points d'extrémité n'apparaissent pas dans l'interface utilisateur de prometheus.

20
andig

Merci à Peter qui m'a montré que son idée n'était en principe pas totalement incorrecte. J'ai trouvé le lien manquant. Comme un servicemonitor surveille les services (haha), j'ai raté la partie de la création d'un service qui ne fait pas partie du graphique de barre de gitlab. Enfin, ce yaml a fait l'affaire pour moi et les métriques apparaissent dans 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

Bon à savoir: le metricstargetPort est défini dans le graphique du runner de gitlab.

4
andig