# Фаза 2.2 — Heartbeat и daily report через SAC Агент **уже** шлёт в SAC (в т.ч. в `exclusive`): | Тип | Интервал (ssh-monitor) | |-----|-------------------------| | `agent.heartbeat` | каждые **12 ч** | | `report.daily.ssh` | раз в сутки после `DAILY_REPORT_HOUR` | SAC отображает их в **События** и на **Dashboard / Хосты**. --- ## UI SAC - **Dashboard:** счётчики heartbeat/отчётов за 24 ч, хосты с устаревшим heartbeat. - **Хосты:** колонки *Агент* (`online` / `stale` / `unknown`), время последнего heartbeat и отчёта (ссылка на **Отчёты** по hostname). - **Отчёты** (`/reports`): список `report.daily.*` по узлам; клик по строке — карточка с метриками и полным текстом (HTML/`report_body` в `details`). - Старые события без `details.report_body` показывают подсказку обновить агент. --- ## Настройка порога «живости» (сервер SAC) В `config/sac-api.env`: ```bash # По умолчанию 780 мин (13 ч) — чуть больше интервала heartbeat агента (12 ч) SAC_HEARTBEAT_STALE_MINUTES=780 ``` После изменения: `sudo systemctl restart sac-api`. --- ## Проверка на пилотном хосте (exclusive) 1. Дождаться heartbeat или ускорить тест: на агенте временно уменьшить интервал нельзя без правки кода — проще подождать или вручную: ```bash sudo /usr/local/bin/ssh-monitor --dry-run ``` (не шлёт реально; для реального теста — дождаться цикла 12 ч или смотреть уже пришедшие события). 2. В SAC UI → **События**, фильтр `type=agent.heartbeat`. 3. **Хосты** → статус `online` после свежего heartbeat. 4. Ежедневный отчёт: после `DAILY_REPORT_HOUR` — событие `report.daily.ssh` (от агента) **или** от SAC при `SAC_DAILY_REPORT_ENABLED=true` и отсутствии отчёта агента за сутки. --- ## SAC: отчёт без агента (exclusive / пропуск агента) В `config/sac-api.env`: ```bash SAC_DAILY_REPORT_ENABLED=true SAC_DAILY_REPORT_HOUR=9 SAC_DAILY_REPORT_TIMEZONE=Europe/Moscow SAC_DAILY_REPORT_SKIP_IF_AGENT_SENT=true SAC_DAILY_REPORT_REQUIRE_ACTIVITY=true ``` - Job: `cd backend && .venv/bin/python -m app.jobs.daily_report` (ручной прогон: `--force`). - Timer: `deploy/systemd/sac-daily-report.service` + `.timer` (по умолчанию 09:15 UTC в unit; час проверяется по `SAC_DAILY_REPORT_TIMEZONE`). - Оповещение: `notify_daily_report` — **не** режется `NOTIFY_MIN_SEVERITY=warning` (severity отчёта `info`). - UI **Отчёты** и Telegram используют `details.report_html` / `report_body` как у агента. Установка timer (один раз на сервере): ```bash sudo cp /opt/security-alert-center/deploy/systemd/sac-daily-report.service /etc/systemd/system/ sudo cp /opt/security-alert-center/deploy/systemd/sac-daily-report.timer /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now sac-daily-report.timer ``` --- ## Деплой ```bash sudo /opt/sac-deploy.sh ``` --- ## См. также - [pilot-2.1-exclusive.md](pilot-2.1-exclusive.md) - [agent-integration.md](agent-integration.md)