Aller au contenu

Exporter vos métriques applicatives

Votre application expose des métriques au format Prometheus (/metrics) ? Déclarez un ServiceMonitor et la plateforme les collecte automatiquement — elles apparaissent dans votre Grafana, prêtes pour vos dashboards custom. Inclus dans le prix (fair use), rien à installer.

Le trio testé sur la plateforme

Une application qui expose /metrics, son Service, et le ServiceMonitor :

apiVersion: apps/v1
kind: Deployment
metadata:
name: mon-app
spec:
selector:
matchLabels: {app: mon-app}
template:
metadata:
labels: {app: mon-app}
spec:
containers:
- name: app
image: registry.exemple.com/acme/mon-app:1.4
ports:
- name: http # ← port nommé, référencé par le ServiceMonitor
containerPort: 8080
resources:
requests: {cpu: 100m, memory: 256Mi}
---
apiVersion: v1
kind: Service
metadata:
name: mon-app
labels: {app: mon-app} # ← labels sur le Service : c'est eux que
spec: # le ServiceMonitor sélectionne
selector: {app: mon-app}
ports:
- name: http
port: 8080
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: mon-app
spec:
selector:
matchLabels: {app: mon-app} # ← matche les labels du SERVICE
endpoints:
- port: http # ← le nom du port du Service
path: /metrics
interval: 30s

Dans la minute qui suit, la plateforme découvre la cible et commence à scraper. Vos métriques sont interrogeables dans Grafana avec leurs labels (namespace, pod, job=mon-app…).

Les trois pièges classiques

  1. Le ServiceMonitor sélectionne les labels du Service, pas ceux des pods. Si rien ne remonte, vérifiez : kubectl get svc mon-app --show-labels doit afficher les labels attendus par le selector du ServiceMonitor ;
  2. port désigne le nom du port du Service (http ci-dessus), pas son numéro — un port non nommé ne peut pas être référencé ;
  3. L’endpoint doit répondre sans authentification depuis le cluster : testez kubectl exec deploy/mon-app -- wget -qO- localhost:8080/metrics | head.

Côté application

La plupart des frameworks ont une bibliothèque Prometheus prête à l’emploi : Spring Boot Actuator (Java), prom-client (Node.js), prometheus-client (Python)… Elles exposent d’office les métriques standard (requêtes HTTP, latences) ; ajoutez vos compteurs métier par-dessus.

Pour un workload sans Service (CronJob, pods bruts), utilisez un PodMonitor — même principe, mais son selector matche directement les labels des pods.

Construire un dashboard

Dans votre Grafana : Dashboards → New, choisissez la source de données proposée, et requêtez vos métriques. Exemples de requêtes PromQL de départ :

# Débit de requêtes par seconde
rate(http_requests_total{namespace="c-acme-rtximz-prod"}[5m])
# P95 de latence
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))