← Retour au blog

Piloter les coûts de la chaîne data

Lucian BLETAN

Les factures de services cloud pour la donnée peuvent rapidement devenir incontrôlables. Un stockage qui gonfle sans nettoyage, des requêtes qui scannent des téraoctets pour rien, des jobs qui tournent en boucle… Le pilotage des coûts, ou FinOps, n’est pas une simple chasse aux dépenses. C’est une discipline qui vise à maximiser la valeur de chaque euro investi dans la donnée en apportant de la visibilité, de la responsabilisation et des garde-fous automatisés.

2. Optimiser les mesures

Problème coûts élevés & opaques

1: Mesurer & allouer (via les tags)

Optimiser le calcul (requêtes, partitions)

Optimiser le stockage (cycle de vie, nettoyage)

Coûts maîtrisés

prérequis

  • Étiquettes de coûts (Tags): Avoir une politique de tagging obligatoire pour chaque ressource (ex: team, project, env).
  • Accès aux données de facturation: Pouvoir requêter les rapports de coûts détaillés fournis par votre fournisseur cloud (ex: via BigQuery, AWS CUR).
  • Budget et alertes: Avoir défini des budgets par équipe ou projet et configuré des alertes en cas de dépassement.

idées clefs

  • Tagging systématique: Aucune ressource ne doit être créée sans les tags appropriés. C’est la base de toute analyse et responsabilisation.
  • Garde-fous automatiques: Mettre en place des quotas sur les requêtes, des timeouts sur les jobs et des alertes sur les seuils de budget.
  • Matrice coût vs. valeur: Analyser régulièrement les assets data les plus coûteux et les confronter à la valeur métier qu’ils apportent pour prioriser les efforts d’optimisation.
  • Revues mensuelles: Organiser un rituel court chaque mois avec les propriétaires de domaines pour revoir les dépenses, les usages et identifier les anomalies.

pas à pas

étape 1: étiqueter et mesurer

La première étape est de gagner en visibilité. En joignant les données de facturation avec les métadonnées de vos ressources (grâce aux tags), vous pouvez allouer chaque euro de dépense à une équipe et un projet.

-- Requête pour voir la répartition des coûts par équipe sur les 30 derniers jours
SELECT
    DATE(usage_start_time) as jour,
    labels.team as team, -- Utilisation du tag 'team'
    ROUND(SUM(cost), 2) as cout_eur
FROM
    `votre_projet.billing.gcp_billing_export_v1_xxxx`
WHERE
    usage_start_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY 1, 2
ORDER BY 1 DESC, 2;

étape 2: identifier et réduire les scans coûteux

Le coût du calcul (“compute”) est souvent le plus important. Il est directement lié à la quantité de données lues (“scanned”) par vos requêtes. Traquer les requêtes les plus lourdes est crucial.

-- Requête pour trouver les utilisateurs lançant des requêtes longues et coûteuses
SELECT
    user_email,
    COUNT(*) AS nombre_requetes_lourdes,
    ROUND(SUM(total_bytes_billed) / 1024 / 1024 / 1024, 2) AS total_gb_factures
FROM
    `region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT`
WHERE
    creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
    AND total_bytes_billed > (100 * 1024 * 1024 * 1024) -- Requêtes scannant > 100 Go
GROUP BY 1
ORDER BY total_gb_factures DESC;

étape 3: automatiser les alertes de budget

N’attendez pas la fin du mois pour découvrir une explosion des coûts. Des scripts simples peuvent interroger les API de facturation et envoyer des alertes sur Slack ou par email dès qu’un seuil est atteint.

#!/bin/bash
# Script conceptuel pour une alerte de budget journalier

BUDGET_THRESHOLD=500
PROJECT_ID="votre-projet"

# Commande gcloud pour obtenir le coût d'hier (simplifié)
YESTERDAY_COST=$(gcloud billing projects describe $PROJECT_ID --format="value(cost.yesterday)")

if (( $(echo "$YESTERDAY_COST > $BUDGET_THRESHOLD" | bc -l) )); then
  echo "ALERTE: Le coût d'hier (${YESTERDAY_COST}€) a dépassé le seuil de ${BUDGET_THRESHOLD}€."
  # Envoyer une notification sur Slack/email...
fi

exemples concrets

cas 1: Le dashboard qui rafraîchit tout, tout le temps

Un dashboard populaire est configuré pour se rafraîchir toutes les 5 minutes en attaquant directement la table transactionnelle principale (plusieurs To).

  • Problème: Des centaines de requêtes coûteuses chaque jour pour afficher des données qui ne changent pas si souvent.
  • Solution: Créer une vue matérialisée ou une table agrégée mise à jour toutes les heures, et pointer le dashboard sur cette table. Le coût est divisé par 100, et le dashboard est plus rapide.

cas 2: Le stockage “au cas où”

Une équipe stocke des logs bruts non compressés depuis 5 ans dans un bucket de stockage “chaud” (haute performance et coût élevé).

  • Problème: 99% de ces données ne sont jamais lues mais coûtent cher chaque mois.
  • Solution: Mettre en place une politique de cycle de vie (lifecycle policy) sur le bucket : après 90 jours, les données sont automatiquement déplacées vers un stockage “froid” (type Archive), 10x moins cher.

erreurs courantes et solutions

  • Symptôme: La facture cloud est une “boîte noire”, personne ne sait qui dépense quoi.

    • Cause: Pas de tags sur les ressources.
    • Correctif: Rendre le tagging obligatoire à la création de toute ressource via des politiques d’infrastructure-as-code (Terraform, etc.).
  • Symptôme: Les requêtes des analystes sont de plus en plus lentes et la facture de calcul explose.

    • Cause: Requêtes avec des SELECT * sur des tables non partitionnées.
    • Correctif: Former les équipes aux bonnes pratiques SQL. Mettre en place des partitions sur les dates et imposer un filtre sur la partition dans toutes les requêtes.
  • Symptôme: Des coûts de calcul apparaissent la nuit et le week-end sans raison apparente.

    • Cause: Des jobs ou des environnements de test qui ne sont jamais arrêtés.
    • Correctif: Mettre en place un calendrier des jobs connus et des scripts qui arrêtent automatiquement les ressources hors des heures de travail.

faq

  • Le FinOps, c’est juste le rôle de l’équipe finance ? Non. C’est une responsabilité partagée. Les équipes Finance et Platform Engineering fournissent les outils de mesure et les garde-fous, mais ce sont les équipes qui développent (data engineers, analysts) qui sont les mieux placées pour optimiser les ressources qu’elles utilisent au quotidien.

  • Faut-il toujours chercher à réduire les coûts ? Non, l’objectif est de maximiser la valeur. Si un dashboard coûte 1000€ par mois mais permet de prendre des décisions qui en rapportent 100 000€, c’est un excellent investissement. Le FinOps aide à identifier les dépenses à faible valeur pour pouvoir réallouer le budget sur ce qui compte vraiment.