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.
Table of Contents
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é
- Installer kube-prometheus-stack, Loki, Tempo dans le namespace
observability. - Créer un dashboard Grafana affichant temps de réponse, erreurs, CPU, latence 99e.
- Définir un SLO 99% / 30 jours, configurer une alerte (Alertmanager + Slack).
- Déployer un collector OpenTelemetry et instrumenter l’application Go (SDK Go).
- 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
- Métriques :
kubectl get pods -n observabilitydoit montrer Prometheus, Grafana, Alertmanager en Running.curl http://prometheus.../metricsaccessible. - Dashboards : capture d’écran du dashboard Golden Signals (latence 99e, error rate). Ajoutez le
UIDdansdocs/dashboards.md. - SLO : Prometheus alerte
webapp_slo_breachse déclenche en injectant 5% d’erreurs pendant 10 minutes. Verifiez la notification Slack. - Traces : Grafana Tempo montre la trace
POST /checkoutavec timing. Documentez la requête OTLP côté app. - 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.


