Документация spg99
Структура разделов: от быстрого старта до API v2 и безопасности.
1. Обзор spg99
1.1. Что такое spg99
spg99 — это PostgreSQL‑платформа как сервис с отделённым storage и «serverless»‑подходом к compute в российском облаке.
Базовая идея:
- •данные и WAL живут в S3‑совместимом хранилище в РФ через связку Pageserver/Safekeeper;
- •compute‑узлы PostgreSQL — одноразовые VM в облаке (сейчас — Яндекс.Облако), которые можно поднимать и останавливать сколько угодно раз;
- •на compute используется чистый PostgreSQL без форков и внутренних патчей; мы не меняем его поведение, опираемся на стандартные механизмы хранения и репликации;
- •всё это управляется единым Control Plane, который:
- ·хранит каталог tenants/БД/timeline/state/scale;
- ·выдаёт DSN и токены;
- ·оркестрирует запуск/остановку compute;
- ·предоставляет CLI spgctl и REST API v2.
Для приложения spg99 выглядит как обычный PostgreSQL:
- •стандартный DSN вида
postgres://<pg_user>:<pg_password>@provisioner.spg99.ru:5432/<db-name>?sslmode=require— pg_user/pg_password выдаются при создании tenant, <db-name> — имя вашей БД. - •стандартный PostgreSQL‑протокол по TLS;
- •нет привязки к конкретной VM или IP — есть один Gateway‑endpoint.
1.2. Какие задачи решает spg99
spg99 решает типичные инфраструктурные задачи вокруг PostgreSQL, которые в классической модели ложатся на команду разработки/DevOps/DBA:
Управление compute
Задачи:
- ·где и как поднять VM под Postgres;
- ·как её масштабировать;
- ·как жить с падениями и реконфигурацией.
В spg99 compute считается одноразовым: Control Plane создаёт/пересоздаёт и останавливает VM сам, а данные не зависят от её диска.
Надёжное хранение данных и WAL
В классической схеме на VM приходится думать о репликации, бэкапах, размещении WAL и восстановлении после аварий.
В spg99 хранение выносится в S3‑совместимое хранилище. Safekeeper принимает WAL, Pageserver применяет его и создаёт page‑слои в S3. VM можно потерять — данные останутся.
Массовое управление множеством БД
Для SaaS и внутренних платформ с десятками/сотнями БД: ручное управление инстансами дорого, простаивающие БД жгут деньги.
- ·каждая БД — запись в каталоге Control Plane;
- ·compute поднимается только когда есть трафик;
- ·idle‑БД могут быть в состоянии STOPPED с нулевым compute.
Прозрачный учёт стоимости
Модель:
- ·Storage — оплата за фактический объём данных в S3;
- ·Compute — оплата за часы работы VM (учитывая auto start/stop).
Это ближе к фактическому использованию, чем постоянная оплата за «вечную» VM.
1.3. Чем spg99 отличается от классического PostgreSQL на VM
Классическая модель «PostgreSQL на VM в облаке» требует самостоятельного управления инфраструктурой и оплаты простаивающих ресурсов. spg99 переводит это в платформенную модель.
Разделение storage и compute
В классике: данные и WAL на дисках VM; потеря VM/диска = риск потери данных, если бэкапы не настроены.
В spg99: данные и WAL в S3 через Safekeeper/Pageserver; compute можно выключить или пересоздать, storage остаётся; восстановление — поднять новый compute и подключить его к существующему timeline.
Control Plane вместо «зоопарка» ручных настроек
В классике: набор VM/дисков/сетей/скриптов, нет единого источника истины по tenants, БД, timelines и состояниям.
В spg99: Control Plane хранит каталог tenants → БД → timeline → state → scale; CP — точка входа через CLI или REST; от CP получают DSN, состояния, операции create/drop/scale/describe.
Auto start/stop compute вместо «вечных» инстансов
В классике: Postgres на VM работает 24/7, даже при отсутствии трафика вы платите за compute.
В spg99: первое подключение к DSN попадает в Gateway, он через CP поднимает compute если его нет; при idle CP останавливает compute (через ~5 минут простоя) — БД остаётся в STOPPED, данные в S3 и compute перестаёт потреблять ресурсы.
Единый Gateway‑endpoint вместо прямых подключений к VM
В классике: приложение подключается к конкретному host:port; при смене VM надо менять конфиги.
В spg99: все подключения идут на один Gateway‑адрес (например, provisioner.spg99.ru:5432); маршрутизация, выбор compute и холодный старт скрыты внутри; приложение работает со стабильным DSN и tenant/db без знаний о VM и S3.
Платформа vs. одиночный инстанс
spg99 предполагает многотенантность, унифицированное API и развитие в сторону шаблонов окружений, политик масштабирования, интеграций и SDK. Обычный Postgres на VM — просто инстанс, вокруг которого всё нужно строить самостоятельно.
1.4. Ключевые концепции архитектуры spg99 (в обзоре)
Разделённый storage/compute
storage: S3‑совместимое хранилище в РФ + Pageserver/Safekeeper; compute: одноразовые VM с PostgreSQL, управляемые CP; между ними — протоколы WAL/страничного доступа, прозрачные для приложения.
Control Plane как источник истины
знает о всех tenants, БД, timelines и состояниях; принимает команды через CLI/API (create, drop, scale, describe); решает, где и как запускать compute и как выдавать DSN.
Auto start/stop compute
запуск по первому подключению через Gateway, остановка при idle по политикам CP; стоимость compute приближается к фактическому времени работы.
Gateway и единый DSN
один точечный вход для всех БД и tenants; реализация PostgreSQL‑протокола и TLS на стороне Gateway; скрывает внутреннюю оркестрацию (lease, запуск VM, подключение к storage).
Следующие разделы документации детализируют эти концепции: описывают модель данных (tenants, db, timeline, state, scale), компонентную архитектуру (CP, Provisioner, Agent, Safekeeper, Pageserver, Gateway, S3) и конкретные сценарии использования и API.
2. Быстрый старт (CLI + REST)
spgctl тонко оборачивает REST API v2, принимает те же параметры и работает с теми же токенами, что и curl-примеры. Установите один раз: cargo install --locked --path apps/spgctl или make install-spgctl, добавьте $HOME/.cargo/bin в PATH.
Исходники CLI: github.com/database-solutions/spgctl. Клонируйте репозиторий и установите по инструкции.
Во всех примерах ниже t1 и d1 — примерные имена tenant/БД, подставьте свои.
Переменные окружения (один раз)
export CP_URL=https://provisioner.spg99.ru
export ACME_TOKEN=<ASK_SPG99_TO_ACCESS>Создать tenant
spgctl tenant create --name t1
spgctl tenant get --name t1
# REST-эквивалент
curl -sS -X POST "$CP_URL/v2/tenants" \
-H "Authorization: Bearer $ACME_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"t1"}' | jq .В ответе придут pg_user, pg_password и dsn_template — сохраните их.
Создать БД без немедленного старта compute
# CLI (start_immediately=false, initial_scale=0)
spgctl db create \
--tenant t1 \
--name d1 \
--size dev-small \
--start-immediately=false \
--initial-scale 0
# REST
curl -sS -X POST "$CP_URL/v2/tenants/t1/dbs" \
-H "Authorization: Bearer $ACME_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"d1","size":"dev-small","start_immediately":false,"initial_scale":0}' | jq .Запустить compute и проверить состояние
spgctl db start --tenant t1 --db d1 --scale 1
spgctl db describe --tenant t1 --db d1
# REST start + describe
curl -sS -X POST "$CP_URL/v2/tenants/t1/dbs/d1/start" \
-H "Authorization: Bearer $ACME_TOKEN" \
-H "Content-Type: application/json" \
-d '{"scale":1}' | jq .
curl -sS -X GET "$CP_URL/v2/tenants/t1/dbs/d1" \
-H "Authorization: Bearer $ACME_TOKEN" | jq .Ждите state=ready — это значит, что compute поднят и готов к подключениям.
Остановить или удалить БД
spgctl db stop --tenant t1 --db d1
spgctl db delete --tenant t1 --db d1 --force
# REST
curl -sS -X POST "$CP_URL/v2/tenants/t1/dbs/d1/stop" \
-H "Authorization: Bearer $ACME_TOKEN" \
-H "Content-Type: application/json" \
-d '{}' | jq .
curl -sS -X DELETE "$CP_URL/v2/tenants/t1/dbs/d1" \
-H "Authorization: Bearer $ACME_TOKEN" | jq .Полезное
- ·
spgctl db list --tenant t1иspgctl db get --id <uuid>отображают те же поля, что иGET /v2/tenants/:t/dbs. - ·
spgctl pingпроверяет health CP;--jsonвыводит сырой ответ API. - ·При сетевом таймауте
spgctl db createавтоматически делаетdescribe, чтобы показать итоговое состояние.
3. Концепции: tenants, db, timeline, state, scale
Tenant
Логическая граница изоляции: свой каталог в Control Plane, свой pg_user/pg_password и DSN-шаблон вида postgres://<pg_user>:<pg_password>@provisioner.spg99.ru:5432/<db-name>?sslmode=require. Внутри tenant — любое количество БД. В CP tenant также мапится на ps_tenant, по которому Pageserver/Safekeeper хранят timeline.
DB
Запись в каталоге CP (v2) с полями id, timeline_id, size, compute_profile, state, target_scale. Создание записи мгновенное: CP подготавливает timeline и креды, а compute запускается только по start/scale или по автозапуску из Gateway.
Timeline
UUID‑идентификатор истории БД. CP создаёт timeline на Pageserver (ensure_timeline_ps) и Safekeeper (ensure_timeline_sk) до запуска compute. Таймлайн хранится как «канонический» в db_store; даже если compute/VM потерялась, новый старт подключается к тому же timeline и видит данные в S3.
Scale и compute-профили
target_scale определяет желаемое количество compute (в демо — 0 или 1). current_scale отражает фактический запуск. Команды start/stop/scale меняют target_scale; Gateway по первому подключению может автозапустить БД до target_scale=1.
Профиль compute задаёт размеры ВМ (cores, RAM, диск, core_fraction). В демо используется профиль yc-dev: 2 vCPU, 4 ГБ RAM, 20 ГБ SSD, core_fraction 100%. Можно выбирать профиль через поле compute_profile при создании БД.
4. Control Plane API v2
REST API v2 управляет tenants, базами и жизненным циклом compute. Все запросы идут на Control Plane и требуют заголовка Authorization: Bearer <token> с сервисным токеном tenant. Тела — JSON, ответы — JSON; для удобства можно применять jq.
Во всех примерах t1 и d1 — примерные имена tenant/БД, используйте свои значения.
Базовая настройка окружения
export CP_URL=https://provisioner.spg99.ru
export ACME_TOKEN=<ASK_SPG99_TO_ACCESS>
export DSN=<GENERATED_BY_TOKEN>- •CP_URL — адрес Control Plane. В демо —
http://provisioner.spg99.ru. - •ACME_TOKEN — сервисный токен tenant (запросите у команды spg99). Им подписываются все запросы в заголовке
Authorization. - •DSN — строка подключения PostgreSQL для приложений. Её можно взять из описания БД (см.
GET /v2/tenants/:tenant/dbs/:db) или из выдачи токена.
Управление tenants
Создать tenant t1:
curl -sS -X POST "$CP_URL/v2/tenants" \
-H "Authorization: Bearer $ACME_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"t1"}' | jq .Список доступных tenants под текущим токеном:
curl -sS -X GET "$CP_URL/v2/tenants" \
-H "Authorization: Bearer $ACME_TOKEN" | jq .Удалить tenant (после удаления всех его БД):
curl -sS -X DELETE "$CP_URL/v2/tenants/t1" \
-H "Authorization: Bearer $ACME_TOKEN" | jq .Жизненный цикл БД внутри tenant
Важно про время операций
- •Создание tenant и записи БД в каталоге CP — мгновенное (каталог обновляется сразу).
- •Поднятие первой compute‑ВМ после start может занять до ~2 минут (аналогично для stop/start).
- •Проверять готовность лучше запросом describe:
GET /v2/tenants/:t/dbs/:dи убедиться, чтоstate= READY. Это означает, что ВМ поднята и готова к подключениям.
Справка по state в /v2/tenants/:t/dbs/:d
- •
creating— Control Plane создал запись/таймлайн и ждёт выделения compute; выставляется приstart_immediately=trueили при старте, пока нетworker_id. - •
booting— compute‑ВМ уже выделена (worker_idприсутствует), агент поднимает PostgreSQL и выполняет bootstrap; обычно длится до ~2 минут при холодном старте. - •
ready— compute запущен, DSN отвечает; после этого можно подключать приложения. - •
stopping— CP отправил stop_worker, ВМ гасится; финальное состояние после завершения —stopped. - •
stopped— compute выключен или ещё не запускался; storage/timeline в S3 готов, можно вызвать start. - •
deleting— идёт удаление через DELETE; ресурсы и запись удаляются в фоне. - •
error— последняя попытка старта/остановки завершилась ошибкой (таймаут bootstrap/provisioner). Повторный start переведёт state в creating/booting.
Что возвращает API
Во всех примерах t1 и d1 — условные имена tenant/БД, подставьте свои.
Создание tenant (важно: сразу сохраняем DSN‑шаблон и креды):
{
"tenant": "t1",
"created_at": "2025-12-10T06:57:50Z",
"db_count": 0,
"pg_user": "tnt_xxxxxx",
"pg_password": "<secret>",
"dsn_template": "postgres://tnt_xxxxxx:<secret>@provisioner.spg99.ru:5432/<db-name>?sslmode=require"
}Подставьте имя БД вместо <db-name> и сохраните DSN — именно его использует приложение. Креды выдаются только в ответе создания tenant.
Создание БД со scale=0 (start_immediately=false):
{
"id": "73cd73e2-0d12-4f63-9389-c202ab345b28",
"tenant": "t1",
"name": "d1",
"size": "dev-small",
"state": "stopped",
"current_scale": 0,
"target_scale": 0,
"active_connections": 0,
"created_at": "2025-12-10T07:10:01Z",
"updated_at": "2025-12-10T07:10:01Z"
}Старт compute (scale=1) — ответ может быть 202 ACCEPTED со state=creating/booting:
{
"id": "73cd73e2-0d12-4f63-9389-c202ab345b28",
"tenant": "t1",
"name": "d1",
"size": "dev-small",
"state": "creating",
"current_scale": 0,
"target_scale": 1,
"active_connections": 0,
"created_at": "2025-12-10T07:10:01Z",
"updated_at": "2025-12-10T07:11:07Z"
}Ждите пока describe вернёт state: ready с current_scale=1.
Поля worker_id, backend_addr, backend_port, last_used_at могут отсутствовать, пока compute не поднят.
Создать БД d1 без немедленного запуска compute (останется в состоянии STOPPED, storage уже подготовлен):
curl -sS -X POST "$CP_URL/v2/tenants/t1/dbs" \
-H "Authorization: Bearer $ACME_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "d1",
"size": "dev-small",
"start_immediately": false
}' | jq .Запустить compute для БД (scale=1). Можно повторять — команда идемпотентна:
curl -sS -X POST "$CP_URL/v2/tenants/t1/dbs/d1/start" \
-H "Authorization: Bearer $ACME_TOKEN" \
-H "Content-Type: application/json" \
-d '{"scale":1}' | jq .Посмотреть описание БД (имя, state, scale, timeline, DSN). DSN из ответа можно отдать приложению:
curl -sS -X GET "$CP_URL/v2/tenants/t1/dbs/d1" \
-H "Authorization: Bearer $ACME_TOKEN" | jq .Остановить compute (scale=0, storage остаётся в S3):
curl -sS -X POST "$CP_URL/v2/tenants/t1/dbs/d1/stop" \
-H "Authorization: Bearer $ACME_TOKEN" \
-H "Content-Type: application/json" \
-d '{}' | jq .Удалить БД из tenant:
curl -sS -X DELETE "$CP_URL/v2/tenants/t1/dbs/d1" \
-H "Authorization: Bearer $ACME_TOKEN" | jq .Подключение приложений
Приложение использует постоянный DSN с Gateway — compute можно запускать/останавливать без смены строки подключения. Шаблон DSN приходит в ответе создания tenant: подставьте имя БД вместо <db-name> и используйте выданные pg_user/pg_password.
postgres://<pg_user>:<pg_password>@provisioner.spg99.ru:5432/<db-name>?sslmode=requireБыстрая проверка подключения и холодного/горячего отклика: time psql "$DSN" -c "select 1". В горячем режиме (state=READY) CP даёт ответ < 0.5 сек, дальше влияет сеть.
Если compute ушёл в stopped из-за простоя, первое подключение через Gateway автоматически запустит ВМ; старт занимает до ~2 минут, после чего запрос получит ответ от БД.
Gateway держит TLS и маршрутизацию, Control Plane поднимает compute по первому подключению и останавливает при простое — для клиента это выглядит как обычный PostgreSQL.
5. Архитектура компонентов
Control Plane
Единый каталог tenants/БД/timeline/state/scale, API v2 и оркестрация жизненного цикла. Хранит записи в catalog_v2 (SQLite), выдаёт DSN/pg_user/pg_password, генерирует register_token для compute, подписывает TLS‑серты для gateway/воркеров, управляет auto start/stop и выдает lease Gateway (чтобы один gateway держал compute). Операции start/stop проходят через Provisioner; CP следит за state, target_scale и idle‑таймерами.
Provisioner
Сервис, который создаёт и останавливает VM под compute (в демо — адаптер к Yandex Cloud). Подбирает профиль ВМ по compute_profile, ставит образ, сеть, SG, прокидывает bootstrap‑параметры (register_token, timeline, addresses Pageserver/Safekeeper, CP). Возвращает worker_id, который CP использует для lease и маршрутизации.
Safekeeper
Принимает WAL от PostgreSQL compute, буферизует и выгружает сегменты в S3. Обеспечивает durable WAL для последующего воспроизведения и репликации; CP гарантирует, что timeline создан на Safekeeper до запуска compute.
Pageserver
Подписывается на WAL из Safekeeper, применяет его и строит page‑слои в S3 для каждого timeline. Отдаёт страницы compute‑ноде при старте и в работе, так что восстановление после остановки — это подключение compute к готовому timeline.
Gateway
Единственный внешней endpoint PostgreSQL/TLS. При первом подключении запрашивает lease у CP; если compute отсутствует или в STOPPED — триггерит start через CP и Provisioner, ждёт готовности и проксирует протокол до backend. Держит TLS, SNI и ограничивает одновременный доступ к ВМ одним gateway.
Agent + PostgreSQL
Агент живёт внутри compute‑ВМ. После bootstrap от CP тянет TLS‑сертификат, кладёт креды БД, стартует системный PostgreSQL (17) и следит за его состоянием: снимает stale postmaster.pid, прогревает конфиг, мониторит лог, перестраивает pg_hba. Через workers/hello регистрируется в CP по register_token и получает bootstrap‑spec (timeline, адреса Pageserver/Safekeeper, backend creds). Экспонирует метрики, умеет корректно останавливать postgres по сигналу stop_db от CP.
S3‑хранилище
Каноничное место хранения WAL и page‑слоёв (тенант/БД/timeline/…). Compute‑ВМ одноразовая: потеря/перезапуск не трогает данные, потому что state БД определяется timeline в S3 + WAL из Safekeeper.
6. Операции: создание/удаление, scale, восстановление
Создание БД
- Запрос create — CP создаёт запись каталога, генерирует
timeline_id, размещает его в Pageserver/Safekeeper, выдаётregister_token, сохраняетtarget_scale. - start_immediately? false → state=stopped, storage готов, compute не поднимается. true → CP помечает state=creating и запускает compute.
- Bootstrap — если требуется старт, CP зовёт Provisioner; Provisioner создаёт ВМ и передаёт агенту register_token/timeline/адреса. Agent делает
workers/hello, получает bootstrap‑spec, стартует PostgreSQL 17 и подключается к Pageserver/Safekeeper. - Готовность — CP обновляет state=ready после успешного bootstrap. DSN из describe уже можно отдавать приложению.
Scale 0 ↔ 1 (start/stop)
- ·Start:
POST /v2/tenants/:t/dbs/:d/startилиspgctl db start. CP ставит state=starting/creating, target_scale=1, запускает Provisioner. Agent проходит bootstrap; при READY state=ready, current_scale=1. Если БД была в STOPPED по idle, то первый клиентский коннект через Gateway также инициирует start (до ~2 минут). - ·Stop:
POST /v2/tenants/:t/dbs/:d/stopилиspgctl db stop. CP ставит state=stopping, target_scale=0, отправляет команду агенту остановить PostgreSQL, затем гасит ВМ через Provisioner. Финальное state=stopped, данные в S3. - ·Проверка: описанием
GET /v2/tenants/:t/dbs/:dилиspgctl db describe— ждите state=ready для старта и state=stopped для остановки.
Удаление
- Остановите compute (state=stopped) или вызовите delete с
forceчерез spgctl. - DELETE /v2/tenants/:t/dbs/:d — CP помечает state=deleting, удаляет запись в каталоге, db_store и инициирует очистку ресурсов в фоне.
- При каскадном удалении tenant CP обходит все его БД и удаляет их перед удалением tenant.
Восстановление после сбоя compute
- Если ВМ потерялась/упала, CP при следующем start или первом подключении через Gateway создаёт новую ВМ через Provisioner.
- Agent снова делает
hello, получает bootstrap‑spec с тем же timeline и подключается к Pageserver/Safekeeper. - PostgreSQL поднимается на свежей ВМ, подтягивая данные из S3/page‑слоёв; state переходит в ready. Приложения используют тот же DSN.
- Если предыдущий start завис, CP переведёт state в error; повторный start перезапускает цепочку bootstrap с новым register_token.
7. Настройка безопасности
Токены и учётные данные
- •API key (Bearer) — непрозрачный токен CP вида
spg99_api_key_…, хранится захешированным в catalog_v2 (token_prefix + sha256). Имеет scope (global/account/tenant) и флагиcan_create_db/can_scale/can_delete. Передаётся только в заголовкеAuthorization: Bearer. - •pg_user / pg_password — креды PostgreSQL для клиента, выдаются в ответе создания tenant и в DSN. Они отделены от API key: один токен для CP, другие — для БД. Практика подтверждённая: API‑ключ не должен попадать в DSN.
- •client_token — опциональный токен БД; если не передать, CP использует
SPG99_DEFAULT_DB_TOKEN(по умолчаниюyc-demo). Попадает в ответ describe DB и может входить в DSN. - •register_token — одноразовый токен для compute‑агента; CP выдаёт его при создании/старте БД. Агент использует
workers/helloдля bootstrap (timeline, адреса PS/SK). Не нужен клиентам.
TLS и разделение секретов
- •Gateway принимает только TLS PostgreSQL, сертификат подписан CP; агент получает сертификат по CSR, CP выдаёт отдельный cert per worker.
- •Креды БД (pg_user/pg_password) шифруются в каталоге CP (pg_secret_key) и передаются клиенту только в ответе создания tenant/describe DB.
- •API key не смешивается с DSN: приложения используют только DSN (pg_user/pg_password), операционные вызовы CP — только Bearer токен.
Ротация и ограничения
- •API key поддерживает expires_at; пользователям выдаются tenant-scoped ключи для изоляции и минимальных прав.
- •client_token можно переопределить при создании БД (поле
token), либо использовать дефолтный. - •register_token короткоживущий и генерируется на каждый новый старт/compute.
8. Наблюдаемость и метрики
Эндпоинты /metrics
- •Control Plane — Prometheus /metrics с метриками:
cp_autostart_total,cp_idle_autostop_total,cp_provisioner_http_requests_total{op,code},cp_describe_latency_seconds,cp_catalog_entries, PKI метрики (cp_pki_sign_total,cp_pki_active_workers), bootstrap/tokens (cp_bootstrap_push_total,cp_tokens_invalid_total). - •Gateway — /metrics с TLS‑ручками к backend:
gw_backend_tls_ok_total,gw_backend_tls_handshake_errors_total. Можно добавить счётчики подключений/lease в будущем.
Что смотреть
- •Latency cold start: время от
start/ первого подключения доstate=ready. Триггерить alert > 120s. - •Idle auto-stop: рост
cp_idle_autostop_totalподтверждает экономию; отсутствие — проверка idle‑таймеров. - •Provisioner ошибки: лейблы
cp_provisioner_http_requests_total{op,code}; аномальный рост 5xx — сигнал к проверке YC/ресурсов. - •PKI/hello:
cp_pki_sign_fail_totalиcp_tokens_invalid_total— ошибки выдачи сертификатов и регистр‑токенов для агентов.
Примеры алертов/дашбордов
- •Alert: cold start > 120s или доля start→ready > 2 мин > 5% за 15 мин.
- •Alert: ошибки TLS к backend на Gateway (рост gw_backend_tls_handshake_errors_total).
- •Dashboard: cp_autostart_total/id le_autostop_total + describe_latency_seconds для оценки реакции CP и частоты cold start/stop.
- •Dashboard: provisioner_http_requests_total с кодами, чтобы видеть 5xx/4xx.
9. Roadmap / Release notes
- •Масштабирование за пределы 1 compute: поддержка нескольких ВМ на одну БД с координацией через CP.
- •Web-консоль для управления tenants/БД и выдачи DSN/кредов без CLI.
- •Новые профили compute (больше RAM/CPU/SSD) и ускорение cold start за счёт оптимизации bootstrap и подгрузки page-слоёв.
- •Pay as you go: готовые дашборды в Grafana и логи в Kibana по каждому tenant — cold start latency, состояние compute, ошибки CP/Provisioner, автостарт/остановки — из коробки без ручной настройки.