217 lines
9.3 KiB
Markdown
217 lines
9.3 KiB
Markdown
# InfoUser Monitor
|
||
|
||
Мониторинг состояния ПК (Windows/Linux/macOS). Агент на каждом компьютере отправляет метрики на сервер раз в час, а веб-интерфейс показывает список машин, пользователей, IP, CPU/RAM/swap, диски, процессы и активные пользовательские сессии.
|
||
|
||
## Возможности
|
||
|
||
- **Дашборд** с фильтрами по статусу, пользователю и поиском по хосту/IP/OS
|
||
- **Детали ПК**: графики CPU/RAM/swap за 24 часа, активные сессии, топ процессов, история heartbeats
|
||
- **Активные сессии**: кто и с какого IP залогинен прямо сейчас
|
||
- **Уведомления** об офлайн-ПК (in-app + webhook + Telegram)
|
||
- **Экспорт** списка ПК в CSV
|
||
- **JWT-авторизация** с ролями admin/viewer
|
||
- **RBAC и аудит-лог**: управление пользователями, запись действий админов
|
||
- **Настройки через веб**: токен агента, порог офлайна, уведомления, часовой пояс
|
||
- **Часовой пояс**: хранение в UTC, отображение в выбранном поясе
|
||
- **RAM и swap**: использование в GB и процентах
|
||
|
||
## Структура
|
||
|
||
```
|
||
info-user/
|
||
├── server/ # FastAPI + веб-интерфейс
|
||
│ ├── routes/ # API и веб-роуты
|
||
│ ├── templates/ # Jinja2-шаблоны
|
||
│ ├── static/ # CSS/JS
|
||
│ ├── database.py # SQLite и миграции
|
||
│ ├── models.py # SQLAlchemy-модели
|
||
│ ├── schemas.py # Pydantic-схемы
|
||
│ ├── Dockerfile
|
||
│ └── main.py
|
||
├── agent/ # Python-агент (ручная установка)
|
||
│ ├── agent.py
|
||
│ ├── config.json
|
||
│ └── install.sh
|
||
├── agent-deb/ # Исходники .deb пакета (dpkg-deb --build)
|
||
├── data/ # SQLite БД (создаётся при запуске)
|
||
├── docker-compose.yml
|
||
├── nginx.conf
|
||
├── info-user-agent_*.deb
|
||
└── README.md
|
||
```
|
||
|
||
## Быстрый старт
|
||
|
||
1. **Клонировать/скопировать проект** и перейти в папку:
|
||
|
||
```bash
|
||
cd /home/user/moder/info-user
|
||
```
|
||
|
||
2. **Создать файл окружения** (опционально, но рекомендуется):
|
||
|
||
```bash
|
||
cat > .env <<EOF
|
||
SECRET_KEY=your-very-secret-key-here
|
||
AGENT_TOKEN=your-agent-token-here
|
||
ADMIN_USERNAME=admin
|
||
ADMIN_PASSWORD=admin
|
||
HTTP_PORT=80
|
||
OFFLINE_THRESHOLD_MINUTES=130
|
||
NOTIFICATION_WEBHOOK_URL=
|
||
NOTIFICATION_TELEGRAM_BOT_TOKEN=
|
||
NOTIFICATION_TELEGRAM_CHAT_ID=
|
||
EOF
|
||
```
|
||
|
||
3. **Запустить сервер**:
|
||
|
||
```bash
|
||
docker compose up -d --build
|
||
```
|
||
|
||
4. **Открыть веб-интерфейс**:
|
||
|
||
```
|
||
http://localhost
|
||
```
|
||
|
||
Логин/пароль по умолчанию: `admin` / `admin`.
|
||
|
||
5. **Установить агент** на клиентский ПК (Linux):
|
||
|
||
### Debian/Ubuntu/Astra Linux (рекомендуется)
|
||
|
||
```bash
|
||
# Установить .deb пакет
|
||
sudo dpkg -i info-user-agent_1.0.3_all.deb
|
||
|
||
# Настроить сервер и токен (интерактивно)
|
||
sudo info-user-agent-setup
|
||
|
||
# Или вручную:
|
||
sudo nano /opt/info-user-agent/config.json
|
||
```
|
||
|
||
Либо через собственный apt-репозиторий, если он настроен на сервере.
|
||
|
||
### Вручную (любой Linux)
|
||
|
||
```bash
|
||
cd agent
|
||
sudo bash install.sh
|
||
```
|
||
|
||
Не забудьте отредактировать `agent/config.json`, указав `server_url` и `agent_token`.
|
||
|
||
## Настройка агента
|
||
|
||
Файл `agent/config.json`:
|
||
|
||
```json
|
||
{
|
||
"server_url": "http://your-server-ip",
|
||
"agent_token": "your-agent-token-here",
|
||
"interval_minutes": 60,
|
||
"send_public_ip": false
|
||
}
|
||
```
|
||
|
||
## Собираемые данные
|
||
|
||
- Имя хоста, текущий пользователь, локальный IP
|
||
- Операционная система
|
||
- Uptime
|
||
- Загрузка CPU
|
||
- RAM: процент, использовано/доступно/всего в GB
|
||
- Swap: процент, использовано/свободно/всего в GB
|
||
- Информация по дискам
|
||
- Температура CPU (если доступна)
|
||
- Top-10 процессов по CPU/RAM
|
||
- Активные пользовательские сессии (`who -u`)
|
||
|
||
## API
|
||
|
||
- `POST /api/heartbeat` — приём данных от агента
|
||
- `GET /api/computers` — список компьютеров (с фильтрами `status`, `user`, `search`, `sort`, `order`)
|
||
- `GET /api/computers/export/csv` — экспорт в CSV
|
||
- `GET /api/computers/{id}` — детали ПК с историей
|
||
- `DELETE /api/computers/{id}` — удалить ПК (admin)
|
||
- `GET /api/notifications` — уведомления
|
||
- `POST /api/notifications/{id}/read` — отметить прочитанным
|
||
- `POST /api/notifications/read-all` — отметить все прочитанными
|
||
- `GET /api/audit` — аудит-лог (admin)
|
||
- `GET /api/settings` — runtime-настройки (admin)
|
||
- `POST /api/settings` — изменить runtime-настройки (admin)
|
||
- `POST /api/auth/login` — вход в веб-интерфейс
|
||
- `POST /api/auth/register` — регистрация нового пользователя (только если ещё нет admin)
|
||
- `GET /api/auth/users` — список пользователей (admin)
|
||
- `POST /api/auth/users/{id}/role` — сменить роль (admin)
|
||
- `DELETE /api/auth/users/{id}` — удалить пользователя (admin)
|
||
|
||
## Runtime-настройки
|
||
|
||
Администратор может менять настройки прямо в веб-интерфейсе (`/admin/settings`):
|
||
|
||
- `AGENT_TOKEN` — токен для агентов
|
||
- `OFFLINE_THRESHOLD_MINUTES` — через сколько минут без heartbeat ПК считается офлайн
|
||
- `NOTIFICATION_WEBHOOK_URL` — URL для webhook-уведомлений
|
||
- `NOTIFICATION_TELEGRAM_BOT_TOKEN` — токен Telegram-бота
|
||
- `NOTIFICATION_TELEGRAM_CHAT_ID` — ID чата для Telegram
|
||
- `TIMEZONE` — часовой пояс для отображения времени в веб-интерфейсе
|
||
|
||
Значения из БД переопределяют `.env` во время работы сервера.
|
||
|
||
## Уведомления об офлайн-ПК
|
||
|
||
ПК считается офлайн, если не присылал heartbeat в течение `OFFLINE_THRESHOLD_MINUTES` минут.
|
||
|
||
Доступные каналы:
|
||
|
||
- **In-app** — всегда, список уведомлений в веб-интерфейсе
|
||
- **Webhook** — отправка POST JSON на `NOTIFICATION_WEBHOOK_URL`
|
||
- **Telegram** — отправка сообщения в чат, если указаны `NOTIFICATION_TELEGRAM_BOT_TOKEN` и `NOTIFICATION_TELEGRAM_CHAT_ID`
|
||
|
||
## Безопасность
|
||
|
||
- Смените `SECRET_KEY` и `AGENT_TOKEN` в `.env`.
|
||
- Используйте HTTPS в production (nginx + certbot).
|
||
- Ограничьте доступ к `/api/heartbeat` по IP или сети.
|
||
- Пользователи с ролью `viewer` могут только смотреть дашборд.
|
||
|
||
## Требования
|
||
|
||
- Docker + Docker Compose
|
||
- Python 3.11+ (для локального запуска без Docker)
|
||
- Linux на клиентских ПК для systemd-таймера (для Windows можно запускать через Task Scheduler)
|
||
|
||
## Планы (TODO)
|
||
|
||
- [X] Дашборд с фильтрами и сортировкой
|
||
- [X] Уведомления об офлайн-ПК (in-app + webhook + Telegram)
|
||
- [X] Экспорт в CSV
|
||
- [X] JWT-авторизация
|
||
- [X] Ролевая модель admin/viewer
|
||
- [X] Аудит-лог
|
||
- [X] Runtime-настройки через веб
|
||
- [X] Активные пользовательские сессии
|
||
- [X] RAM и swap в GB/%
|
||
- [X] График swap
|
||
- [X] Часовой пояс в веб-интерфейсе
|
||
- [ ] Email-уведомления (SMTP)
|
||
- [ ] Интеграция с Telegram-ботом (двусторонняя)
|
||
- [ ] Ролевая модель для уведомлений (какие роли получают какие типы уведомлений)
|
||
- [ ] Автоматические ежедневные/еженедельные отчёты (сводка по всем ПК)
|
||
- [ ] Поддержка PostgreSQL как альтернативы SQLite
|
||
- [ ] Агент для Windows (инсталлятор .msi или NSIS)
|
||
- [ ] Агент для macOS (launchd plist)
|
||
- [ ] Локализация веб-интерфейса (en/ru)
|
||
- [ ] График истории за произвольный период
|
||
- [ ] Сравнение нескольких ПК на одном графике
|
||
- [ ] Отправка алертов по CPU/RAM/диску (превышение порога)
|
||
- [ ] HTTPS из коробки (автоматический Let's Encrypt)
|
||
|
||
## Лицензия
|
||
|
||
MIT / как есть.
|