Passer au contenu principal

Production (Kubernetes)

Observabilité : Prometheus et Grafana

L'observabilité d'un cluster Kubernetes repose sur trois piliers : métriques (Prometheus), logs (Loki ou EFK), traces (Jaeger, Tempo). Prometheus + Grafana est le standard de facto pour les métriques. Le stack kube-prometheus-stack déploie l'ensemble avec des dashboards préconfigurés pour Kubernetes.

Prometheus

Prometheus collecte des métriques en mode pull : il interroge périodiquement les endpoints /metrics des targets. Les métriques sont stockées dans une base time-series locale (TSDB). PromQL est le langage de requête.

# Installation kube-prometheus-stack (Prometheus + Grafana + AlertManager + node-exporter + kube-state-metrics)
helm install kps prometheus-community/kube-prometheus-stack   --namespace monitoring --create-namespace   -f values.yaml

kubectl get pods -n monitoring
# values.yaml (extraits clés)
prometheus:
  prometheusSpec:
    retention: 30d
    storageSpec:
      volumeClaimTemplate:
        spec:
          storageClassName: fast-ssd
          resources:
            requests:
              storage: 100Gi
    resources:
      requests:
        cpu: 500m
        memory: 2Gi

grafana:
  adminPassword: changeme
  persistence:
    enabled: true
    size: 10Gi

ServiceMonitor et PodMonitor

Le Prometheus Operator utilise des CRDs pour configurer les targets dynamiquement, sans modifier le fichier de configuration statique de Prometheus.

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: myapp
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: myapp             # Sélectionne le Service à monitorer
  namespaceSelector:
    matchNames:
    - production
  endpoints:
  - port: metrics
    interval: 30s
    path: /metrics

AlertManager et alertes

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: myapp-alerts
  namespace: monitoring
spec:
  groups:
  - name: myapp
    rules:
    - alert: HighErrorRate
      expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05
      for: 5m
      labels:
        severity: critical
      annotations:
        summary: "Taux d'erreur élevé sur {{ $labels.service }}"
        description: "{{ $value | humanizePercentage }} d'erreurs 5xx"

Grafana

kube-prometheus-stack installe des dashboards Grafana prêts à l'emploi pour Kubernetes : utilisation des noeuds, des pods, des namespaces, de l'API server, etc. (importés depuis grafana.com/dashboards).

# Accès Grafana
kubectl port-forward svc/kps-grafana -n monitoring 3000:80
# admin / changeme

metrics-server

metrics-server est distinct de Prometheus. Il fournit les métriques CPU/mémoire à l'API Kubernetes pour kubectl top et HPA. Il ne stocke pas de données historiques.

helm install metrics-server metrics-server/metrics-server -n kube-system
kubectl top nodes
kubectl top pods -A --sort-by=cpu

Sources