Масштабований моніторинг через Thanos та Prometheus

Коли метрики розосереджені між багатьма інстансами Prometheus, а зберігання їх довше кількох місяців стає дорогим, втрачається єдина точка контролю. Ми впроваджуємо Thanos, який об'єднує дані в global view і переносить довгострокове зберігання в об'єктне сховище, зберігаючи звичний PromQL. Наша команда реалізує проєкт під ключ — від аудиту до підтримки, забезпечуючи надійне та масштабоване рішення.
Часті запитання

Ми часто бачимо ситуацію: кілька інстансів Prometheus збирають метрики з різних кластерів, дата-центрів або хмарних регіонів. Немає єдиної точки, де можна виконати запит по всіх даних одразу. А retention в Prometheus обмежений локальним диском — зберігати метрики довше пари місяців стає дорого та неефективно. При цьому навантаження може досягати 1 млн метрик на секунду, і кожен інстанс Prometheus зберігає дані локально, що призводить до дублювання та збільшення витрат.

Thanos вирішує обидві ці проблеми. Він забезпечує єдиний global view поверх множини Prometheus та переносить довгострокове зберігання метрик в об'єктне сховище (S3, GCS, Azure Blob). При цьому Thanos не замінює Prometheus, а доповнює його, зберігаючи звичний PromQL та сумісність з Grafana. На практиці це дозволяє скоротити витрати на інфраструктуру до 40% за рахунок оптимізації зберігання та downsampling.

Ми з командою впровадили Thanos на десятках проектів, від стартапів до великих enterprise-інсталяцій з сотнями тисяч метрик на секунду. Нижче — практичний розбір компонентів, типові помилки та процес впровадження.

Архітектура Thanos: компоненти

Thanos — набір мікросервісів, кожен зі своєю зоною відповідальності. Мінімальне встановлення включає чотири основні компоненти.

Компонент Роль Розгортання
Sidecar Вивантаження завершених блоків у сховище + gRPC для свіжих даних Sidecar-контейнер у поді з Prometheus
Store Gateway Читання історичних даних з об'єктного сховища, кешування індексів Окремий StatefulSet
Querier Прийом PromQL-запитів, об'єднання відповідей Sidecar + Store, дедуплікація Окремий Deployment (можна з HPA)
Compactor Downsampling блоків (5m/1h), застосування retention policy Фоновий Job або CronJob

Порівняння зберігання: локальне Prometheus vs Thanos Object Storage

Параметр Prometheus (локальний) Thanos (object storage)
Retention raw ~15 днів (типово) 30+ днів
Витрати на зберігання Високі (SSD) Низькі (S3/об'єктне)
Downsampling Немає Так (5m, 1h)
Глобальний запит Немає Так (Querier)

Чому Thanos, а не Prometheus самостійно?

Prometheus ефективний для одного кластера або групи серверів. Як тільки з'являється другий Prometheus — для іншого регіону, проекту або ізоляції tenant'ів — виникає проблема «розрізнених скелець». Вам доводиться перемикатися між datasources в Grafana або писати складні проксі. Thanos об'єднує всі джерела під єдиний Query endpoint, а глобальний retention налаштовується один раз для всіх даних. Наші клієнти економлять до 40% на вартості зберігання метрик за рахунок downsampling та tiered retention.

Як уникнути дублювання даних в Thanos?

Якщо Prometheus запущено в HA (два інстанси з однаковим навантаженням), Thanos Querier буде бачити дубльовані ряди. Дедуплікація вмикається флагом --query.replica-label=prometheus_replica. Але умова: обидва Prometheus повинні мати однакові всі зовнішні labels, крім label-репліки. Типова помилка — різні значення cluster або env. В результаті Querier вважає їх різними source'ами і не дедуплікує — на графіках ви побачите подвоєння значень.

Приклад коректної конфігурації:

---
global:
  external_labels:
    cluster: production-eu
    env: production
    prometheus_replica: replica-0 # для другого інстансу replica-1

Ми рекомендуємо для кожного інстансу Prometheus заздалегідь узгодити схему external_labels та тестувати дедуплікацію на стейджингу.

Чому Store Gateway може бути повільним?

Store Gateway не кешує самі метрики, лише індекси. Без кешування запит до даних за місяць буде повільним (до 10 секунд). Оптимальне налаштування: --index-cache-size=512MB та встановлення Redis або Memcached як shared cache. Це знижує затримку в два-три рази.

Bucket config з retention для downsampled даних:

---
type: S3
config:
  bucket: metrics-thanos-prod
  endpoint: s3.eu-west-1.amazonaws.com
  retention:
    resolution_raw: 30d
    resolution_5m: 90d
    resolution_1h: 365d
---

Raw дані (15-секундні) зберігаються 30 днів — це дорого. Downsampled до 5-хвилинного та годинного розрізнення — довше та дешевше. Запити за останній квартал працюють з 5m, за рік — з 1h.

Як Thanos знижує вартість зберігання?

Thanos використовує downsampling: рідко запитувані старі дані зберігаються в агрегованому вигляді (5-хвилинне або годинне розрізнення). Це зменшує обсяг сховища в 10–20 разів порівняно з raw-даними. Наприклад, за рік зберігання raw-метрик зайняло б ~10 ТБ, а з downsampling — 500 ГБ. Плюс tiered retention: raw — 30 днів, 5m — 90 днів, 1h — 365 днів. Таким чином, 70% даних зберігається в дешевому об'єктному сховищі, що дає економію до 40%. Для масштабування Prometheus Thanos незамінний: він дозволяє об'єднати метрики з різних кластерів Kubernetes в єдине сховище, забезпечуючи моніторинг Kubernetes на десяті частки секунди.

Thanos Ruler: alerting на історичних даних

Thanos Ruler виконує Prometheus recording та alerting rules, запитуючи дані через Querier. Це дозволяє писати крос-кластерні правила, які недоступні в звичайному Prometheus:

---
groups:
  - name: cross-cluster.rules
    rules:
      - alert: ClusterHighMemoryUsage
        expr: |
          avg by (cluster) ( node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes ) < 0.15
        for: 10m

Такий алерт спрацьовує, коли середня утилізація пам'яті у всьому кластері падає нижче 15%. В Prometheus для цього довелося б запускати окремий запит до кожного інстансу.

Процес впровадження: 5 етапів
  1. Аудит — інвентаризація всіх інстансів Prometheus, схеми labels, поточного retention.
  2. Проектування — вибір об'єктного сховища, схема external_labels, план retention.
  3. Розгортання Sidecar — встановлення Thanos Sidecar поруч з кожним Prometheus (Helm chart або маніфести).
  4. Налаштування сховища — створення бакету, конфігурація Store Gateway та Querier.
  5. Компактинг та моніторинг — запуск Compactor, налаштування retention у сховищі, перенесення Grafana datasources на Querier.

На кожному етапі ми проводимо тестування: порівнюємо результати запитів Prometheus vs Thanos Querier — вони повинні збігатися для свіжих даних.

Що входить в роботу

  • Документація по розгорнутій архітектурі.
  • Доступи до Thanos Querier для всіх команд.
  • Навчання інженерів роботі з Thanos (базові запити, типові алерти).
  • Підтримка на етапі стабілізації (2 тижні після впровадження).

Наші компетенції та гарантії

Ми — команда DevOps-інженерів з 10+ роками досвіду, сертифіковані по Kubernetes та AWS. Реалізували понад 50 проектів з моніторингу на Prometheus/Thanos, включаючи системи з >1 млн метрик на секунду. Гарантуємо, що продуктивність запитів не погіршиться, а retention стане керованим.

Замовте аудит моніторингу — це займе 1 годину. Зв'яжіться з нами, і ми розробимо план впровадження під вашу інфраструктуру. Отримайте консультацію з моніторингу інфраструктури — наші експерти допоможуть обрати оптимальну архітектуру.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142