feat: suppress sac-fail.count on shutdown (2.3.2-SAC)
Phase 4.2: SAC_SUPPRESS_FAIL_COUNT during lifecycle shutdown so restart during SAC deploy does not trip Telegram fallback. Add docs/sac-ingest.ru.md for SAC_TIMEOUT_SEC guidance, smoke test, and release manifest.
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
# SAC ingest: таймауты и fallback
|
||||
|
||||
Документ для эксплуатации **ssh-monitor** с `UseSAC=fallback` или `exclusive` при нагрузке на SAC (массовый update агентов, deploy backend).
|
||||
|
||||
См. также: [ingest-mass-update-backlog.ru.md](https://git.kalinamall.ru/PapaTramp/security-alert-center/src/branch/main/docs/ingest-mass-update-backlog.ru.md) (SAC + ops).
|
||||
|
||||
## `SAC_TIMEOUT_SEC`
|
||||
|
||||
Таймаут **connect** и **max-time** для `curl` к SAC (`/health`, `POST /api/v1/events`).
|
||||
|
||||
| Сценарий | Рекомендация |
|
||||
|----------|--------------|
|
||||
| Обычная нагрузка | **45** (дефолт в `ssh-monitor.conf.example` и при миграции с 12) |
|
||||
| Массовый restart агентов, тяжёлый ingest на SAC | **60–90** на время окна обслуживания |
|
||||
| SAC на том же хосте перезапускается (`sac-deploy`) | Кратковременные отказы POST — норма; не поднимать таймаут «навсегда» без причины |
|
||||
|
||||
На стороне SAC (nginx) для ingest задан `proxy_read_timeout 120s` на `POST /api/v1/events`. Агентский таймаут **не обязан** равняться 120: достаточно, чтобы POST не обрывался раньше типичного ответа API. При `SAC_TIMEOUT_SEC` меньше nginx-лимита агент уйдёт в spool и `sac-fail.count`, а не «висит» минутами.
|
||||
|
||||
Проверка после смены:
|
||||
|
||||
```bash
|
||||
sudo ssh-monitor --check-config
|
||||
sudo ssh-monitor --check-sac
|
||||
```
|
||||
|
||||
## `sac-fail.count` и режим `fallback`
|
||||
|
||||
При ошибке POST ingest счётчик в `SAC_FAIL_COUNT_FILE` увеличивается. После **`SAC_FALLBACK_FAILURES`** подряд (по умолчанию 5) агент перестаёт слать в SAC и шлёт только в локальный Telegram, пока `/health` снова не станет OK.
|
||||
|
||||
**Сброс счётчика:** любой успешный POST (в т.ч. heartbeat) обнуляет `sac-fail.count`.
|
||||
|
||||
**Shutdown / SIGTERM (с 2.3.2-SAC):** при остановке монитора (`systemctl stop`, restart во время SAC-update) неудачный lifecycle POST **не увеличивает** счётчик — иначе после штатного restart пачки хостов агент ложно уходит в Telegram-fallback.
|
||||
|
||||
Lifecycle при SAC-update по-прежнему **пропускается**, если существует state-file `agent-update-in-progress` (см. `update_ssh_monitor.sh`).
|
||||
|
||||
## Операционные правила
|
||||
|
||||
1. Не совмещать `sudo /opt/sac-deploy.sh` и массовое «Обновить ssh-monitor» по многим хостам в одно окно.
|
||||
2. Обновлять Linux-хосты **пачками по 2–3**.
|
||||
3. На зрелых хостах — **`UseSAC=exclusive`**, если локальный Telegram при fallback не нужен.
|
||||
@@ -25,7 +25,8 @@
|
||||
| **2.1.7-SAC** | Фаза 1 + выбранное из Фазы 4 | Права, `REPO_URL` обязателен, webhook, docs | ✅ реализовано |
|
||||
| **2.1.8-SAC** | Дополнение к 1.1 | SAC-first update: hardening прав на каждом прогоне updater | ✅ реализовано |
|
||||
| **2.1.9-SAC** | Дополнение к 1.x | Watchdog: `🖥️ Сервер:` в Telegram (как у агента) | ✅ реализовано |
|
||||
| **2.3.0-SAC** | **Фаза 3** | Парсер конфига без `source`, валидация, удаление BACKUP_WEBHOOK | ✅ реализовано |
|
||||
| **2.3.2-SAC** | **Фаза 4.2** | Shutdown: не крутить `sac-fail.count`; docs `SAC_TIMEOUT_SEC` | ✅ реализовано |
|
||||
| **2.3.1-SAC** | Hotfix | `--check-config` + whitelist IPv4 | ✅ реализовано |
|
||||
| **2.2.3-SAC** | Дополнение к 2.2.x | Подавление sudo TG при SAC bootstrap/update | ✅ реализовано |
|
||||
| **2.2.1-SAC** | Дополнение к 2.2.0 | Подавление lifecycle/watchdog TG при SAC-update | ✅ реализовано |
|
||||
| **2.2.0-SAC** | **Фаза 2** | Manifest, pinned ref, без слепого `reset --hard` | ✅ реализовано |
|
||||
@@ -33,7 +34,7 @@
|
||||
|
||||
Bump: `ssh-monitor` (`SSH_MONITOR_VERSION`) + `version.txt` в каждом релизе.
|
||||
|
||||
**Текущий статус (2026-07-08):** фаза 3 закрыта (2.3.0-SAC). **Дальше — ingest backlog (SAC) и опционально GPG / GIT_REF=tag на проде.**
|
||||
**Текущий статус (2026-07-08):** фаза **4.2** закрыта (2.3.2-SAC). Дальше — ops (`UseSAC=exclusive`, пачки update) и опционально GPG / `GIT_REF=tag` на проде.
|
||||
Backlog по ingest при массовом update (SAC + ops): [ingest-mass-update-backlog.ru.md](https://git.kalinamall.ru/PapaTramp/security-alert-center/src/branch/main/docs/ingest-mass-update-backlog.ru.md) (отдельный ToDo).
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user