Документация для админа и runbook: коды регистрации, устройства, настройка SAC_FCM на сервере. Co-authored-by: Cursor <cursoragent@cursor.com>
3.9 KiB
Runbook: эксплуатация SAC
Краткие процедуры для prod (sac.kalinamall.ru, native install в /opt/security-alert-center).
Деплой приложения
sudo /opt/sac-deploy.sh
Скрипт: git pull / reset --hard, pip install, alembic upgrade head, npm run build, systemctl restart sac-api.
Проверка:
curl -sS https://sac.kalinamall.ru/health | jq .
Ожидается status: ok, database: ok. При устаревших heartbeat агентов — status: degraded, поле hosts_stale > 0.
Мобильные устройства (Seaca)
См. seaca-mobile.md и seaca-fcm.md.
После деплоя 0.9.0+: в веб-SAC включить мобильные устройства, выдать код оператору. Push — после настройки FCM и сборки APK с google-services.json.
Резервное копирование PostgreSQL
sudo -u postgres pg_dump -Fc sac > /var/backups/sac-$(date +%Y%m%d).dump
Восстановление (на тестовый инстанс):
sudo -u postgres pg_restore -d sac_test --clean /var/backups/sac-YYYYMMDD.dump
Перед restore на prod — остановить API: sudo systemctl stop sac-api.
Retention (очистка БД)
Политика по умолчанию (config/sac-api.env):
| Данные | Срок |
|---|---|
events |
90 дней (SAC_EVENTS_RETENTION_DAYS) |
problems со статусом resolved |
180 дней (SAC_PROBLEMS_RETENTION_DAYS) |
Ручной прогон:
sudo -u sac bash -c '
set -a; source /opt/security-alert-center/config/sac-api.env; set +a
cd /opt/security-alert-center/backend
.venv/bin/python -m app.jobs.retention
'
Установка ежедневного timer (один раз):
sudo cp /opt/security-alert-center/deploy/systemd/sac-retention.service /etc/systemd/system/
sudo cp /opt/security-alert-center/deploy/systemd/sac-retention.timer /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now sac-retention.timer
systemctl list-timers sac-retention.timer
Суточные отчёты (F-NOT-05)
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
systemctl list-timers sac-daily-report.timer
# Ручной прогон (игнор часа)
sudo -u sac bash -lc 'cd /opt/security-alert-center/backend && .venv/bin/python -m app.jobs.daily_report --force'
Переменные: SAC_DAILY_REPORT_* в config/sac-api.env (см. deploy/env.native.example).
Health и мониторинг
| Endpoint | Назначение |
|---|---|
GET /health |
БД, версия, hosts_stale, last_event_received_at |
GET /api/v1/stream/events |
SSE для UI (счётчики + last_event_id каждые 5 с) |
Агенты: GET /health без JWT. UI Dashboard: блок «Последние события» подгружается при смене last_event_id в SSE.
Типовые проблемы
События в Telegram есть, в UI нет — проверить ingest (лог агента SAC: accepted), режим UseSAC, обновить Dashboard (live ~5 с).
422 на ingest — см. Logs/sac-last-post.json на Windows-агенте; обновить Sac-Client.ps1 (RDP) или sac-client.sh (Linux).
Устаревший heartbeat — увеличить SAC_HEARTBEAT_STALE_MINUTES или проверить agent.heartbeat на хосте.