Add cron schedules and sync docs
This commit is contained in:
@@ -36,6 +36,13 @@ interval = "60s"
|
||||
timeout = "10s"
|
||||
notifications_enabled = true
|
||||
resource_limits = { cpu_time = "5s", memory = "256MiB", open_files = 128 }
|
||||
|
||||
[[checks]]
|
||||
id = "daily_backup"
|
||||
name = "Daily backup freshness"
|
||||
command = "/usr/local/lib/monlet/check_backup_freshness.sh"
|
||||
cron = "CRON_TZ=UTC 15 6 * * *"
|
||||
timeout = "2m"
|
||||
```
|
||||
|
||||
Ключи:
|
||||
@@ -49,11 +56,14 @@ resource_limits = { cpu_time = "5s", memory = "256MiB", open_files = 128 }
|
||||
- `metrics.listen` — адрес `/metrics`.
|
||||
- `checks[].id` — стабильный ID проверки.
|
||||
- `checks[].command` — shell-команда строкой; однострочно в `"..."`, многострочно в `'''...'''`.
|
||||
- `checks[].interval` — период запуска.
|
||||
- `checks[].interval` — период запуска (`60s`, `5m`, `1h`); обязателен, если не задан `checks[].cron`.
|
||||
- `checks[].cron` — cron-style расписание; обязателен, если не задан `checks[].interval`. Поддерживаются стандартные 5 полей, `@hourly`/`@daily` и `CRON_TZ=...`; seconds-format, `@every` и `@reboot` отклоняются.
|
||||
- `checks[].timeout` — таймаут; при таймауте результат `critical`.
|
||||
- `checks[].notifications_enabled` — разрешить серверные уведомления по этой проверке.
|
||||
- `checks[].resource_limits` — опциональные лимиты процесса: CPU-время, virtual memory, open files.
|
||||
|
||||
Для каждой проверки нужно задать ровно один способ расписания: `interval` или `cron`. Interval-проверки запускаются сразу после старта/reload, затем по периоду. Cron-проверки ждут ближайший cron-slot и не запускаются немедленно при старте.
|
||||
|
||||
Exit code: `0=ok`, `1=warning`, `2=critical`, `3+=unknown`.
|
||||
|
||||
Env агента:
|
||||
@@ -65,6 +75,7 @@ Reload:
|
||||
- `systemctl reload monlet-agent` перечитывает локальный TOML через `SIGHUP`.
|
||||
- Ошибочный config не применяется, старый продолжает работать.
|
||||
- Уже запущенный check при reload не убивается, а доживает до своего `timeout`.
|
||||
- При смене расписания interval-check запускается после текущего in-flight run; cron-check ждёт следующий cron-slot.
|
||||
- Для изменения `agent_id`, `state_dir`, `server.*`, `metrics.*` нужен restart.
|
||||
|
||||
## Server env
|
||||
@@ -97,12 +108,14 @@ MONLET_EVENTS_RETENTION_MONTHS=36
|
||||
MONLET_EVENTS_FUTURE_PARTITIONS=3
|
||||
MONLET_PARTITION_MAINTENANCE_INTERVAL_SEC=3600
|
||||
MONLET_OUTBOX_RETENTION_MAX_ROWS=50000
|
||||
MONLET_OUTBOX_PRUNE_BATCH_SIZE=5000
|
||||
|
||||
MONLET_EVENT_DEDUP_RETENTION_DAYS=30
|
||||
MONLET_EVENT_DEDUP_PRUNE_BATCH_SIZE=5000
|
||||
|
||||
MONLET_MAX_PENDING_AGENTS=10000
|
||||
MONLET_PENDING_AGENT_TTL_DAYS=7
|
||||
MONLET_PENDING_AGENT_PRUNE_BATCH_SIZE=1000
|
||||
|
||||
MONLET_ENABLE_NOTIFIER_WORKER=true
|
||||
MONLET_NOTIFIER_TICK_SEC=5
|
||||
@@ -154,10 +167,12 @@ Liveness-детектор:
|
||||
- `MONLET_EVENTS_FUTURE_PARTITIONS` — сколько будущих месячных партиций создавать заранее (по умолчанию 3).
|
||||
- `MONLET_PARTITION_MAINTENANCE_INTERVAL_SEC` — период обслуживания партиций и prune (по умолчанию 3600).
|
||||
- `MONLET_OUTBOX_RETENTION_MAX_ROWS` — верхняя граница строк в outbox; лишние обрезаются (по умолчанию 50000).
|
||||
- `MONLET_OUTBOX_PRUNE_BATCH_SIZE` — размер пакета при очистке terminal outbox-записей (по умолчанию 5000).
|
||||
- `MONLET_EVENT_DEDUP_RETENTION_DAYS` — хранение записей идемпотентности `event_id` (по умолчанию 30).
|
||||
- `MONLET_EVENT_DEDUP_PRUNE_BATCH_SIZE` — размер пакета при очистке dedup-записей (по умолчанию 5000).
|
||||
- `MONLET_MAX_PENDING_AGENTS` — лимит новых непринятых агентов (по умолчанию 10000).
|
||||
- `MONLET_PENDING_AGENT_TTL_DAYS` — очистка старых pending-ключей (по умолчанию 7).
|
||||
- `MONLET_PENDING_AGENT_PRUNE_BATCH_SIZE` — размер пакета при очистке старых pending-ключей (по умолчанию 1000).
|
||||
|
||||
Notifier worker:
|
||||
|
||||
@@ -181,21 +196,29 @@ Notifier каналы:
|
||||
|
||||
## Web env
|
||||
|
||||
Веб-UI читает auth-настройки из env. Без них read-only страницы доступны локально, но admission-мутации возвращают `403`.
|
||||
Веб-UI читает API/auth/timezone-настройки из env. Без auth-настроек read-only страницы доступны локально, но admission-мутации возвращают `403`.
|
||||
|
||||
```env
|
||||
MONLET_API_BASE_URL=http://127.0.0.1:8000
|
||||
MONLET_API_TOKEN=replace-with-server-token
|
||||
MONLET_WEB_TIME_ZONE=UTC
|
||||
MONLET_WEB_AUTH_USERNAME=admin
|
||||
MONLET_WEB_AUTH_PASSWORD=replace-with-strong-password
|
||||
MONLET_WEB_SESSION_SECRET=replace-with-random-32-bytes-min
|
||||
MONLET_WEB_SESSION_TTL_SEC=604800
|
||||
NEXT_PUBLIC_MONLET_POLL_MS=10000
|
||||
# или вместо локального логина — доверие reverse-proxy:
|
||||
# MONLET_WEB_TRUST_PROXY_AUTH=true
|
||||
```
|
||||
|
||||
- `MONLET_API_BASE_URL` — базовый URL сервера для server-side fetch.
|
||||
- `MONLET_API_TOKEN` — Bearer-токен для запросов UI к серверу; в браузер не передаётся.
|
||||
- `MONLET_WEB_TIME_ZONE` — IANA timezone для отображения дат (по умолчанию `UTC`).
|
||||
- `MONLET_WEB_AUTH_USERNAME` / `MONLET_WEB_AUTH_PASSWORD` — учётные данные локального cookie-логина.
|
||||
- `MONLET_WEB_SESSION_SECRET` — секрет подписи сессии, минимум 32 байта; короче — UI считает auth неправильно настроенным.
|
||||
- `MONLET_WEB_SESSION_TTL_SEC` — срок жизни сессии (по умолчанию 604800 = 7 дней).
|
||||
- `MONLET_WEB_TRUST_PROXY_AUTH` — `true` включает доверие заголовку `X-Forwarded-User` от reverse-proxy. Несовместимо с локальным логином: одновременная настройка обоих режимов — ошибка (UI отвечает `500`).
|
||||
- `NEXT_PUBLIC_MONLET_POLL_MS` — интервал браузерного polling в миллисекундах (по умолчанию 10000); для production-сборок Next.js это build-time переменная.
|
||||
|
||||
## Минимальная схема
|
||||
|
||||
|
||||
Reference in New Issue
Block a user