1. Le stockage objet #
Configurer S3 ou MinIO.
storage #
storage:
trace:
backend: s3
s3:
bucket: tempo-traces
endpoint: minio:9000
access_key: ${MINIO_USER}
secret_key: ${MINIO_PASSWORD}
insecure: true
wal:
path: /var/tempo/wal
block:
version: vParquet4
pool:
max_workers: 100
queue_depth: 10000
cache: memcached
memcached:
host: memcached
service: memcached-client
consistent_hash: truedocker run -d --name minio -p 9000:9000 -p 9001:9001 -e MINIO_ROOT_USER=minio -e MINIO_ROOT_PASSWORD=minio123 \
quay.io/minio/minio server /data --console-address ":9001"
docker run --rm --network host --entrypoint sh quay.io/minio/mc -c "mc alias set l http://localhost:9000 minio minio123 && mc mb l/tempo-traces"
tempo -config.file=tempo.yaml -config.expand-env=true2. Rétention et compaction #
Maîtriser la durée et le volume.
Compactor #
compactor:
compaction:
block_retention: 336h # 14 jours
compacted_block_retention: 1h
compaction_window: 1h
max_compaction_objects: 6000000
ring:
kvstore: { store: memberlist }# Outils de diagnostic des blocs
tempo-cli list blocks single-tenant --backend s3 --bucket tempo-traces --s3-endpoint minio:9000 --s3-insecure
tempo-cli query api <HOST> <TRACE_ID> # récupérer une trace par l'API
curl -s http://localhost:3200/metrics | grep tempodb_blocklist_lengthErreur Courante : Sans compactor, le nombre de petits blocs explose et les recherches ralentissent. Une seule instance de compactor suffit généralement par tenant.
3. Passer à l'échelle #
tempo-distributed.
Helm distribué #
# values-prod.yaml (extrait)
traces:
otlp: { grpc: { enabled: true }, http: { enabled: true } }
storage:
trace:
backend: s3
s3: { bucket: tempo-traces, endpoint: s3.eu-west-3.amazonaws.com, region: eu-west-3 }
ingester: { replicas: 3, persistence: { enabled: true, size: 20Gi } }
distributor: { replicas: 3 }
querier: { replicas: 3 }
queryFrontend: { replicas: 2 }
compactor: { replicas: 1 }
metricsGenerator: { enabled: true }
global_overrides:
defaults:
ingestion: { rate_limit_bytes: 20000000, burst_size_bytes: 30000000 }helm upgrade --install tempo grafana/tempo-distributed -n tracing --create-namespace -f values-prod.yaml
kubectl -n tracing get pods -o wide
kubectl -n tracing top podsDimensionnement #
| Composant | Ressource critique | Règle empirique |
|---|---|---|
| Ingester | Mémoire et disque WAL | Autant de réplicas que nécessaire pour tenir le débit ; 3 pour la réplication |
| Distributor | CPU | Stateless : scale horizontal selon le débit |
| Querier | CPU et mémoire | Augmenter pour les recherches larges (TraceQL) |
| Compactor | CPU, disque temporaire | Une instance ; surveiller le retard de compaction |
