Долгое хранение метрик: Thanos, Mimir, VictoriaMetrics

↑ Этап 7 · Observability и эксплуатация

Желательно~5 мин чтенияУровень: senior

Зачем это на собесе

Один Prometheus хранит данные на локальном диске и рассчитан на недели. Вопросы senior-уровня: «Как хранить метрики год?», «Как объединить несколько кластеров?», «Что такое remote_write?» Ответ включает сравнение Thanos, Mimir и VictoriaMetrics.

Подтемы

  • Ограничения одного Prometheus
  • remote_write и объектное хранилище
  • Thanos, Mimir, VictoriaMetrics
  • Downsampling и retention
  • Как выбрать

Объяснение

Ограничения одного Prometheus

  • Локальное хранилище на одном узле: нет репликации и долгого хранения (по умолчанию 15 дней).
  • Масштабируется вертикально; запросы к данным нескольких кластеров приходится выполнять по отдельности.
  • Потеря диска означает потерю истории.

Два пути решения

flowchart TD
    P["Prometheus<br/>(сбор метрик, краткий срок)"] --> A{"Способ"}
    A -- "remote_write:<br/>отправка всех метрик" --> R["Внешнее хранилище:<br/>VictoriaMetrics / Mimir / Thanos Receive"]
    A -- "Sidecar выгружает блоки" --> O[("Объектное хранилище S3")]
    O --> T["Thanos Store Gateway"]
    R --> Q["Единый запрос (Grafana)"]
    T --> Q
  • remote_write — Prometheus по протоколу отправляет копию метрик в удалённое хранилище.
  • Выгрузка блоков в S3-совместимое хранилище (Thanos Sidecar) с последующим запросом через общий слой.

Сравнение

РешениеАрхитектураОсобенности
Thanosкомпоненты рядом с Prometheus: Sidecar, Store Gateway, Querier, Compactorдешёвое хранение в S3, глобальный запрос, downsampling, лицензия Apache 2.0
Grafana Mimirгоризонтально масштабируемое хранилище, принимает remote_writeмультитенантность, высокая масштабируемость, лицензия AGPLv3
VictoriaMetricsодиночный узел или кластерная версияпростая эксплуатация, высокая степень сжатия, PromQL-совместимый язык MetricsQL

Объектное хранилище для Thanos и Mimir может быть любым S3-совместимым, см. аналоги MinIO.

Retention и downsampling

Retention ограничивает срок хранения. Downsampling хранит старые данные с меньшим разрешением (например, 5-минутные и часовые точки вместо 15-секундных): экономит место и ускоряет запросы по длинным периодам. Thanos Compactor делает downsampling автоматически.

Как выбрать

СитуацияРешение
Один-два Prometheus, нужно дольше хранить и проще эксплуатироватьVictoriaMetrics (одиночный узел)
Много кластеров, нужен глобальный вид и дешёвое хранение в S3Thanos
Мультитенантность и очень большой масштабMimir или кластерная VictoriaMetrics
Метрик малоPrometheus с увеличенным retention и бэкапом диска

Примеры

Prometheus: локальное хранение и remote_write

# prometheus.yml
global:
  scrape_interval: 15s
remote_write:
  - url: http://victoriametrics:8428/api/v1/write
# срок хранения локально (флаг запуска Prometheus)
prometheus --storage.tsdb.retention.time=15d --config.file=prometheus.yml

Запуск VictoriaMetrics с годом хранения

docker run -d --name vm -p 8428:8428 -v vmdata:/victoria-metrics-data \
  victoriametrics/victoria-metrics -retentionPeriod=12

Значение 12 означает 12 месяцев. Grafana подключает VictoriaMetrics как источник типа Prometheus по адресу http://victoriametrics:8428.

Нюансы и подводные камни

  • Кардинальность ломает любое хранилище: контролируйте метки (временные ряды).
  • remote_write увеличивает нагрузку. Следите за очередью отправки и метрикой отставания.
  • Двойное хранение. Prometheus всё равно хранит данные локально, настройте retention под оба уровня.
  • Высокая доступность Prometheus делают парой одинаковых инстансов; Thanos и Mimir умеют дедупликацию реплик.
  • Лицензии. У Mimir AGPLv3: учитывайте при встраивании и модификации.
  • Запросы за длинный период тяжёлые: используйте downsampled данные и recording rules.

Вопросы с ответами

Связанные темы