Конфигурация
IceGate использует файлы конфигурации YAML или TOML. Формат определяется автоматически по расширению файла (.yaml/.yml для YAML, .toml для TOML).
Использование CLI
Каждый бинарный файл принимает файл конфигурации через флаг -c / --config:
# Сервис Ingest
ingest run -c /etc/icegate/ingest.yaml
# Сервис Query
query run -c /etc/icegate/query.yaml
# Сервис Maintain (миграция схемы)
maintain migrate create -c /etc/icegate/maintain.yaml
maintain migrate upgrade -c /etc/icegate/maintain.yaml
# Показать версию
ingest version
query version
Переменные Окружения
| Переменная | Описание | По умолчанию |
|---|---|---|
AWS_ACCESS_KEY_ID |
Ключ доступа S3 (используется хранилищем и job manager) | |
AWS_SECRET_ACCESS_KEY |
Секретный ключ S3 | |
OTEL_EXPORTER_OTLP_ENDPOINT |
Эндпоинт трейсинга OpenTelemetry (запасной, если tracing.otlp_endpoint не задан) |
|
RUST_LOG |
Фильтр уровня логирования (например, info, debug, info,icegate_query=debug) |
info |
Конфигурация Каталога
Секция catalog настраивает каталог Apache Iceberg. Она является общей для всех сервисов (Ingest, Query, Maintain).
catalog:
backend: !s3
warehouse: catalog
warehouse: s3://warehouse/
properties:
bucket: warehouse
region: us-east-1
endpoint: http://rustfs:9000
Параметры Каталога
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
backend |
enum | Да | Тип бэкенда каталога (см. ниже). Значения по умолчанию нет - поле обязательное | |
warehouse |
string | Да | Расположение хранилища (например, s3://warehouse/) |
|
properties |
map | Нет | {} |
Дополнительные свойства каталога |
cache |
object | Нет | Конфигурация IO-кэша (см. Конфигурация Кэша) |
Бэкенды Каталога
S3-каталог (по умолчанию)
Собственный каталог IceGate. Состояние каталога - объект root.json в объектном хранилище, обновляемый через compare-and-swap, поэтому внешний сервис каталога не требуется.
catalog:
backend: !s3
warehouse: catalog
warehouse: s3://warehouse/
properties:
bucket: warehouse
region: us-east-1
endpoint: http://rustfs:9000
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
warehouse (внутри !s3) |
string | Да | Префикс ключей объектного хранилища с состоянием каталога |
properties.bucket |
string | Да | Бакет с состоянием каталога |
properties.region |
string | Да | Регион S3-клиента каталога |
properties.endpoint |
string | Нет | Пользовательский эндпоинт для S3-совместимого хранилища. Опустить для настоящего AWS S3 |
REST Каталог (Nessie)
catalog:
backend: !rest
uri: http://nessie:19120/iceberg
warehouse: s3://warehouse/
properties:
prefix: main
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
uri |
string | Да | URL эндпоинта REST каталога (должен начинаться с http:// или https://) |
AWS S3 Tables
catalog:
backend: !s3tables
table_bucket_arn: arn:aws:s3tables:us-east-1:123456789012:bucket/my-tables
warehouse: s3://warehouse/
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
table_bucket_arn |
string | Да | ARN бакета S3 Tables (формат: arn:aws:s3tables:<region>:<account>:bucket/<name>) |
AWS Glue
catalog:
backend: !glue
catalog_id: "123456789012"
warehouse: s3://warehouse/
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
catalog_id |
string | Нет | 12-значный идентификатор аккаунта AWS. Если не указан, используется каталог аккаунта по умолчанию |
In-Memory (Тестирование)
catalog:
backend: !memory
warehouse: /tmp/icegate/warehouse
Конфигурация Кэша
Опциональная секция cache включает гибридный кэш foyer (память + диск) для уменьшения обращений к S3 при повторных чтениях. Рекомендуется для продакшен сервисов запросов.
catalog:
backend: !s3
warehouse: catalog
warehouse: s3://warehouse/
properties:
bucket: warehouse
region: us-east-1
endpoint: http://rustfs:9000
cache:
memory_size_mb: 1024
disk_dir: /tmp/icegate/cache
disk_size_mb: 4096
stat_ttl_secs: 300
max_write_cache_size_mb: 128
prefetch:
max_prefetch_bytes: 1048576
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
memory_size_mb |
integer | Да | Ёмкость кэша в памяти в MiB | |
disk_dir |
string | Да | Директория для дискового кэша | |
disk_size_mb |
integer | Да | Ёмкость дискового кэша в MiB | |
stat_ttl_secs |
integer | Нет | TTL в секундах для кэширования ответов S3 HEAD | |
max_write_cache_size_mb |
integer | Нет | Макс. размер значения в MiB для кэширования при записи. Файлы большего размера обходят кэш | |
prefetch.max_prefetch_bytes |
integer | Нет | Макс. байт для предзагрузки блоков столбцов Parquet |
Конфигурация Хранилища
Секция storage настраивает бэкенд объектного хранилища. Является общей для всех сервисов.
S3 / S3-Совместимое (RustFS)
storage:
backend: !s3
bucket: warehouse
region: us-east-1
endpoint: http://rustfs:9000
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
bucket |
string | Да | Имя бакета S3 | |
region |
string | Да | Регион AWS | |
endpoint |
string | Нет | URL кастомного эндпоинта для S3-совместимого хранилища (RustFS и др.) |
Локальная Файловая Система
storage:
backend: !filesystem
root_path: /var/data/icegate
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
root_path |
string | Да | Корневая директория для хранения данных |
In-Memory (Тестирование)
storage:
backend: !memory
Конфигурация Сервиса Ingest
Полный справочник сервиса Ingest (ingest run -c ingest.yaml).
Полный Пример
catalog:
backend: !s3
warehouse: catalog
warehouse: s3://warehouse/
properties:
bucket: warehouse
region: us-east-1
endpoint: http://rustfs:9000
storage:
backend: !s3
bucket: warehouse
region: us-east-1
endpoint: http://rustfs:9000
queue:
common:
base_path: s3://queue/
channel_capacity: 1024
max_row_group_size: 8192
write:
write_retries: 5
compression: zstd
records_per_flush_multiplier: 1
max_bytes_per_flush: 67108864
flush_interval_ms: 200
shift:
read:
max_record_batches_per_task: 1024
max_input_bytes_per_task: 67108864
plan_segment_read_parallelism: 8
shift_segment_read_parallelism: 8
write:
row_group_size: 8192
max_file_size_mb: 64
table_cache_ttl_secs: 60
jobsmanager:
worker_count: 4
poll_interval_ms: 1000
iteration_interval_millisecs: 30000
storage:
endpoint: http://rustfs:9000
bucket: jobs
prefix: shifter
region: us-east-1
use_ssl: false
job_state_codec: json
request_timeout_secs: 5
otlp_http:
enabled: true
host: 0.0.0.0
port: 4318
otlp_grpc:
enabled: true
host: 0.0.0.0
port: 4317
metrics:
enabled: true
host: 0.0.0.0
port: 9091
path: /metrics
tracing:
enabled: true
service_name: icegate-ingest
otlp_endpoint: http://jaeger:4317
sample_ratio: 1.0
OTLP Приёмники
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
otlp_http.enabled |
bool | true |
Включить HTTP приёмник OTLP |
otlp_http.host |
string | 0.0.0.0 |
Адрес привязки |
otlp_http.port |
integer | 4318 |
HTTP порт (стандарт OTLP) |
otlp_grpc.enabled |
bool | true |
Включить gRPC приёмник OTLP |
otlp_grpc.host |
string | 0.0.0.0 |
Адрес привязки |
otlp_grpc.port |
integer | 4317 |
gRPC порт (стандарт OTLP) |
Конфигурация Очереди (WAL)
Управляет записью входящих данных в Write-Ahead Log.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
queue.common.base_path |
string | Базовый путь для сегментов WAL (например, s3://queue/) |
|
queue.common.channel_capacity |
integer | 1024 |
Ёмкость ограниченного канала для обратного давления |
queue.common.max_row_group_size |
integer | 8192 |
Макс. строк в группе строк Parquet |
queue.write.write_retries |
integer | 5 |
Количество повторных попыток записи |
queue.write.compression |
enum | zstd |
Сжатие Parquet: none, snappy, gzip, lzo, brotli, lz4, zstd |
queue.write.records_per_flush_multiplier |
integer | 1 |
Количество групп строк перед сбросом |
queue.write.max_bytes_per_flush |
integer | 67108864 |
Макс. байт (64 MiB) перед сбросом |
queue.write.flush_interval_ms |
integer | 200 |
Макс. время в мс перед сбросом |
queue.read.metadata_entries_cache_capacity |
integer | 2048 |
Размер LRU-кэша для записей метаданных Parquet |
Конфигурация Shift (WAL → Iceberg)
Управляет компакцией данных WAL и записью в таблицы Iceberg.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
shift.read.max_record_batches_per_task |
integer | 1024 |
Макс. групп строк на задачу shift |
shift.read.max_input_bytes_per_task |
integer | 67108864 |
Макс. входных байтов (64 MiB) на задачу shift |
shift.read.plan_segment_read_parallelism |
integer | 8 |
Параллельное чтение сегментов WAL при планировании |
shift.read.shift_segment_read_parallelism |
integer | 8 |
Параллельное чтение сегментов WAL при shift |
shift.write.row_group_size |
integer | 8192 |
Строк в группе строк Parquet для Iceberg |
shift.write.max_file_size_mb |
integer | 64 |
Макс. размер файла данных Iceberg в MiB |
shift.write.table_cache_ttl_secs |
integer | 60 |
TTL для кэшированных метаданных таблиц Iceberg |
shift.jobsmanager.worker_count |
integer | CPUs/2 |
Количество воркеров job manager |
shift.jobsmanager.poll_interval_ms |
integer | 1000 |
Интервал опроса для воркеров |
shift.jobsmanager.iteration_interval_millisecs |
integer | 30000 |
Интервал между итерациями задач |
Хранилище Job Manager
Job manager хранит состояние задач shift в отдельном бакете S3.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
shift.jobsmanager.storage.endpoint |
string | URL эндпоинта S3 | |
shift.jobsmanager.storage.bucket |
string | Имя бакета для состояния задач | |
shift.jobsmanager.storage.prefix |
string | shifter |
Префикс ключа объекта |
shift.jobsmanager.storage.region |
string | us-east-1 |
Регион AWS |
shift.jobsmanager.storage.use_ssl |
bool | false |
Использовать HTTPS для эндпоинта |
shift.jobsmanager.storage.job_state_codec |
enum | json |
Формат сериализации: json или cbor |
shift.jobsmanager.storage.request_timeout_secs |
integer | 5 |
Тайм-аут запроса S3 в секундах |
shift.jobsmanager.storage.access_key_id |
string | Ключ доступа S3 (запасной - переменная AWS_ACCESS_KEY_ID) |
|
shift.jobsmanager.storage.secret_access_key |
string | Секретный ключ S3 (запасной - переменная AWS_SECRET_ACCESS_KEY) |
Конфигурация Сервиса Query
Полный справочник сервиса Query (query run -c query.yaml).
Полный Пример
catalog:
backend: !s3
warehouse: catalog
warehouse: s3://warehouse/
properties:
bucket: warehouse
region: us-east-1
endpoint: http://rustfs:9000
cache:
memory_size_mb: 1024
disk_dir: /tmp/icegate/cache
disk_size_mb: 4096
storage:
backend: !s3
bucket: warehouse
region: us-east-1
endpoint: http://rustfs:9000
engine:
batch_size: 8192
target_partitions: 4
catalog_name: iceberg
refresh_interval_secs: 15
max_age_secs: 30
wal_query_enabled: false
wal_metadata_size_hint: 65536
queue:
common:
base_path: s3://queue/
loki:
enabled: true
host: 0.0.0.0
port: 3100
prometheus:
enabled: true
host: 0.0.0.0
port: 9090
tempo:
enabled: true
host: 0.0.0.0
port: 3200
metrics:
enabled: true
host: 0.0.0.0
port: 9091
path: /metrics
tracing:
enabled: true
service_name: icegate-query
otlp_endpoint: http://jaeger:4317
sample_ratio: 1.0
Движок Запросов
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
engine.batch_size |
integer | 8192 |
Размер пакета DataFusion (строк за раз) |
engine.target_partitions |
integer | 4 |
Параллельные партиции выполнения (установите равным числу ядер CPU) |
engine.catalog_name |
string | iceberg |
Имя каталога в SQL (например, SELECT * FROM iceberg.icegate.logs) |
engine.refresh_interval_secs |
integer | 15 |
Интервал фонового обновления метаданных каталога |
engine.max_age_secs |
integer | 30 |
Макс. возраст до считания кэшированного каталога устаревшим. Должен быть >= refresh_interval_secs |
engine.wal_query_enabled |
bool | false |
Включить данные WAL (горячие) в результаты запросов для доступа в реальном времени |
engine.wal_metadata_size_hint |
integer | 65536 |
Байт для чтения из конца файла за один запрос для футера WAL. Установите null для значения DataFusion по умолчанию |
Запросы в Реальном Времени с WAL
Когда engine.wal_query_enabled установлен в true, сервис запросов читает как зафиксированные данные Iceberg, так и незафиксированные сегменты WAL. Это позволяет запрашивать данные возрастом всего несколько секунд, до того как они будут перенесены в таблицы Iceberg.
Примечание: Эндпоинты метаданных /labels, /label/{name}/values и /series всегда читают только из Iceberg, независимо от этой настройки.
Серверы API Запросов
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
loki.enabled |
bool | true |
Включить Loki-совместимый API запросов логов |
loki.host |
string | 0.0.0.0 |
Адрес привязки |
loki.port |
integer | 3100 |
Порт Loki API |
prometheus.enabled |
bool | true |
Отдавать API запросов Prometheus. Маршруты зарегистрированы, но все обработчики, кроме /-/ready, возвращают 501 Not Implemented - PromQL пока не реализован. Это не эндпоинт метрик: им является блок metrics на порту 9091 |
prometheus.host |
string | 0.0.0.0 |
Адрес привязки |
prometheus.port |
integer | 9090 |
Порт Prometheus API |
tempo.enabled |
bool | true |
Включить Tempo-совместимый API трейсов |
tempo.host |
string | 0.0.0.0 |
Адрес привязки |
tempo.port |
integer | 3200 |
Порт Tempo API |
Конфигурация Сервиса Maintain
Сервис Maintain требует только конфигурацию каталога и хранилища:
catalog:
backend: !s3
warehouse: catalog
warehouse: s3://warehouse/
properties:
bucket: warehouse
region: us-east-1
endpoint: http://rustfs:9000
storage:
backend: !s3
bucket: warehouse
region: us-east-1
endpoint: http://rustfs:9000
CLI Maintain
# Создать все таблицы Iceberg (первоначальная настройка)
maintain migrate create -c maintain.yaml
# Обновить схемы существующих таблиц
maintain migrate upgrade -c maintain.yaml
# Пробный запуск (показать что будет сделано)
maintain migrate create -c maintain.yaml --dry-run
maintain migrate upgrade -c maintain.yaml --dry-run
Конфигурация Метрик
Все сервисы предоставляют метрики Prometheus через отдельный HTTP-сервер.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
metrics.enabled |
bool | false |
Включить эндпоинт метрик Prometheus |
metrics.host |
string | 127.0.0.1 |
Адрес привязки |
metrics.port |
integer | 9091 |
Порт сервера метрик |
metrics.path |
string | /metrics |
URL путь для метрик |
Конфигурация Трейсинга
Все сервисы могут экспортировать трейсы OpenTelemetry для самонаблюдаемости.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
tracing.enabled |
bool | true |
Включить трейсинг |
tracing.service_name |
string | Имя сервиса для трейсов | |
tracing.otlp_endpoint |
string | URL эндпоинта OTLP. Запасной - переменная OTEL_EXPORTER_OTLP_ENDPOINT |
|
tracing.sample_ratio |
float | 1.0 |
Коэффициент сэмплирования (0.0 до 1.0). Уменьшите в продакшене |
Пример с Jaeger:
tracing:
enabled: true
service_name: icegate-ingest
otlp_endpoint: http://jaeger:4317
sample_ratio: 0.1 # Отбирать 10% трасс в продакшене
Среда Разработки
Для локальной разработки используйте предоставленную конфигурацию Docker Compose:
# Запуск основных сервисов с hot-reload
make dev
# Запуск основных сервисов в release режиме
make run-core-release
# Запуск с генератором нагрузки
make run-load-release
# Запуск с мониторингом (Jaeger, Prometheus, Grafana)
make run-analytics-release
Переменные окружения для локальной разработки:
export AWS_ACCESS_KEY_ID=rustfsadmin
export AWS_SECRET_ACCESS_KEY=rustfsadmin
export AWS_REGION=us-east-1
Следующие Шаги
- Узнайте о Загрузке Данных
- Изучите возможности Запросов
- Настройте Мультитенантность