L'objectif de cette section est de mettre en place un système de monitoring et de logging pour surveiller l’état des applications et de l’infrastructure Kubernetes. Cela permet de détecter rapidement les anomalies et d’assurer la performance et la disponibilité des services.
Prometheus est utilisé pour récupérer les métriques des pods, des services et des nœuds Kubernetes.
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring --create-namespace
kubectl get pods -n monitoring kubectl get services -n monitoring
kubectl port-forward svc/prometheus-kube-prometheus-prometheus 9090 -n monitoring
Accès via le navigateur : http://localhost:9090
Exemple d’instrumentation d’une application Node.js avec prom-client :
const client = require('prom-client'); const collectDefaultMetrics = client.collectDefaultMetrics; collectDefaultMetrics(); const httpRequestDurationMicroseconds = new client.Histogram({ name: 'http_request_duration_seconds', help: 'Durée des requêtes HTTP', labelNames: ['method', 'route', 'status_code'], buckets: [0.1, 0.5, 1, 2, 5] });
Grafana est utilisé pour afficher les métriques collectées par Prometheus.
helm install grafana prometheus-community/grafana --namespace monitoring
kubectl port-forward svc/grafana 3000:80 -n monitoring
Connexion via http://localhost:3000 (identifiants par défaut : admin / prom-operator).
http://prometheus-kube-prometheus-prometheus.monitoring.svc:9090315 pour Kubernetes)Loki est une solution de gestion des logs qui fonctionne avec Prometheus et Grafana.
helm repo add grafana https://grafana.github.io/helm-charts helm repo update helm install loki grafana/loki-stack --namespace logging --create-namespace
apiVersion: v1 kind: ConfigMap metadata: name: fluent-bit-config namespace: logging data: fluent-bit.conf: | [SERVICE] Flush 5 Log_Level info [INPUT] Name tail Path /var/log/containers/*.log Tag kube.* [OUTPUT] Name loki Match * Url http://loki:3100/loki/api/v1/push
kubectl apply -f fluent-bit-config.yaml
http://loki.logging.svc:3100LogQL pour rechercher des logs :{kubernetes_namespace_name="default"} |= "error"
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: high-cpu-usage namespace: monitoring spec: groups: - name: cpu-alerts rules: - alert: HighCPUUsage expr: instance:node_cpu_utilization:avg5m > 0.8 for: 5m labels: severity: warning annotations: summary: "Utilisation CPU élevée" description: "L'instance {{ $labels.instance }} dépasse 80% d'utilisation CPU."
kubectl apply -f prometheus-alerts.yaml
Exemple de configuration pour envoyer des alertes sur Slack :
apiVersion: v1 kind: ConfigMap metadata: name: alertmanager-config namespace: monitoring data: alertmanager.yml: | route: receiver: slack receivers: - name: slack slack_configs: - channel: '#alerts' api_url: 'https://hooks.slack.com/services/TOKEN'
kubectl apply -f alertmanager-config.yaml
La mise en place de Prometheus, Grafana, Loki et Alertmanager permet une surveillance avancée de l’infrastructure et des applications. Grâce à ces outils, il est possible de détecter rapidement les incidents, optimiser les performances et recevoir des alertes en cas de problème critique.