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: 10GiServiceMonitor 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: /metricsAlertManager 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 / changememetrics-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