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).
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_replicaErreur 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.
