RousselTMLEARNING

Observabilité

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, configuration Prometheus et comparaison avec le sidecar.

1. Quand utiliser Receive ? #

Push plutôt que pull.

Cas d'usage #

  • Clusters isolés ou derrière un pare-feu : impossible pour Thanos d'atteindre chaque sidecar.
  • Prometheus en mode agent (--agent) sans stockage local.
  • Multi-tenant : séparer les données de plusieurs équipes ou clients.
  • Intégration avec des sources remote write (OpenTelemetry Collector, Grafana Alloy).
Architecture avec Thanos Receive
La réplication garantit la disponibilité malgré la perte d'un nœud.

2. Déployer Receive #

Un hashring de trois nœuds.

Commande et hashring #

thanos receive \
  --grpc-address=0.0.0.0:10901 \
  --http-address=0.0.0.0:10902 \
  --remote-write.address=0.0.0.0:19291 \
  --tsdb.path=/var/thanos/receive \
  --tsdb.retention=6h \
  --label='receive_replica="0"' \
  --label='receive="true"' \
  --receive.local-endpoint=receive-0:10901 \
  --receive.hashrings-file=/etc/thanos/hashrings.json \
  --receive.replication-factor=2 \
  --objstore.config-file=/etc/thanos/bucket.yml
// hashrings.json
[
  {
    "hashring": "default",
    "tenants": [],
    "endpoints": ["receive-0:10901", "receive-1:10901", "receive-2:10901"]
  }
]

3. Envoyer depuis Prometheus et Alloy #

Remote write et tenants.

Côté producteurs #

# prometheus.yml
remote_write:
  - url: http://receive-0:19291/api/v1/receive
    headers:
      THANOS-TENANT: equipe-a
    queue_config: { max_samples_per_send: 5000, capacity: 20000 }
global:
  external_labels: { cluster: prod-eu }
// Grafana Alloy
prometheus.remote_write "thanos" {
  endpoint {
    url     = "http://receive-0:19291/api/v1/receive"
    headers = { "THANOS-TENANT" = "equipe-a" }
  }
}
# Query doit connaître les Receive
thanos query --endpoint=receive-0:10901 --endpoint=receive-1:10901 --endpoint=receive-2:10901 --query.replica-label=receive_replica
Erreur Courante : Le hashring répartit les séries par hash : toute modification de la liste d'endpoints déplace des séries. Faites évoluer le hashring progressivement et vérifiez la réplication avant de retirer un nœud.

Pour aller plus loin