Retour au blog
DevOps Kubernetes Observability Prometheus Loki Grafana Alerting

Les Yeux sur le Cluster : Observabilité à 0€ (Prometheus, Loki, Grafana)

Par Momentum Team

Les Yeux sur le Cluster : Observabilité à 0€ (Prometheus, Loki, Grafana)

Le code sans visibilité, c'est de la conduite de nuit sans phares. Vous pouvez avoir le meilleur cluster K3s du monde (voir l'article 01), si vous ne savez pas ce qui s'y passe, vous êtes en danger.

Dans l'écosystème Cloud, il y a un ogre : Datadog. C'est un outil magnifique, complet, et incroyablement cher. Pour une startup ou un projet perso, la facture d'observabilité peut vite dépasser celle de l'infrastructure elle-même.

Chez Momentum, on refuse de payer pour voir. On veut le contrôle total, la rétention illimitée, et un coût de licence de 0€.

Voici comment on a déployé la stack PLG (Prometheus, Loki, Grafana) pour surveiller notre infrastructure comme des pros.

Pourquoi pas Datadog ? (Le coût de la paresse)

Datadog facture par hôte (~15/mois),parGodelogsingeˊreˊs( 0.10/mois), par Go de logs ingérés (~0.10), et par métrique custom. Imaginez notre cluster de 3 nœuds.

  • 3 hosts : 45$
  • Logs (Verbeux) : 50$
  • APM/Traces : 30$
  • Total : 125$/mois.

C'est plus du double du prix de notre cluster (50€) ! C'est inacceptable. L'alternative Open Source demande un peu d'huile de coude, mais le ROI est infini.

La Stack PLG : Le Trio Gagnant

Oubliez la stack ELK (Elasticsearch, Logstash, Kibana). C'est lourd (Java), gourmand en RAM, et complexe à gérer. En 2026, la norme pour Kubernetes, c'est PLG :

  1. Prometheus (Metrics) : Le standard absolu. Il "scrape" (aspire) les métriques exposées par vos applications et vos nœuds. CPU, RAM, Latence HTTP, tout y passe.
  2. Loki (Logs) : Le "Prometheus pour les logs". Contrairement à Elasticsearch qui indexe tout le texte (lourd), Loki n'indexe que les métadonnées (labels). C'est ultra-léger et rapide.
  3. Grafana (Visualisation) : Le tableau de bord unique pour tout voir.

Partie 1 : L'Installation (Helm is King)

On ne réinvente pas la roue. On utilise le chart Helm communautaire kube-prometheus-stack. C'est un package tout-en-un qui installe Prometheus, AlertManager, Grafana, et les "Exporters" (Node Exporter pour le hardware, Kube State Metrics pour K8s).

Voici notre values.yaml épuré pour la production :

# prometheus-values.yaml
grafana:
  adminPassword: "CHANGE_ME_PLEASE"
  persistence:
    enabled: true
    size: 10Gi
  ingress:
    enabled: true
    hosts:
      - grafana.momentum-coach.com

prometheus:
  prometheusSpec:
    retention: 15d
    storageSpec:
      volumeClaimTemplate:
        spec:
          accessModes: ["ReadWriteOnce"]
          resources:
            requests:
              storage: 50Gi

alertmanager:
  enabled: true

Une commande et tout est là :

helm install monitoring prometheus-community/kube-prometheus-stack -f prometheus-values.yaml -n monitoring

Partie 2 : Les Logs avec Loki et S3 (L'astuce stockage)

Stocker des logs sur le disque local de vos serveurs (NVMe), c'est du gâchis. Ça coûte cher et c'est difficile à scaler. L'architecture moderne de Loki permet de stocker les "chunks" de logs directement dans un Object Storage S3 (AWS S3, Scaleway Object Storage, MinIO).

Le coût ? Dérisoire. Quelques centimes par mois pour des gigaoctets de logs.

Voici la configuration Loki pour utiliser S3 :

# loki-values.yaml
loki:
  auth_enabled: false
  storage:
    bucketNames:
      chunks: momentum-loki-chunks
      ruler: momentum-loki-ruler
      admin: momentum-loki-admin
    type: s3
    s3:
      endpoint: s3.fr-par.scw.cloud # Exemple Scaleway
      region: fr-par
      secretAccessKey: "${S3_SECRET_KEY}"
      accessKeyId: "${S3_ACCESS_KEY}"

Côté application, on déploie Promtail (un agent léger) sur chaque nœud via un DaemonSet. Il lit /var/log/containers/*.log, attache les labels Kubernetes (pod name, namespace) et envoie tout à Loki.

Partie 3 : Alerting (Dormir tranquille)

Avoir des graphiques, c'est joli. Être réveillé quand ça brûle, c'est mieux. Prometheus utilise AlertManager.

Nous avons défini des règles critiques. Si un nœud est sous pression ou qu'un Pod redémarre en boucle, on veut le savoir immédiatement.

Exemple de PrometheusRule :

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: momentum-critical-alerts
  namespace: monitoring
  labels:
    release: monitoring
spec:
  groups:
  - name: kubernetes-apps
    rules:
    - alert: PodCrashLooping
      expr: rate(kube_pod_container_status_restarts_total[15m]) * 60 * 5 > 0
      for: 5m
      labels:
        severity: critical
      annotations:
        summary: "Pod {{ $labels.namespace }}/{{ $labels.pod }} is crash looping."
    
    - alert: HighNodeCPU
      expr: instance:node_cpu:rate:sum > 0.9
      for: 10m
      labels:
        severity: warning
      annotations:
        summary: "Node {{ $labels.node }} CPU usage is above 90%"

La Destination : Discord

Pas besoin de PagerDuty (payant). Nous sommes une équipe agile, nous vivons sur Discord. AlertManager peut envoyer les alertes directement via un Webhook Discord.

# alertmanager-config.yaml
global:
  resolve_timeout: 5m

route:
  receiver: 'discord-notifications'
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h

receivers:
- name: 'discord-notifications'
  discord_configs:
  - webhook_url: 'https://discord.com/api/webhooks/...'
    send_resolved: true

Résultat : Une notification propre dans notre channel #devops-alerts dès qu'un problème survient (et une autre quand il est résolu ✅).

Conclusion : La Maîtrise

Avec cette stack, nous avons :

  1. Visibilité totale : Metrics système et applicatives.
  2. Rétention longue : Logs stockés sur S3 pour une bouchée de pain.
  3. Réactivité : Alertes en temps réel sur Discord.
  4. Coût : 0€ de licence. Juste un peu de CPU/RAM (optimisé) et du stockage S3.

C'est ça, l'esprit Momentum. On ne loue pas la compétence, on la construit.

Dans le prochain article, on parlera de CI/CD : Comment passer du code sur mon laptop à la production en un git push, sans interruption de service.