Thanos — długoterminowe przechowywanie metryk Prometheus w S3
Opublikowano: 10 kwietnia 2026 · Kategoria: VPS
Prometheus jest doskonały do zbierania i przechowywania metryk — ale domyślnie tylko przez 15 dni, bez HA i bez globalnego widoku wielu klastrów. Thanos rozwiązuje te problemy: dodaje nieograniczone przechowywanie w object storage (S3, MinIO, GCS), deduplikację danych z par HA i jeden endpoint zapytań dla całej infrastruktury.
Architektura Thanos — komponenty
| Komponent | Rola | Port (domyślny) |
|---|---|---|
| Sidecar | Upload bloków TSDB do S3, gRPC proxy do Prometheus | 10901 (gRPC), 10902 (HTTP) |
| Store Gateway | Serwuje dane z S3 przez gRPC (dla Query) | 10901 (gRPC), 10902 (HTTP) |
| Compactor | Deduplication, downsampling, compaction w S3 | 10902 (HTTP only) |
| Query (Querier) | Globalny endpoint PromQL — łączy Sidecar + Store | 10901 (gRPC), 10902 (HTTP/UI) |
| Query Frontend | Cache i split zapytań (opcjonalny) | 10902 (HTTP) |
| Ruler | Globalne recording rules i alerty | 10901, 10902 |
Konfiguracja — bucket S3/MinIO
Wszystkie komponenty Thanos korzystają z tego samego pliku konfiguracji bucket. Utwórz bucket.yaml:
# bucket.yaml — konfiguracja S3/MinIO type: S3 config: bucket: "thanos-metrics" endpoint: "minio.example.com:9000" # lub s3.amazonaws.com dla AWS access_key: "AKIAIOSFODNN7EXAMPLE" secret_key: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" insecure: true # false dla HTTPS / AWS S3
# Utwórz bucket w MinIO przez mc mc alias set myminio http://minio.example.com:9000 ACCESS_KEY SECRET_KEY mc mb myminio/thanos-metrics
Thanos Sidecar — obok Prometheus
Sidecar uruchamiasz obok Prometheusa. Prometheus MUSI mieć flagę --storage.tsdb.min-block-duration=2h i --storage.tsdb.max-block-duration=2h (bloki co 2h — Sidecar uploaduje kompletne bloki):
thanos sidecar \ --prometheus.url=http://localhost:9090 \ --tsdb.path=/var/lib/prometheus \ --objstore.config-file=/etc/thanos/bucket.yaml \ --grpc-address=0.0.0.0:10901 \ --http-address=0.0.0.0:10902
Thanos Store Gateway — dane historyczne z S3
thanos store \ --objstore.config-file=/etc/thanos/bucket.yaml \ --data-dir=/var/lib/thanos/store \ --grpc-address=0.0.0.0:10901 \ --http-address=0.0.0.0:10902 \ --index-cache-size=500MB \ --chunk-pool-size=2GB
Thanos Query — globalny endpoint PromQL
Query łączy wszystkie Sidecar i Store Gateway w jeden punkt zapytań. Flaga --query.replica-label wskazuje label używany do deduplikacji (np. replica — różne wartości tego labela w Prometheus HA pair):
thanos query \ --grpc-address=0.0.0.0:10901 \ --http-address=0.0.0.0:10902 \ --query.replica-label=replica \ --store=sidecar-1:10901 \ --store=sidecar-2:10901 \ --store=store-gateway:10901
Thanos Query ma wbudowane UI dostępne na porcie 10902 — identyczne z Prometheus UI. Możesz też dodać jako datasource w Grafanie (endpoint HTTP).
Thanos Compactor — deduplication i downsampling
thanos compact \ --objstore.config-file=/etc/thanos/bucket.yaml \ --data-dir=/var/lib/thanos/compact \ --http-address=0.0.0.0:10902 \ --retention.resolution-raw=30d \ --retention.resolution-5m=90d \ --retention.resolution-1h=365d \ --wait \ --wait-interval=15m
Compactor tworzy trzy poziomy rozdzielczości: raw (oryginalna rozdzielczość), 5m (1 punkt co 5 minut), 1h (1 punkt co godzinę). Stare dane są automatycznie downsamplowane — zapytania o dane sprzed roku są szybkie bo operują na blokach 1h zamiast 1-minutowych.
Thanos vs Grafana Mimir — kiedy co wybrać?
| Cecha | Thanos | Grafana Mimir |
|---|---|---|
| Architektura | Sidecars + istniejące Prometheus | Centralne write/read path (Cortex-like) |
| Retrofit | Łatwy (sidecar obok Prometheus) | Wymaga remote_write z Prometheus |
| Skalowanie | Dobre (dodajesz instancje) | Lepsze dla masowego ingestu |
| Złożoność | Średnia | Wysoka (więcej komponentów) |
| Koszt zasobów | Niższy przy <100 Prometheus | Efektywniejszy przy >1000 req/s |
| Kiedy wybrać | Istniejące Prometheus, <10 klastrów | Greenfield, duża skala, SaaS |