Перейти к основному содержимому

7.04. Справочник по Mimir

Разработчику Архитектору Инженеру

Справочник по Mimir

Grafana Mimir — это масштабируемая, отказоустойчивая, мультитенантная система долгосрочного хранения метрик, совместимая с Prometheus. Она предназначена для приема, хранения и выполнения запросов к большим объемам временных рядов с высокой доступностью и эффективным использованием ресурсов. Mimir является частью экосистемы Grafana Labs и служит основой для метрической подсистемы в стеке наблюдаемости LGTM (Loki, Grafana, Tempo, Mimir).

Архитектура

Микросервисная архитектура

Grafana Mimir использует микросервисную архитектуру. Все компоненты реализованы в одном исполняемом файле, но могут запускаться как отдельные процессы или вместе в так называемом «монолитном» режиме. Выбор активных компонентов определяется параметром -target.

Начиная с версии 3.0 поддерживаются два типа архитектур:

  • Ingest storage (предпочтительная) — использует Kafka как центральный конвейер для разделения операций записи и чтения.
  • Classic — использует stateful ingesters с локальными журналами предзаписи (WAL) для одновременного приема новых данных и обслуживания недавних запросов.

Mimir принимает данные через API удаленной записи Prometheus. Каждый HTTP-запрос должен содержать заголовок X-Scope-OrgId, указывающий идентификатор клиента (тенанта). Аутентификация и авторизация обрабатываются внешним обратным прокси.

Хранение данных основано на формате TSDB из Prometheus. Данные каждого тенанта сохраняются в собственном TSDB, который записывает временные ряды в блоки на диске. Каждый блок по умолчанию охватывает двухчасовой интервал времени и содержит индексный файл, метаданные и чанки временных рядов.

Для долгосрочного хранения Mimir требует объектное хранилище одного из следующих типов:

  • Amazon S3
  • Google Cloud Storage
  • Microsoft Azure Storage
  • OpenStack Swift
  • Локальная файловая система (только для одиночного узла)

Основные компоненты

  • Distributor — получает входящие метрики от Prometheus через Remote Write API, проверяет корректность данных и распределяет их между ingesters.
  • Ingester — принимает метрики от distributor’а, сохраняет их в памяти и периодически сбрасывает на диск в виде блоков TSDB.
  • Querier — обрабатывает PromQL-запросы, собирая данные как из ingesters (для свежих данных), так и из долгосрочного хранилища (для исторических).
  • Query-frontend — принимает запросы от пользователей, разбивает их на более мелкие подзапросы, кэширует результаты и управляет очередями.
  • Compactor — выполняет горизонтальное и вертикальное сжатие блоков TSDB, а также управляет индексами для глобального поиска.
  • Ruler — выполняет правила записи и алертинга на основе PromQL.
  • Alertmanager — управляет уведомлениями об алертах, группирует и отправляет их по заданным маршрутам.
  • Overrides-exporter — предоставляет информацию о лимитах и настройках тенантов через метрики Prometheus.
  • Store-gateway — загружает блоки TSDB из объектного хранилища в память и предоставляет их querier’у для выполнения запросов.
  • Index-gateway — обслуживает глобальные индексы меток и имен метрик для ускорения поиска.

Конфигурация

Конфигурация Mimir осуществляется через YAML-файл или флаги командной строки. При совместном использовании флаги имеют приоритет над значениями в файле. Текущую конфигурацию любого компонента можно просмотреть по HTTP-эндпоинту /config (пароли скрыты).

Все параметры делятся на три категории:

  • Basic — базовые параметры, которые большинство пользователей меняют (например, учетные данные хранилища).
  • Advanced — продвинутые параметры, изменяемые редко, но имеющие важные сценарии использования.
  • Experimental — экспериментальные параметры для новых функций.

Ниже приведены ключевые блоки конфигурации с описанием параметров, типов значений и возможных настроек.

Общие параметры

# Список компонентов, запускаемых в процессе. Значение 'all' включает все компоненты,
# необходимые для полноценной работы Mimir в single-binary режиме.
# CLI flag: -target
[target: <string> | default = "all"]

# Включает обязательное указание tenant ID в заголовке X-Scope-OrgId.
# Если false, используется tenant ID из auth.no-auth-tenant.
# CLI flag: -auth.multitenancy-enabled
[multitenancy_enabled: <boolean> | default = true]

server

Блок server настраивает HTTP- и gRPC-серверы компонентов.

# Сетевой протокол для HTTP-сервера.
# CLI flag: -server.http-listen-network
[http_listen_network: <string> | default = "tcp"]

# Адрес, на котором слушает HTTP-сервер.
# CLI flag: -server.http-listen-address
[http_listen_address: <string> | default = ""]

# Порт HTTP-сервера.
# CLI flag: -server.http-listen-port
[http_listen_port: <int> | default = 8080]

# Адрес gRPC-сервера.
# CLI flag: -server.grpc-listen-address
[grpc_listen_address: <string> | default = ""]

# Порт gRPC-сервера.
# CLI flag: -server.grpc-listen-port
[grpc_listen_port: <int> | default = 9095]

# Максимальный размер сообщения gRPC (в байтах).
# CLI flag: -server.grpc-max-recv-msg-size-bytes
[grpc_server_max_recv_msg_size: <int> | default = 104857600] # 100 MiB

# Таймаут простоя соединения gRPC.
# CLI flag: -server.grpc.keepalive.min-time-between-pings
[grpc_server_keepalive_min_time_between_pings: <duration> | default = 10s]

auth

Блок auth управляет аутентификацией и авторизацией запросов. Mimir не включает встроенный механизм аутентификации — он ожидает, что заголовок X-Scope-OrgId будет добавлен внешним прокси.

# Идентификатор клиента, используемый, если multitenancy_enabled = false.
# CLI flag: -auth.no-auth-tenant
[no_auth_tenant: <string> | default = "fake"]

# Список доверенных клиентов (тенантов), которые могут отправлять данные.
# Если пустой — разрешены все.
# CLI flag: -auth.trusted-tenants
[trusted_tenants: <string> | default = ""]

distributor

Компонент distributor отвечает за прием метрик через Remote Write API и их распределение по ingesters.

# Максимальное количество временных рядов на одного клиента (по умолчанию 0 — без ограничений).
# CLI flag: -distributor.max-series-per-metric
[max_series_per_metric: <int> | default = 0]

# Максимальное общее количество временных рядов на клиента.
# CLI flag: -distributor.max-series-per-user
[max_series_per_user: <int> | default = 0]

# Максимальный размер одного запроса Remote Write (в байтах).
# CLI flag: -distributor.max-recv-msg-size
[max_recv_msg_size: <int> | default = 104857600] # 100 MiB

# Максимальное количество меток в одном сэмпле.
# CLI flag: -distributor.max-label-names-per-series
[max_label_names_per_series: <int> | default = 30]

# Максимальная длина имени метки или значения (в символах).
# CLI flag: -distributor.max-label-value-length
[max_label_value_length: <int> | default = 2048]

# Интервал между повторными попытками отправки данных в ingester при ошибке.
# CLI flag: -distributor.retry-period
[retry_period: <duration> | default = 100ms]

# Максимальное количество попыток отправки.
# CLI flag: -distributor.max-retries
[max_retries: <int> | default = 3]

ingester

Ingester хранит недавние данные в памяти и периодически сохраняет их на диск в виде блоков TSDB.

# Путь к каталогу WAL (Write-Ahead Log).
# CLI flag: -ingester.wal-dir
[wal_dir: <string> | default = "./wal"]

# Интервал между сбросами данных из памяти на диск (в виде блоков TSDB).
# CLI flag: -ingester.flush-period
[flush_period: <duration> | default = 1h]

# Максимальное время жизни временного ряда в памяти без обновления.
# CLI flag: -ingester.max-tolerated-jitter
[max_tolerated_jitter: <duration> | default = 5m]

# Минимальная продолжительность блока TSDB (обычно 2h).
# CLI flag: -ingester.min-block-duration
[min_block_duration: <duration> | default = 2h]

# Максимальная продолжительность блока TSDB (обычно 12h или 24h).
# CLI flag: -ingester.max-block-duration
[max_block_duration: <duration> | default = 12h]

# Включает сжатие WAL.
# CLI flag: -ingester.wal-compression-enabled
[wal_compression_enabled: <boolean> | default = true]

# Максимальный объем памяти, выделяемый под временные ряды (в байтах).
# CLI flag: -ingester.max-chunk-idle-time
[max_chunk_idle_time: <duration> | default = 1h]

querier

Querier отвечает за выполнение PromQL-запросов, объединяя данные из ingesters (для свежих данных) и store-gateway или долгосрочного хранилища (для исторических).

# Максимальное количество одновременно обрабатываемых запросов.
# CLI flag: -querier.max-concurrent
[max_concurrent: <int> | default = 20]

# Максимальное время выполнения одного запроса.
# CLI flag: -querier.timeout
[timeout: <duration> | default = 2m]

# Интервал между повторными попытками при ошибке запроса к ingester’у.
# CLI flag: -querier.retry-period
[retry_period: <duration> | default = 100ms]

# Максимальное количество попыток повтора.
# CLI flag: -querier.max-retries
[max_retries: <int> | default = 3]

# Включает кэширование результатов запросов в памяти.
# CLI flag: -querier.cache-results
[cache_results: <boolean> | default = false]

# Размер кэша результатов (в байтах).
# CLI flag: -querier.results-cache-max-freshness
[results_cache_max_freshness: <duration> | default = 1m]

query_frontend

Query-frontend принимает запросы от пользователей, разбивает их на подзапросы по времени, кэширует результаты и управляет очередями.

# Максимальная продолжительность одного подзапроса (по умолчанию 24h).
# CLI flag: -query-frontend.split-interval
[split_interval: <duration> | default = 24h]

# Максимальное количество одновременных запросов на одного клиента.
# CLI flag: -query-frontend.max-outstanding-requests-per-tenant
[max_outstanding_requests_per_tenant: <int> | default = 100]

# Включает кэширование результатов в Memcached или Redis.
# CLI flag: -query-frontend.cache-compression-enabled
[cache_compression_enabled: <boolean> | default = true]

# Тип кэша: inmemory, memcached, redis.
# CLI flag: -query-frontend.cache.type
[cache_type: <string> | default = "inmemory"]

# Адреса Memcached-серверов (если используется).
# CLI flag: -memcached.addresses
[memcached_addresses: <string> | default = ""]

# Префикс ключей кэша.
# CLI flag: -query-frontend.cache.prefix
[cache_prefix: <string> | default = "mimir_query_"]

compactor

Compactor выполняет сжатие блоков TSDB и управляет глобальными индексами.

# Интервал между запусками компактизации.
# CLI flag: -compactor.compaction-interval
[compaction_interval: <duration> | default = 1h]

# Минимальный возраст блока для участия в горизонтальной компактизации.
# CLI flag: -compactor.block-ranges
[block_ranges: <list of durations> | default = ["2h", "12h", "24h"]]

# Включает вертикальную компактизацию (объединение перекрывающихся блоков).
# CLI flag: -compactor.vertical-compaction-enabled
[vertical_compaction_enabled: <boolean> | default = true]

# Путь к каталогу метаданных компактора.
# CLI flag: -compactor.data-dir
[data_dir: <string> | default = "./compactor"]

# Включает создание глобальных индексов меток.
# CLI flag: -compactor.sharding-enabled
[sharding_enabled: <boolean> | default = true]

ruler

Ruler выполняет правила записи (recording rules) и алертинга (alerting rules) на основе PromQL для каждого тенанта.

# Интервал между выполнениями правил (по умолчанию 15s).
# CLI flag: -ruler.evaluation-interval
[evaluation_interval: <duration> | default = 15s]

# Каталог, где хранятся файлы правил для каждого тенанта.
# CLI flag: -ruler.rule-path
[rule_path: <string> | default = "./rules"]

# Максимальное количество одновременно выполняемых правил.
# CLI flag: -ruler.max-rules-per-tenant
[max_rules_per_tenant: <int> | default = 0] # 0 — без ограничений

# Включает поддержку алертинга через Alertmanager.
# CLI flag: -ruler.alertmanager-url
[alertmanager_url: <string> | default = ""]

# Таймаут запроса к Alertmanager.
# CLI flag: -ruler.alertmanager-timeout
[alertmanager_timeout: <duration> | default = 10s]

# Интервал между повторными попытками отправки алертов.
# CLI flag: -ruler.alertmanager-retry-period
[alertmanager_retry_period: <duration> | default = 100ms]

# Максимальное количество попыток отправки.
# CLI flag: -ruler.alertmanager-max-retries
[alertmanager_max_retries: <int> | default = 3]

alertmanager

Alertmanager управляет уведомлениями об алертах: группирует их, подавляет дубликаты и отправляет по заданным маршрутам.

# Каталог конфигураций Alertmanager для каждого тенанта.
# CLI flag: -alertmanager.configs.url
[configs_url: <string> | default = ""]

# Интервал между синхронизациями конфигурации.
# CLI flag: -alertmanager.configs.poll-interval
[configs_poll_interval: <duration> | default = 15s]

# Путь к локальному каталогу с конфигурациями.
# CLI flag: -alertmanager.storage.path
[storage_path: <string> | default = "./alertmanager"]

# Включает поддержку внешних шаблонов уведомлений.
# CLI flag: -alertmanager.external-url
[external_url: <string> | default = ""]

# Максимальный размер очереди уведомлений.
# CLI flag: -alertmanager.max-queue-size
[max_queue_size: <int> | default = 10000]

storage

Блок storage определяет параметры взаимодействия с объектным хранилищем и локальной файловой системой.

# Тип объектного хранилища: s3, gcs, azure, swift, filesystem.
# CLI flag: -storage.backend
[backend: <string> | default = "s3"]

# Путь к каталогу блоков TSDB (для backend=filesystem).
# CLI flag: -storage.filesystem.dir
[filesystem_dir: <string> | default = "./data"]

# Адрес бакета S3.
# CLI flag: -storage.s3.bucket-name
[s3_bucket_name: <string> | default = ""]

# Регион AWS.
# CLI flag: -storage.s3.region
[s3_region: <string> | default = "us-east-1"]

# Ключ доступа AWS.
# CLI flag: -storage.s3.access-key-id
[s3_access_key_id: <string> | default = ""]

# Секретный ключ AWS.
# CLI flag: -storage.s3.secret-access-key
[s3_secret_access_key: <string> | default = ""]

# Конечная точка S3 (для совместимых реализаций, например MinIO).
# CLI flag: -storage.s3.endpoint
[s3_endpoint: <string> | default = ""]

# Включает использование HTTPS для S3.
# CLI flag: -storage.s3.insecure
[s3_insecure: <boolean> | default = false]

# Префикс пути в бакете (например, mimir/tenant1).
# CLI flag: -storage.prefix
[prefix: <string> | default = ""]

limits

Блок limits задает ограничения на ресурсы и поведение клиентов (тенантов).

# Максимальное количество активных серий на тенанта.
# CLI flag: -distributor.max-series-per-user
[max_series_per_user: <int> | default = 0]

# Максимальное количество запросов в секунду на тенанта.
# CLI flag: -querier.max-query-parallelism
[max_query_parallelism: <int> | default = 14]

# Максимальная продолжительность запроса (в секундах).
# CLI flag: -querier.max-query-length
[max_query_length: <duration> | default = 0] # 0 — без ограничений

# Максимальное количество выборок в одном запросе.
# CLI flag: -querier.max-samples-per-query
[max_samples_per_query: <int> | default = 50000000]

# Максимальное количество одновременных правил на тенанта.
# CLI flag: -ruler.max-rules-per-tenant
[max_rules_per_tenant: <int> | default = 0]

# Максимальный размер конфигурации Alertmanager (в байтах).
# CLI flag: -alertmanager.max-config-size-bytes
[alertmanager_max_config_size_bytes: <int> | default = 524288] # 512 KiB

overrides

Блок overrides позволяет задавать персонализированные лимиты и настройки для отдельных тенантов. Эти параметры переопределяют глобальные значения из блока limits.

# Список переопределений по тенантам.
# Каждый элемент — это map с tenant ID в качестве ключа.
overrides:
<tenant_id>:
# Максимальное количество активных серий.
max_series_per_user: <int>

# Максимальная продолжительность запроса.
max_query_length: <duration>

# Максимальное количество выборок в одном запросе.
max_samples_per_query: <int>

# Интервал выполнения правил ruler’а.
evaluation_interval: <duration>

# Максимальный размер конфигурации Alertmanager.
alertmanager_max_config_size_bytes: <int>

Переопределения могут загружаться из файла, HTTP-эндпоинта или Kubernetes ConfigMap. Поддерживается горячая перезагрузка без перезапуска компонентов.

runtime_config

Позволяет обновлять конфигурацию во время выполнения через HTTP-эндпоинт или файл.

# Путь к файлу с динамической конфигурацией.
# CLI flag: -runtime-config.file
[runtime_config_file: <string> | default = ""]

# Интервал проверки изменений файла.
# CLI flag: -runtime-config.reload-period
[runtime_config_reload_period: <duration> | default = 10s]

memberlist

Используется для обнаружения узлов в режиме gossip (например, для распределения ingesters).

# Имя кластера memberlist.
# CLI flag: -memberlist.cluster-label
[cluster_label: <string> | default = "mimir"]

# Порт для gossip-трафика.
# CLI flag: -memberlist.bind-port
[bind_port: <int> | default = 7946]

# Адрес для привязки.
# CLI flag: -memberlist.bind-addr
[bind_addr: <string> | default = "0.0.0.0"]

# Список известных узлов для начального подключения.
# CLI flag: -memberlist.join
[join_members: <list of strings> | default = []]

store_gateway

Store-gateway загружает блоки TSDB из объектного хранилища в локальный кэш и предоставляет их querier’у для выполнения запросов к историческим данным.

# Интервал между синхронизациями метаданных блоков из хранилища.
# CLI flag: -store-gateway.sync-interval
[sync_interval: <duration> | default = 15m]

# Максимальное количество блоков, загружаемых одновременно.
# CLI flag: -store-gateway.max-concurrent
[max_concurrent: <int> | default = 20]

# Путь к каталогу кэша блоков.
# CLI flag: -store-gateway.cache-dir
[cache_dir: <string> | default = "./store-cache"]

# Максимальный объем кэша (в байтах).
# CLI flag: -store-gateway.cache-size-bytes
[cache_size_bytes: <int> | default = 0] # 0 — без ограничений

# Включает предварительную загрузку блоков при старте.
# CLI flag: -store-gateway.prefetch-blocks
[prefetch_blocks: <boolean> | default = false]

index_gateway

Index-gateway обслуживает глобальные индексы меток и имен метрик, созданные компактором, для ускорения поиска временных рядов.

# Интервал между синхронизациями индексов из хранилища.
# CLI flag: -index-gateway.sync-interval
[sync_interval: <duration> | default = 15m]

# Путь к каталогу кэша индексов.
# CLI flag: -index-gateway.cache-dir
[cache_dir: <string> | default = "./index-cache"]

# Максимальный объем кэша индексов (в байтах).
# CLI flag: -index-gateway.cache-size-bytes
[cache_size_bytes: <int> | default = 0]

# Включает использование шардирования для распределения индексов.
# CLI flag: -index-gateway.sharding-enabled
[sharding_enabled: <boolean> | default = true]

tracing

Mimir поддерживает распределенную трассировку через OpenTelemetry или Jaeger.

# Включает экспорт трассировок.
# CLI flag: -tracing.enabled
[enabled: <boolean> | default = false]

# Тип экспортера: otlp, jaeger.
# CLI flag: -tracing.otlp.endpoint
[otlp_endpoint: <string> | default = ""]

# Интервал между отправками пакетов трассировок.
# CLI flag: -tracing.batch-flush-timeout
[batch_flush_timeout: <duration> | default = 5s]

# Максимальное количество спанов в одном пакете.
# CLI flag: -tracing.batch-size-bytes
[batch_size_bytes: <int> | default = 5000]

logging

Настройка журналирования.

# Уровень логирования: debug, info, warn, error.
# CLI flag: -log.level
[log_level: <string> | default = "info"]

# Формат логов: logfmt, json.
# CLI flag: -log.format
[log_format: <string> | default = "logfmt"]

analytics

Анонимная телеметрия для сбора статистики использования.

# Включает отправку анонимных данных об использовании.
# CLI flag: -analytics.reporting-enabled
[reporting_enabled: <boolean> | default = true]

# Идентификатор установки (генерируется автоматически).
# CLI flag: -analytics.instance-id
[instance_id: <string> | default = ""]

frontend

Настройки веб-интерфейса (если используется встроенный UI).

# Адрес, на котором слушает веб-сервер интерфейса.
# CLI flag: -frontend.http-listen-address
[http_listen_address: <string> | default = ""]

# Порт веб-интерфейса.
# CLI flag: -frontend.http-listen-port
[http_listen_port: <int> | default = 3000]

# Включает CORS для API.
# CLI flag: -frontend.cors-enabled
[cors_enabled: <boolean> | default = false]

blocks_storage

Блок blocks_storage управляет хранением и загрузкой блоков TSDB.

# Интервал между синхронизациями метаданных блоков из хранилища.
# CLI flag: -blocks-storage.sync-interval
[sync_interval: <duration> | default = 15m]

# Максимальное количество одновременно загружаемых блоков.
# CLI flag: -blocks-storage.max-concurrent-downloads
[max_concurrent_downloads: <int> | default = 20]

# Каталог локального кэша блоков.
# CLI flag: -blocks-storage.bucket-store.sync-dir
[bucket_store_sync_dir: <string> | default = "./tsdb-sync"]

# Максимальный объем кэша блоков (в байтах).
# CLI flag: -blocks-storage.bucket-store.max-size-bytes
[bucket_store_max_size_bytes: <int> | default = 0]

auth

Блок auth управляет аутентификацией и мультиарендностью.

# Включает обязательную проверку заголовка X-Scope-OrgId.
# CLI flag: -auth.multitenancy-enabled
[multitenancy_enabled: <boolean> | default = true]

# Tenant ID, используемый, если multitenancy_enabled = false.
# CLI flag: -auth.no-auth-tenant
[no_auth_tenant: <string> | default = "fake"]

# Путь к файлу с маппингом токенов в tenant ID (для dev-режима).
# CLI flag: -auth.tenant-token-file
[tenant_token_file: <string> | default = ""]

distributor

Компонент, принимающий данные от клиентов.

# Максимальное количество временных рядов в одном запросе.
# CLI flag: -distributor.max-series-per-metric
[max_series_per_metric: <int> | default = 10000]

# Максимальный размер одного запроса (в байтах).
# CLI flag: -distributor.max-recv-msg-size-bytes
[max_recv_msg_size: <int> | default = 104857600] # 100 MiB

# Интервал между отправкой метрик о состоянии ingesters.
# CLI flag: -distributor.ingestion-tenant-shard-size
[ingestion_tenant_shard_size: <int> | default = 32]

# Включает поддержку exemplars (примеров трассировки).
# CLI flag: -distributor.enable-exemplar-storage
[enable_exemplar_storage: <boolean> | default = false]

ingester

Отвечает за прием и временное хранение данных.

# Директория для WAL (Write-Ahead Log).
# CLI flag: -ingester.wal-dir
[wal_dir: <string> | default = "wal"]

# Интервал между сбросами данных на диск (блоки TSDB).
# CLI flag: -ingester.flush-period
[flush_period: <duration> | default = "1h"]

# Максимальная продолжительность блока TSDB.
# CLI flag: -ingester.max-block-duration
[max_block_duration: <duration> | default = "2h"]

# Включает сжатие WAL.
# CLI flag: -ingester.wal-compression-enabled
[wal_compression_enabled: <boolean> | default = true]

# Максимальное количество активных временных рядов на один tenant.
# CLI flag: -ingester.max-series-per-user
[max_series_per_user: <int> | default = 10000000]

# Максимальное количество активных временных рядов на одну метрику.
# CLI flag: -ingester.max-series-per-metric
[max_series_per_metric: <int> | default = 100000]

querier

Выполняет PromQL-запросы.

# Максимальное количество одновременных запросов к одному ingester’у.
# CLI flag: -querier.max-concurrent
[max_concurrent: <int> | default = 20]

# Таймаут запроса к ingester’у.
# CLI flag: -querier.query-ingesters-within
[query_ingesters_within: <duration> | default = "15m"]

# Включает кэширование результатов запросов.
# CLI flag: -querier.cache-results
[cache_results: <boolean> | default = false]

# TTL кэша результатов запросов.
# CLI flag: -querier.results-cache-ttl
[results_cache_ttl: <duration> | default = "5m"]

query_frontend

Принимает пользовательские запросы и управляет их выполнением.

# Максимальное количество одновременных запросов от одного tenant’а.
# CLI flag: -frontend.max-outstanding-requests-per-tenant
[max_outstanding_requests_per_tenant: <int> | default = 100]

# Включает разбиение запросов по времени.
# CLI flag: -frontend.split-queries-by-interval
[split_queries_by_interval: <duration> | default = "15m"]

# Включает кэширование запросов.
# CLI flag: -frontend.cache-split-queries
[cache_split_queries: <boolean> | default = false]

# TTL кэша запросов.
# CLI flag: -frontend.results-cache-ttl
[results_cache_ttl: <duration> | default = "5m"]

compactor

Управляет сжатием и индексацией блоков.

# Интервал между запусками компактизации.
# CLI flag: -compactor.compaction-interval
[compaction_interval: <duration> | default = "10m"]

# Минимальный возраст блока для участия в вертикальной компактизации.
# CLI flag: -compactor.block-deletion-delay
[block_deletion_delay: <duration> | default = "1h"]

# Включает горизонтальную компактизацию.
# CLI flag: -compactor.sharding-enabled
[sharding_enabled: <boolean> | default = true]

# Количество шардов компактора.
# CLI flag: -compactor.shard-size
[shard_size: <int> | default = 1]

ruler

Выполняет правила записи и алертинга.

# Интервал оценки правил.
# CLI flag: -ruler.evaluation-interval
[evaluation_interval: <duration> | default = "1m"]

# Директория для хранения правил.
# CLI flag: -ruler.rule-path
[rule_path: <string> | default = "rules"]

# Использовать объектное хранилище для хранения правил.
# CLI flag: -ruler.storage.type
[storage_type: <string> | default = "local"]

# Префикс пути к правилам в объектном хранилище.
# CLI flag: -ruler.storage.prefix
[storage_prefix: <string> | default = "rules/"]

alertmanager

Управляет уведомлениями об алертах.

# Директория конфигурации Alertmanager’а.
# CLI flag: -alertmanager.configs.url
[configs_url: <string> | default = ""]

# Интервал перезагрузки конфигурации.
# CLI flag: -alertmanager.configs.poll-interval
[configs_poll_interval: <duration> | default = "1m"]

# Включает хранение состояния в объектном хранилище.
# CLI flag: -alertmanager.persistence.enabled
[persistence_enabled: <boolean> | default = false]

store_gateway

Загружает блоки из объектного хранилища.

# Максимальное количество блоков в памяти.
# CLI flag: -store-gateway.sharding-enabled
[sharding_enabled: <boolean> | default = true]

# Размер пула блоков.
# CLI flag: -store-gateway.block-pool-size-bytes
[block_pool_size: <int> | default = 2147483648] # 2 GiB

# Интервал между синхронизациями метаданных блоков.
# CLI flag: -store-gateway.sync-interval
[sync_interval: <duration> | default = "5m"]

index_gateway

Служит для глобального поиска меток и имен метрик.

# Включает использование index gateway.
# CLI flag: -index-gateway.use-index-gateway
[use_index_gateway: <boolean> | default = false]

# Интервал между синхронизациями индексов.
# CLI flag: -index-gateway.sync-interval
[sync_interval: <duration> | default = "5m"]

limits

Блок limits определяет глобальные и пер-тенантные ограничения на использование ресурсов.

# Максимальное количество активных временных рядов на tenant.
# CLI flag: -distributor.max-series-per-user
[max_series_per_user: <int> | default = 10000000]

# Максимальное количество меток на один временной ряд.
# CLI flag: -distributor.max-label-names-per-series
[max_label_names_per_series: <int> | default = 30]

# Максимальная длина имени метки или её значения (в байтах).
# CLI flag: -distributor.max-label-value-length
[max_label_value_length: <int> | default = 2048]

# Максимальный размер одного запроса (в байтах).
# CLI flag: -distributor.max-recv-msg-size-bytes
[max_recv_msg_size: <int> | default = 104857600] # 100 MiB

# Максимальное количество выборок в одном запросе.
# CLI flag: -querier.max-samples
[max_samples: <int> | default = 50000000]

# Максимальная продолжительность запроса.
# CLI flag: -querier.max-query-length
[max_query_length: <duration> | default = "0s"] # 0 — без ограничения

# Максимальное количество одновременных запросов от одного tenant’а.
# CLI flag: -frontend.max-outstanding-requests-per-tenant
[max_outstanding_requests_per_tenant: <int> | default = 100]

storage

Конфигурация хранилища данных.

# Тип объектного хранилища: s3, gcs, azure, swift, filesystem.
# CLI flag: -storage.backend
[backend: <string> | default = "s3"]

# Префикс пути к данным в хранилище.
# CLI flag: -storage.bucket-name
[bucket_name: <string> | default = "mimir"]

# Включает сжатие блоков при загрузке в хранилище.
# CLI flag: -storage.tsdb.block-compression-enabled
[block_compression_enabled: <boolean> | default = true]

# Интервал между синхронизациями метаданных блоков.
# CLI flag: -store-gateway.sync-interval
[sync_interval: <duration> | default = "5m"]

storage.s3

Настройки для Amazon S3 и совместимых хранилищ.

# URL конечной точки S3.
# CLI flag: -s3.endpoint
[endpoint: <string> | default = ""]

# Регион AWS.
# CLI flag: -s3.region
[region: <string> | default = "us-east-1"]

# Ключ доступа AWS.
# CLI flag: -s3.access-key-id
[access_key_id: <string> | default = ""]

# Секретный ключ AWS.
# CLI flag: -s3.secret-access-key
[secret_access_key: <string> | default = ""]

# Имя профиля AWS.
# CLI flag: -s3.profile
[profile: <string> | default = ""]

# Включает использование IAM-ролей.
# CLI flag: -s3.use-iam-role
[use_iam_role: <boolean> | default = false]

# Включает шифрование SSE-S3.
# CLI flag: -s3.sse-encryption
[sse_encryption: <boolean> | default = false]

storage.gcs

Настройки для Google Cloud Storage.

# Идентификатор проекта GCP.
# CLI flag: -gcs.project-id
[project_id: <string> | default = ""]

# Путь к файлу учетных данных сервисного аккаунта.
# CLI flag: -gcs.service-account-key-file
[service_account_key_file: <string> | default = ""]

storage.azure

Настройки для Azure Blob Storage.

# Имя учетной записи хранения.
# CLI flag: -azure.account-name
[account_name: <string> | default = ""]

# Ключ доступа к учетной записи.
# CLI flag: -azure.account-key
[account_key: <string> | default = ""]

# Имя контейнера.
# CLI flag: -azure.container-name
[container_name: <string> | default = ""]

cache

Настройки кэширования запросов и метаданных.

# Тип кэша: memcached, redis, inmemory.
# CLI flag: -cache.backend
[backend: <string> | default = "inmemory"]

# TTL записей в кэше.
# CLI flag: -cache.default-ttl
[default_ttl: <duration> | default = "5m"]

# Размер кэша в памяти (в байтах).
# CLI flag: -cache.inmemory.size-bytes
[inmemory_size: <int> | default = 268435456] # 256 MiB

cache.memcached

# Адреса Memcached-серверов.
# CLI flag: -memcached.addresses
[addresses: <[]string> | default = []]

# Таймаут соединения.
# CLI flag: -memcached.timeout
[timeout: <duration> | default = "100ms"]

cache.redis

# Адрес Redis-сервера.
# CLI flag: -redis.address
[address: <string> | default = "localhost:6379"]

# Пароль Redis.
# CLI flag: -redis.password
[password: <string> | default = ""]

# База данных Redis.
# CLI flag: -redis.db
[db: <int> | default = 0]

overrides

Блок overrides позволяет задавать пер-тенантные ограничения и настройки, переопределяющие глобальные значения из limits.

# Используется для загрузки конфигурации лимитов из внешнего источника.
# CLI flag: -runtime-config.file
[runtime_config_file: <string> | default = ""]

# Интервал обновления конфигурации.
# CLI flag: -runtime-config.reload-period
[runtime_reload_period: <duration> | default = "10s"]

# Пример структуры per-tenant overrides:
# overrides:
# 'tenant-a':
# ingestion_rate: 50000
# max_series_per_user: 5000000
# 'tenant-b':
# ingestion_rate: 100000
# max_series_per_user: 10000000

analytics

Включает анонимную телеметрию использования.

# Отправка анонимных метрик Grafana Labs.
# CLI flag: -analytics.reporting-enabled
[reporting_enabled: <boolean> | default = true]

http_client

Настройки HTTP-клиента для внутренних вызовов между компонентами.

# Таймаут соединения.
# CLI flag: -http-client.idle-conn-timeout
[idle_conn_timeout: <duration> | default = "90s"]

# Максимальное количество соединений на хост.
# CLI flag: -http-client.max-idle-conns-per-host
[max_idle_conns_per_host: <int> | default = 100]

# Общее максимальное количество простаивающих соединений.
# CLI flag: -http-client.max-idle-conns
[max_idle_conns: <int> | default = 100]

memberlist

Конфигурация gossip-протокола для обнаружения узлов в кластере (актуально при использовании in-memory ring).

# Адрес привязки для gossip-трафика.
# CLI flag: -memberlist.bind-addr
[bind_addr: <string> | default = "0.0.0.0"]

# Порт gossip-трафика.
# CLI flag: -memberlist.bind-port
[bind_port: <int> | default = 7946]

# Список известных узлов для начального джойна.
# CLI flag: -memberlist.join
[join_members: <[]string> | default = []]

blocks_storage

Устаревший блок, заменённый на storage. Сохранён для обратной совместимости.

tsdb

Параметры TSDB, влияющие на поведение локальных блоков.

# Максимальное количество открытых блоков в памяти.
# CLI flag: -tsdb.max-blocks-to-load
[max_blocks_to_load: <int> | default = 0] # 0 — без ограничения

# Включает сжатие чанков временных рядов.
# CLI flag: -tsdb.chunk-compression
[chunk_compression: <string> | default = "snappy"]

experimental

Экспериментальные функции, не рекомендованные для продакшена.

# Включает поддержку exemplars.
# CLI flag: -experimental.exemplar-storage-enabled
[exemplar_storage_enabled: <boolean> | default = false]

# Включает поддержку native histograms.
# CLI flag: -experimental.native-histograms-enabled
[native_histograms_enabled: <boolean> | default = false]

tracing

Настройки распределённой трассировки запросов через OpenTelemetry.

# Включает экспорт трассировок.
# CLI flag: -tracing.enabled
[enabled: <boolean> | default = false]

# Тип экспортера: jaeger, otlp.
# CLI flag: -tracing.driver
[driver: <string> | default = "jaeger"]

# Адрес Jaeger-агента (для UDP).
# CLI flag: -tracing.jaeger-agent-host
[jaeger_agent_host: <string> | default = "localhost"]

# Порт Jaeger-агента.
# CLI flag: -tracing.jaeger-agent-port
[jaeger_agent_port: <int> | default = 6831]

# Адрес OTLP-эндпоинта.
# CLI flag: -tracing.otlp.endpoint
[otlp_endpoint: <string> | default = "localhost:4317"]

logging

Конфигурация логирования.

# Уровень логирования: debug, info, warn, error.
# CLI flag: -log.level
[level: <string> | default = "info"]

# Формат логов: logfmt, json.
# CLI flag: -log.format
[format: <string> | default = "logfmt"]

metrics

Настройки внутренних метрик Mimir.

# Адрес для экспорта Prometheus-метрик.
# CLI flag: -metrics.address
[address: <string> | default = ":8081"]

# Путь к эндпоинту метрик.
# CLI flag: -metrics.path
[path: <string> | default = "/metrics"]

ring

Конфигурация хэш-кольца для распределения данных между ingesters.

# Ключ для идентификации инстанса в кольце.
# CLI flag: -ring.instance-id
[instance_id: <string> | default = ""]

# Адрес инстанса в кольце.
# CLI flag: -ring.instance-addr
[instance_addr: <string> | default = "127.0.0.1"]

# Порт инстанса.
# CLI flag: -ring.instance-port
[instance_port: <int> | default = 0]

# Интервал отправки heartbeat’ов.
# CLI flag: -ring.heartbeat-period
[heartbeat_period: <duration> | default = "5s"]

# Таймаут неактивности узла перед его исключением из кольца.
# CLI flag: -ring.heartbeat-timeout
[heartbeat_timeout: <duration> | default = "1m"]

frontend_worker

Настройки связи query-frontend с querier’ами.

# Максимальное количество одновременных запросов на один querier.
# CLI flag: -frontend-worker.max-retries
[max_retries: <int> | default = 5]

# Таймаут одного запроса.
# CLI flag: -frontend-worker.grpc-client-config.timeout
[grpc_client_timeout: <duration> | default = "5s"]

blocks_storage.tsdb

Параметры TSDB для долгосрочного хранилища.

# Минимальный интервал между блоками для загрузки.
# CLI flag: -blocks-storage.tsdb.min-block-duration
[min_block_duration: <duration> | default = "2h"]

# Максимальный интервал между блоками.
# CLI flag: -blocks-storage.tsdb.max-block-duration
[max_block_duration: <duration> | default = "2h"]

# Включает вертикальную компактизацию.
# CLI flag: -blocks-storage.tsdb.enable-vertical-compaction
[enable_vertical_compaction: <boolean> | default = true]

exemplars_storage

(Экспериментально) Настройки хранения exemplars — связей между метриками и трассировками.

# Включает хранение exemplars.
# CLI flag: -exemplars-storage.enabled
[enabled: <boolean> | default = false]

# Максимальное количество exemplars на временной ряд.
# CLI flag: -exemplars-storage.max-exemplars-per-series
[max_exemplars_per_series: <int> | default = 10]

native_histograms

(Экспериментально) Поддержка нативных гистограмм Prometheus 2.40+.

# Включает обработку нативных гистограмм.
# CLI flag: -native-histograms.enabled
[enabled: <boolean> | default = false]

# Минимальная разрешающая способность бакетов.
# CLI flag: -native-histograms.min-bucket-factor
[min_bucket_factor: <float> | default = 1.05]

validation

Блок валидации входящих данных.

# Максимальная длина имени метрики (в байтах).
# CLI flag: -validation.max-metric-name-length
[max_metric_name_length: <int> | default = 256]

# Максимальное количество выборок в одном запросе.
# CLI flag: -validation.max-samples-per-query
[max_samples_per_query: <int> | default = 50000000]

# Максимальная продолжительность диапазона в запросе.
# CLI flag: -validation.max-query-length
[max_query_length: <duration> | default = "0s"] # 0 — без ограничения

runtime_config

Позволяет динамически обновлять лимиты и настройки без перезапуска Mimir.

# Путь к файлу с пер-тенантными переопределениями.
# CLI flag: -runtime-config.file
[file: <string> | default = ""]

# Интервал перезагрузки файла.
# CLI flag: -runtime-config.reload-period
[reload_period: <duration> | default = "10s"]

Формат файла runtime_config:

overrides:
tenant-a:
ingestion_rate: 50000
max_series_per_user: 5000000
max_global_streams_per_user: 1000
tenant-b:
ingestion_rate: 100000
max_series_per_user: 10000000

replication

Настройки репликации данных между ingesters.

# Количество реплик данных.
# CLI flag: -distributor.replication-factor
[replication_factor: <int> | default = 3]

# Включает строгую проверку кворума при записи.
# CLI flag: -distributor.consistency-level
[consistency_level: <string> | default = "one"] # one, quorum

shuffle_sharding

Механизм изоляции tenant’ов через шардирование ingesters.

# Максимальное количество ingesters на tenant.
# CLI flag: -distributor.ingestion-tenant-shard-size
[ingestion_tenant_shard_size: <int> | default = 32]

query_scheduler

Опциональный компонент для очередей запросов между query-frontend и querier’ами.

# Максимальное количество запросов в очереди на tenant.
# CLI flag: -query-scheduler.max-outstanding-requests-per-tenant
[max_outstanding_requests_per_tenant: <int> | default = 100]

# Включает использование gRPC вместо HTTP для внутренних вызовов.
# CLI flag: -query-scheduler.use-grpc
[use_grpc: <boolean> | default = true]

metadata

Эндпоинты для получения метаданных временных рядов.

# Включает эндпоинт /api/v1/metadata.
# CLI flag: -querier.metadata-enabled
[metadata_enabled: <boolean> | default = true]

series

Настройки для эндпоинта /api/v1/series.

# Максимальное количество временных рядов в ответе.
# CLI flag: -querier.max-series-per-query
[max_series_per_query: <int> | default = 10000]

# Максимальная продолжительность диапазона времени.
# CLI flag: -querier.max-query-length
[max_query_length: <duration> | default = "0s"]

labels

Настройки для эндпоинта /api/v1/labels.

# Максимальное количество значений метки в ответе.
# CLI flag: -querier.max-label-values-per-query
[max_label_values_per_query: <int> | default = 100000]

readiness

Проверка готовности компонента принимать трафик.

# Минимальное количество ingesters в кольце для readiness.
# CLI flag: -ingester.min-ready-ingesters
[min_ready_ingesters: <int> | default = 1]

lifecycler

Управление жизненным циклом инстанса в ring’е.

# Начальное состояние инстанса: PENDING, JOINING, ACTIVE, LEAVING.
# CLI flag: -lifecycler.initial-state
[initial_state: <string> | default = "PENDING"]

# Автоматическое завершение работы при потере кворума.
# CLI flag: -lifecycler.final-sleep
[final_sleep: <duration> | default = "30s"]

compactor_ring

Отдельное кольцо для распределения задач компактизации.

# Количество шардов компактора.
# CLI flag: -compactor.ring.instance-id
[instance_id: <string> | default = ""]

# Адрес инстанса компактора.
# CLI flag: -compactor.ring.instance-addr
[instance_addr: <string> | default = "127.0.0.1"]

bucket_stores

(Для Ingest Storage) Настройки загрузки блоков из хранилища.

# Максимальное количество одновременно загружаемых блоков.
# CLI flag: -bucket-stores.max-concurrent
[max_concurrent: <int> | default = 100]

# TTL кэша метаданных блоков.
# CLI flag: -bucket-stores.metadata-cache-ttl
[metadata_cache_ttl: <duration> | default = "15m"]

usage_report

Анонимная статистика использования.

# Отправлять данные о количестве tenant’ов и объеме данных.
# CLI flag: -usage-report.enabled
[enabled: <boolean> | default = true]

Эндпоинты API

Mimir предоставляет следующие HTTP-эндпоинты:

  • /api/v1/push — прием метрик (Remote Write).
  • /api/v1/query — мгновенный PromQL-запрос.
  • /api/v1/query_range — диапазонный PromQL-запрос.
  • /api/v1/series — поиск временных рядов по меткам.
  • /api/v1/labels — получение списка меток.
  • /api/v1/label/<name>/values — получение значений конкретной метки.
  • /api/v1/rules — управление правилами (если включен ruler).
  • /api/v1/alerts — просмотр активных алертов.
  • /metrics — внутренние метрики Prometheus.
  • /config — текущая конфигурация (без секретов).
  • /ready — проверка готовности.
  • /ring — состояние хэш-кольца (в single-binary режиме).

Все эндпоинты требуют заголовок X-Scope-OrgId, если включена мультиарендность.