94 lines
3.8 KiB
Markdown
94 lines
3.8 KiB
Markdown
# Фаза 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:00** в `SAC_DAILY_REPORT_TIMEZONE` (генерируется из `SAC_DAILY_REPORT_HOUR`, без `RandomizedDelaySec`).
|
||
- Оповещение: `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 bash /opt/security-alert-center/deploy/systemd/render-sac-daily-report-timer.sh \
|
||
/opt/security-alert-center/config/sac-api.env \
|
||
/etc/systemd/system/sac-daily-report.timer
|
||
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)
|