Мониторинг инфраструктуры через 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
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142