Конфигурация
Конфигурация
Заголовок раздела «Конфигурация»Wippy настраивается через файлы .wippy.yaml. Все параметры имеют разумные значения по умолчанию.
Любое значение ниже можно переопределить при запуске с помощью wippy run --set section.path=value (можно указывать несколько раз, имеет приоритет над файлом). Чтобы переопределить отдельные записи реестра, а не эти секции конфигурации, используйте секцию override: или флаг -o — см. Переопределение записей.
Управляет кодировщиком zap-логгера. CLI-флаги (-v, -c, -s) переопределяют уровень/вывод; единственная опция, управляемая через yaml, — это кодировка.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
encoding | string | console | Кодировщик: console (человекочитаемый) или json (структурированный) |
logger: encoding: jsonLog Manager
Заголовок раздела «Log Manager»Управляет маршрутизацией логов среды выполнения. Вывод в консоль настраивается через флаги CLI (-v, -c, -s).
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
propagate_downstream | bool | true | Передавать логи в консоль/файл |
stream_to_events | bool | false | Публиковать логи в шину событий для программного доступа |
min_level | int | -1 | Минимальный уровень: -1=debug, 0=info, 1=warn, 2=error |
logmanager: propagate_downstream: true stream_to_events: false min_level: 0См.: Модуль Logger
Profiler
Заголовок раздела «Profiler»HTTP-сервер Go pprof для профилирования CPU и памяти. Включается флагом -p или через конфиг.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled | bool | false | Запустить сервер профилировщика |
address | string | localhost:6060 | Адрес прослушивания |
read_timeout | duration | 15s | Таймаут чтения HTTP |
write_timeout | duration | 15s | Таймаут записи HTTP |
idle_timeout | duration | 60s | Таймаут keep-alive |
profiler: enabled: true address: "localhost:6060"Доступен по адресу http://localhost:6060/debug/pprof/
Security
Заголовок раздела «Security»Глобальное поведение безопасности. Отдельные политики определяются как записи security.policy.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
strict_mode | bool | false | Запрещать доступ при неполном контексте безопасности |
security: strict_mode: trueСм.: Система безопасности, Модуль Security
Registry
Заголовок раздела «Registry»Хранилище записей и история версий. Реестр содержит все конфигурационные записи.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enable_history | bool | true | Отслеживать версии записей |
history_type | string | memory | Хранилище: memory, sqlite, nil |
history_path | string | .wippy/registry.db | Путь к SQLite |
registry: history_type: sqlite history_path: /var/lib/wippy/registry.dbСм.: Концепция реестра, Модуль Registry
Маршрутизация сообщений между процессами на разных нодах.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
node_name | string | local | Идентификатор ноды этого реле |
relay: node_name: worker-1См.: Модель процессов
Supervisor
Заголовок раздела «Supervisor»Управление жизненным циклом сервисов. Контролирует внутренний управляющий почтовый ящик супервизора, используемый для диспетчеризации событий жизненного цикла.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
host.buffer_size | int | 1024 | Ёмкость внутреннего управляющего почтового ящика |
host.worker_count | int | 16 | Параллельные воркеры диспетчера |
supervisor: host: buffer_size: 2048 worker_count: 32См.: Супервизия
Lua Runtime
Заголовок раздела «Lua Runtime»Кэширование Lua VM и вычисление выражений.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
proto_cache_size | int | 60000 | Кэш скомпилированных прототипов |
main_cache_size | int | 10000 | Кэш main-чанков |
cache.enabled | bool | false | Сохранять скомпилированный байткод/typecheck-кэш на диск |
cache.dir | string | (системный каталог кэша) | Путь к каталогу кэша |
cache.mode | string | read_write | Режим кэша: read_write, read_only, write_only |
type_system.enabled | bool | false | Включить статическую проверку типов |
type_system.strict | bool | false | Считать предупреждения типов ошибками |
lua: proto_cache_size: 60000 cache: enabled: true dir: .cache/lua type_system: enabled: trueСм.: Обзор Lua
Кэширование поиска по реестру. Используется внутренне для поиска записей.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
query_cache_size | int | 1000 | Кэш результатов запросов |
regex_cache_size | int | 100 | Кэш скомпилированных регулярок |
finder: query_cache_size: 2000OpenTelemetry
Заголовок раздела «OpenTelemetry»Распределённая трассировка и экспорт метрик через OTLP.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled | bool | false | Включить OTEL |
endpoint | string | localhost:4318 | Эндпоинт OTLP |
protocol | string | http/protobuf | Протокол: grpc, http/protobuf |
service_name | string | wippy-runtime | Идентификатор сервиса |
service_version | string | Тег версии сервиса | |
insecure | bool | true | Разрешить незашифрованное OTLP-соединение |
sample_rate | float | 1.0 | Частота семплирования (0.0-1.0) |
propagators | string[] | [tracecontext, baggage] | Пропагаторы контекста |
traces_enabled | bool | true | Экспортировать трейсы |
metrics_enabled | bool | false | Экспортировать метрики |
http.enabled | bool | true | Трассировать HTTP-запросы |
http.extract_headers | bool | true | Извлекать trace-контекст из входящих заголовков |
http.inject_headers | bool | true | Внедрять trace-контекст в исходящие заголовки |
process.enabled | bool | true | Трассировать жизненный цикл процессов |
process.trace_lifecycle | bool | true | Выпускать спаны для spawn/terminate |
interceptor.enabled | bool | true | Трассировать вызовы функций |
interceptor.order | int | 100 | Приоритет перехватчика |
queue.enabled | bool | true | Трассировать публикацию/получение в очередях |
temporal.enabled | bool | false | Трассировать Temporal-воркфлоу |
otel: enabled: true endpoint: "http://jaeger:4318" traces_enabled: true process: trace_lifecycle: trueСтандартные переменные окружения OTEL (OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_SERVICE_NAME, OTEL_TRACES_SAMPLER_ARG, OTEL_PROPAGATORS, OTEL_SDK_DISABLED) переопределяют соответствующие поля.
См.: Наблюдаемость
Shutdown
Заголовок раздела «Shutdown»Корректное завершение работы.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
timeout | duration | 30s | Максимальное ожидание остановки компонентов |
shutdown: timeout: 60sMetrics
Заголовок раздела «Metrics»Буфер сбора внутренних метрик.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
buffer.size | int | 10000 | Размер буфера метрик |
interceptor.enabled | bool | false | Автоматически отслеживать вызовы функций |
metrics: buffer: size: 20000 interceptor: enabled: trueСм.: Модуль Metrics, Наблюдаемость
Prometheus
Заголовок раздела «Prometheus»Эндпоинт метрик Prometheus.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled | bool | false | Запустить сервер метрик |
address | string | localhost:9090 | Адрес прослушивания |
prometheus: enabled: true address: "0.0.0.0:9090"Открывает эндпоинт /metrics для Prometheus.
См.: Наблюдаемость
Cluster
Заголовок раздела «Cluster»Многонодовая кластеризация: gossip-обнаружение участников и ограниченное ядро консенсуса Raft. Архитектуру и операционную модель см. в Руководстве по кластеру; этот раздел — справочник по ключам конфигурации.
Верхний уровень
Заголовок раздела «Верхний уровень»| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled | bool | false | Включить кластеризацию |
name | string | hostname | Имя ноды; должно быть уникальным в кластере |
failure_domain | string | Метка зоны/стойки; рекламируется через gossip, чтобы voters распределялись по доменам |
Membership (gossip)
Заголовок раздела «Membership (gossip)»SWIM gossip через memberlist. Используется для обнаружения нод, обнаружения сбоев и распространения метаданных.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
membership.bind_addr | string | 0.0.0.0 | Адрес привязки gossip |
membership.bind_port | int | 7946 | Порт gossip (TCP+UDP) |
membership.advertise_addr | string | Адрес, используемый пирами для достижения этой ноды (NAT/k8s) | |
membership.join_addrs | string | Seed-адреса через запятую (host:port) | |
membership.secret_key | string | Ключ шифрования gossip в base64 (встроенный) | |
membership.secret_file | string | Путь к файлу с ключом шифрования gossip |
Internode (транспорт)
Заголовок раздела «Internode (транспорт)»TCP-меш, переносящий relay- и Raft-трафик между нодами. Raft работает по этому мешу (мультиплексирование через yamux); отдельного Raft-порта нет.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
internode.bind_addr | string | 0.0.0.0 | Адрес привязки меша |
internode.bind_port | int | 0 | Порт меша (0 = авто: 7950-7959, затем эфемерный) |
internode.auto_port | bool | true | Определить фактический порт при запуске, зафиксировать и объявить через gossip |
Raft (консенсус)
Заголовок раздела «Raft (консенсус)»Ограниченный Raft. Состояние Raft по умолчанию долговечно на ФС, хранится под raft.data_dir (по умолчанию ~/.wippy/store); перезапущенная нода всё равно переприсоединяется к кворуму от пиров. Записи store.kv.raft реплицируются через него. Bootstrap управляется gossip (по образцу Consul/Nomad bootstrap_expect).
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
raft.data_dir | string | ~/.wippy/store | Каталог для долговечного на ФС состояния Raft и долговечных снимков CRDT (под <data_dir>/_sys/). Бездисковый только когда путь не разрешается (нет домашнего каталога и ничего не задано) |
raft.enabled | bool | true | Запускать Raft-ноду; false делает эту ноду только gossip-клиентом |
raft.role | string | server | server запускает Raft-ноду; client — только gossip |
raft.eligible | bool | true | Может ли эта нода быть выбрана voter |
raft.priority | int | 100 | Приоритет выбора voter (меньше — предпочтительнее) |
raft.bootstrap_expect | int | 1 | Начальный размер кворума: 0=присоединиться к существующему, 1=одна нода, N=ждать N eligible пиров и сформировать кворум |
raft.max_voters | int | 5 | Максимум voters (должно быть нечётным); лишние eligible-ноды становятся standby |
raft.max_standbys | int | 4 | Невотирующие члены, готовые к повышению; ноды за пределами voters+standbys не являются членами Raft |
raft.reconcile_debounce | duration | 2s | Окно агрегации после gossip-события перед запуском reconciler voters |
raft.reconcile_timeout | duration | 2s | Ограничение на один проход reconcile |
raft.heartbeat_timeout | duration | 3s | Ожидание follower в простое перед началом выборов |
raft.election_timeout | duration | 3s | Таймаут выборов кандидата (не меньше heartbeat) |
raft.commit_timeout | duration | 500ms | Ритм heartbeat лидера в простое |
raft.snapshot_threshold | uint64 | 8192 | Записей лога с последнего снимка перед созданием нового |
raft.snapshot_interval | duration | 2m | Интервал проверки снимков |
raft.snapshot_retain | int | 3 | Хранить снимков |
raft.trailing_logs | uint64 | 10240 | Записей лога, оставляемых после снимка |
raft.max_append_entries | int | 16 | Максимум записей в одном AppendEntries RPC |
raft.leader_probe_interval | duration | 3s | Период проверки доступности лидера глобального реестра |
raft.leader_probe_grace | int | 3 | Последовательных неудач проверки до признания лидера недоступным |
Одна нода (разработка) — кластеризация включена, нода сразу bootstrap-ит себя:
cluster: enabled: true name: dev raft: bootstrap_expect: 1Трёхнодовый voting-кластер — каждая нода перечисляет остальные как seed и ждёт все три перед формированием кворума:
cluster: enabled: true name: node-1 failure_domain: us-east-1a membership: bind_port: 7946 join_addrs: "node-2:7946,node-3:7946" secret_file: /etc/wippy/cluster.key raft: bootstrap_expect: 3 max_voters: 5Только gossip-клиент — присоединяется к кластеру для именования/обмена сообщениями, но никогда не запускает Raft:
cluster: enabled: true name: edge-7 membership: join_addrs: "node-1:7946,node-2:7946" raft: role: clientСервер Language Server Protocol для интеграции с редакторами.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled | bool | false | Запустить TCP-сервер |
address | string | :7777 | Адрес прослушивания TCP |
http_enabled | bool | false | Включить HTTP-транспорт |
http_address | string | :7778 | Адрес прослушивания HTTP |
http_path | string | /lsp | Путь HTTP-эндпоинта |
http_allow_origin | string | * | Разрешённый CORS-источник |
max_message_bytes | int | 8388608 | Максимальный размер входящего сообщения |
lsp: enabled: true address: ":7777" http_enabled: trueСм.: LSP
Сетевой сервис
Заголовок раздела «Сетевой сервис»Менеджер оверлейных сетей (драйверы SOCKS5, I2P, Tailscale).
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
state_dir | string | .wippy/net | Каталог хранения состояния драйверов |
default_network | string | ID сети по умолчанию, применяемый когда в записях не указан network |
network_service: state_dir: /var/lib/wippy/net default_network: app:tailscaleСм.: Сетевые оверлеи
HTTP Dispatcher
Заголовок раздела «HTTP Dispatcher»Настройка общего пула HTTP-клиентов, используемого HTTP-диспетчированными функциями и исходящими запросами.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
dispatcher.http.timeout | duration | 0 (нет) | Таймаут на запрос |
dispatcher.http.max_idle_conns | int | 0 (stdlib) | Максимум простаивающих соединений по всем хостам |
dispatcher.http.max_idle_per_host | int | 0 (stdlib) | Максимум простаивающих соединений на хост |
dispatcher.http.idle_conn_timeout | duration | 0 (stdlib) | Таймаут простаивающего соединения |
dispatcher.http.max_clients | int | 0 (без ограничений) | Максимум различных клиентов в пуле |
dispatcher: http: timeout: 30s max_idle_per_host: 32Клиент реестра модулей, используемый wippy install/update.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
registry_url | string | https://hub.wippy.ai | Эндпоинт реестра |
modules: registry_url: https://internal-registry.example.comРасширения
Заголовок раздела «Расширения»Нативные Go-плагины, загружаемые при старте (только Unix).
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled | bool | true | Загружать расширения |
paths | string[] | Пути к файлам плагинов (относительно каталога конфигурации) |
extensions: enabled: true paths: - ./extensions/myplugin.soПеременные окружения
Заголовок раздела «Переменные окружения»| Переменная | Описание |
|---|---|
GOMEMLIMIT | Лимит памяти (переопределяет флаг --memory-limit) |
См. также
Заголовок раздела «См. также»- Справочник CLI — параметры командной строки
- Руководство по кластеру — архитектура и операции кластеризации
- Типы записей — все типы записей
- Наблюдаемость — логирование, метрики, трассировка