Module 6 – Observabilité & SRE

Déployez kube-prometheus, Loki, Tempo, définissez SLO et alertes, pratiquez kubectl debug et chaos pour assurer la fiabilité.

L’observabilité est essentielle pour prévenir les incidents et satisfaire aux SLO SRE. Ce module déploie une stack complète (Prometheus, Loki, Tempo, Grafana) avec OpenTelemetry.

Objectifs

  • Installer une stack observabilité 4 piliers (metrics, logs, traces, alerts).
  • Définir des SLO/SLA et automatiser des alertes basées sur budgets d’erreur.
  • Mettre en œuvre des outils de troubleshooting (kubectl debug, chaos, runbooks).

1. Stack kube-prometheus

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm upgrade --install monitoring prometheus-community/kube-prometheus-stack   -n observability --create-namespace   --set grafana.adminPassword="${GRAFANA_PASSWORD}"

Exposez Grafana : kubectl port-forward svc/monitoring-grafana -n observability 3000:80.

2. Logs et traces

  • Loki + Promtail pour logs : helm upgrade --install loki grafana/loki-stack -n observability.
  • Tempo : helm upgrade --install tempo grafana/tempo -n observability.
  • Déployez un collector OpenTelemetry : otel/opentelemetry-collector --config values.yaml.

Configuration Promtail :

clients:
  - url: http://loki.observability.svc.cluster.local:3100/loki/api/v1/push
scrape_configs:
  - job_name: kubernetes-pods
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_label_app]
        target_label: app

3. SLO et alerting

Définissez un SLO 99% sur l’API :

sum(rate(http_request_duration_seconds_bucket{le="0.3",app="webapp"}[5m]))
  /
sum(rate(http_request_duration_seconds_count{app="webapp"}[5m]))

Budget d’erreur sur 30 jours :

1 - sum_over_time(webapp_availability[30d]) / 30

Alertmanager : routez vers Slack/Teams, escalade on-call.

4. Dashboards

  • Importer un dashboard “Golden Signals” (latence, trafic, erreurs, saturation).
  • Tracer : envoyez les spans via OTLP → Tempo → Grafana Tempo plugin.
  • Logs : configurer Grafana Loki explorer, ajouter labels pertinents (app, env, version).

5. Troubleshooting & chaos

kubectl debug deploy/webapp -it --image=busybox --target=web
kubectl logs deploy/webapp --tail=100
litmusctl create chaos -f experiments/pod-delete.yaml

Runbook : docs/runbooks/webapp.md (symptômes, métriques à vérifier, actions).

6. Lab guidé

  1. Installer kube-prometheus-stack, Loki, Tempo dans le namespace observability.
  2. Créer un dashboard Grafana affichant temps de réponse, erreurs, CPU, latence 99e.
  3. Définir un SLO 99% / 30 jours, configurer une alerte (Alertmanager + Slack).
  4. Déployer un collector OpenTelemetry et instrumenter l’application Go (SDK Go).
  5. Effectuer un test chaos (suppression Pod) et documenter la détection (alertes + traces).

Challenge optionnel

  • Mettre en place un rapport hebdomadaire d’erreur (Grafana report/PowerBI).
  • Automatiser la création de tickets Jira via Alertmanager API.
  • Intégrer Synthetic monitoring (k6 Cloud/Checkly) et rapprocher des SLO.

Solution détaillée

  1. Métriques : kubectl get pods -n observability doit montrer Prometheus, Grafana, Alertmanager en Running. curl http://prometheus.../metrics accessible.
  2. Dashboards : capture d’écran du dashboard Golden Signals (latence 99e, error rate). Ajoutez le UID dans docs/dashboards.md.
  3. SLO : Prometheus alerte webapp_slo_breach se déclenche en injectant 5% d’erreurs pendant 10 minutes. Verifiez la notification Slack.
  4. Traces : Grafana Tempo montre la trace POST /checkout avec timing. Documentez la requête OTLP côté app.
  5. Chaos : LitmusChaos pod-delete -> Alertmanager notification + runbook exécuté. Journalisez les étapes dans docs/runbooks/webapp.md.

Ces éléments doivent être versionnés dans le dépôt (observability/) et la documentation pour audit SRE.

Pièges fréquents

  • Grafana exposé en clair : utilisez ingress + TLS + SSO (OAuth).
  • Prometheus sans retention configurée : contrôlez --storage.tsdb.retention.time.
  • Collector OTEL gourmand : limiter les batchs (exporter.otlp.metrics.period).

Ressources

Checklist

  • ✅ Stack observabilité installée et fonctionnelle.
  • ✅ SLO/alerts définis et testés.
  • ✅ Traces et logs corrélés dans Grafana.
  • ✅ Runbook documenté avec preuve de chaos test.