RousselTMLEARNING

Article · Thanos : de la découverte à l'expertise

Thanos Sidecar

1. Préparer Prometheus #

Les prérequis indispensables.

Réglages obligatoires #

  • Labels externes uniques par Prometheus (cluster, replica) : indispensables pour la déduplication et l'identification.
  • Compaction locale désactivée : --storage.tsdb.min-block-duration=2h et --storage.tsdb.max-block-duration=2h (le compactor Thanos s'en charge).
  • Rétention locale courte (quelques jours) : l'historique est dans l'objet.
  • API d'administration et lifecycle pour que le sidecar recharge la configuration.
# prometheus.yml
global:
  scrape_interval: 15s
  external_labels:
    cluster: prod-eu
    replica: A

scrape_configs:
  - job_name: prometheus
    static_configs: [{ targets: ["localhost:9090"] }]
  - job_name: node
    static_configs: [{ targets: ["node-exporter:9100"] }]
prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/prometheus \
  --storage.tsdb.min-block-duration=2h \
  --storage.tsdb.max-block-duration=2h \
  --storage.tsdb.retention.time=2d \
  --web.enable-lifecycle --web.enable-admin-api
Erreur Courante : Ne laissez jamais deux Prometheus avec exactement les mêmes external_labels en dehors de replica : Thanos ne pourrait plus distinguer les sources et dupliquerait ou fusionnerait mal les blocs.

2. Lancer le sidecar #

Avec son fichier de stockage objet.

Configuration et commande #

Rôle du Thanos Sidecar
Les données récentes sont servies par le sidecar, les anciennes par le Store Gateway.
# bucket.yml (stockage objet partagé par tous les composants Thanos)
type: S3
config:
  bucket: thanos
  endpoint: minio:9000
  access_key: minio
  secret_key: minio123
  insecure: true
thanos sidecar \
  --tsdb.path=/prometheus \
  --prometheus.url=http://localhost:9090 \
  --objstore.config-file=/etc/thanos/bucket.yml \
  --grpc-address=0.0.0.0:10901 \
  --http-address=0.0.0.0:10902

3. Stack Docker Compose complète #

Prometheus, sidecar et MinIO.

docker-compose.yml #

services:
  minio:
    image: quay.io/minio/minio
    command: server /data --console-address ":9001"
    environment: { MINIO_ROOT_USER: minio, MINIO_ROOT_PASSWORD: minio123 }
    ports: ["9000:9000", "9001:9001"]
  minio-init:
    image: quay.io/minio/mc
    depends_on: [minio]
    entrypoint: ["sh", "-c", "sleep 5 && mc alias set l http://minio:9000 minio minio123 && mc mb -p l/thanos"]

  prometheus:
    image: prom/prometheus:latest
    user: root
    command:
      - --config.file=/etc/prometheus/prometheus.yml
      - --storage.tsdb.path=/prometheus
      - --storage.tsdb.min-block-duration=2h
      - --storage.tsdb.max-block-duration=2h
      - --web.enable-lifecycle
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prom-data:/prometheus
    ports: ["9090:9090"]

  sidecar:
    image: quay.io/thanos/thanos:latest
    command:
      - sidecar
      - --tsdb.path=/prometheus
      - --prometheus.url=http://prometheus:9090
      - --objstore.config-file=/etc/thanos/bucket.yml
      - --grpc-address=0.0.0.0:10901
      - --http-address=0.0.0.0:10902
    volumes:
      - ./bucket.yml:/etc/thanos/bucket.yml
      - prom-data:/prometheus
    depends_on: [prometheus, minio]

volumes: { prom-data: {} }

4. Vérifier #

Le bloc est-il arrivé dans le bucket ?

Contrôles #

Logs du sidecar Thanos
Le premier téléversement a lieu après la fermeture du premier bloc de 2 heures.
# Attendre ~2 h (ou forcer un bloc : curl -X POST localhost:9090/api/v1/admin/tsdb/snapshot)
docker compose run --rm --entrypoint sh quay.io/minio/mc -c "mc alias set l http://minio:9000 minio minio123 && mc ls l/thanos/"

thanos tools bucket ls --objstore.config-file=bucket.yml
thanos tools bucket inspect --objstore.config-file=bucket.yml

curl -s localhost:10902/metrics | grep -E 'thanos_shipper_uploads_total|thanos_sidecar_prometheus_up'
Bonne Pratique : Si thanos_shipper_uploads_total reste à 0, vérifiez d'abord que la compaction locale est bien désactivée et que le sidecar voit le même répertoire /prometheus que Prometheus.

📄 Thanos Sidecar : accoler Thanos à Prometheus et téléverser vers le stockage objet →

Mon suivi

  • ⏱ Durée estimée : ≈ 13 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

💬 Questions sur cette leçon

Aucune question pour l'instant : soyez le premier à demander de l'aide ou à partager votre configuration.

Poser une question sur cette leçon →

Articles recommandés

Bonnes pratiques Thanos : architecture, stockage, requêtes et exploitation

Bonnes pratiques Thanos : adopter les composants progressivement, labels externes, objstore, comp...

Thanos : étendre Prometheus (haute disponibilité, vue globale et rétention longue)

Comprendre pourquoi et comment utiliser Thanos : limites de Prometheus, composants (Sidecar, Quer...

Déployer Thanos sur Kubernetes (kube-prometheus-stack, Helm et Operator)

Installer Thanos sur Kubernetes : sidecar via kube-prometheus-stack, secret objstore, Bitnami/kub...

Thanos, Grafana Mimir ou VictoriaMetrics : quel stockage long terme pour Prometheus ?

Comparatif détaillé de trois solutions de stockage long terme pour Prometheus : architecture, sto...

Thanos Receive : ingérer du remote write et gérer le multi-tenant

Utiliser Thanos Receive : mode push avec remote write, hashring, réplication, multi-tenancy, conf...

Thanos Query et Query Frontend : une vue globale et dédupliquée

Configurer Thanos Query : endpoints StoreAPI, déduplication par replica label, partial response, ...

Thanos Ruler : règles et alertes sur la vue globale

Évaluer des règles d'enregistrement et d'alerte sur l'ensemble des clusters avec Thanos Ruler : c...

Thanos Store Gateway et Compactor : historique, downsampling et rétention

Servir l'historique avec le Store Gateway et optimiser le stockage avec le Compactor : compaction...

Tempo : stockage objet, blocs, compactor et déploiement distribué

Configurer le stockage de Tempo : S3/GCS/Azure, format Parquet vParquet4, WAL, compactor et réten...

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !