diff --git a/AGENTS.md b/AGENTS.md index 6f48c21..df2f121 100755 --- a/AGENTS.md +++ b/AGENTS.md @@ -5,7 +5,7 @@ **Название:** Система мониторинга серверов **URL:** https://mon.mirv.top **Расположение:** /var/www/mon -**Технологии:** PHP 8.1+, Slim Framework 4, Twig, MySQL/MariaDB +**Технологии:** PHP 8.3+, Slim Framework 4, Twig, MySQL/MariaDB ## Структура проекта @@ -46,14 +46,18 @@ ## API endpoints -- `GET /api/servers` - список мониторинговых серверов -- `GET /api/servers/{id}` - детали сервера -- `POST /api/servers` - создание нового сервера -- `PUT /api/servers/{id}` - обновление сервера -- `DELETE /api/servers/{id}` - удаление сервера -- `GET /api/metrics/{server_id}` - метрики сервера -- `POST /api/agent/metrics` - получение метрик от агента +### Публичные (без авторизации) +- `POST /api/v1/metrics` - получение метрик от агента +- `GET /get-agent?token=` - скачать Python-агента +- `GET /agent/install.sh?token=` - скачать установочный скрипт (Linux) +- `GET /agent/install.bat?token=` - скачать установочный скрипт (Windows) + +### Защищённые (требуется авторизация) - `GET /csrf-token` - получение CSRF токена для форм +- `GET /` - дашборд +- `GET /servers` - список серверов +- `GET /servers/{id}` - детали сервера +- `GET /alerts` - список алертов ## Агентские задачи diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 3a68b1a..8e9958d 100755 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -25,15 +25,15 @@ ### Общая схема ``` -┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ -│ Python Agent │─────▶│ API /metrics │─────▶│ Database │ -│ (каждые 10с) │ HTTP │ (public) │ │ (MySQL) │ -└─────────────────┘ └──────────────────┘ └─────────────────┘ - ▲ -┌─────────────────┐ ┌──────────────────┐ │ -│ Web Browser │─────▶│ Slim Framework │────────────┘ -│ (Dashboard) │ HTTP │ (PHP 8.1+) │ -└─────────────────┘ └──────────────────┘ ++---------------+ POST /api/v1/metrics +--------------+ +| Python Agent | --------------------------> | PHP Backend | +| (каждые 60с) | JSON: metrics + services | (Slim 4) | ++---------------+ <-------------------------- +------+-------+ + ^ ++---------------+ +-----------------------+ | +| Web Browser | ---> | /servers/{id} | ---------------+ +| (Dashboard) | | /alerts, /admin | ++---------------+ +-----------------------+ ``` ### Технологический стек @@ -189,24 +189,28 @@ alerts # Алерты ### agent.py **Расположение:** `/var/www/mon/agent.py` -**Функции:** -- Сбор метрик каждые 10 секунд: - - `cpu_load` — загрузка CPU (%) - - `ram_used` — использовано RAM (%) - - `disk_used` — использовано Disk (%) -- Отправка на `POST /api/v1/metrics` -- Конфигурация через JSON файл -- Автозапуск через systemd +**Собираемые метрики:** +- `cpu_load` - загрузка CPU (%) +- `ram_used` - использовано RAM (%) +- `ram_total_gb` - всего RAM (ГБ) +- `disk_used_*` - использовано по разделам (%) +- `disk_total_gb_*` - размер разделов (ГБ) +- `net_in_{iface}`, `net_out_{iface}` - трафик (% от скорости интерфейса) +- `temp_*` - температуры (°C) +- `top_cpu_proc`, `top_ram_proc` - топ-5 процессов (JSON) + +**Интервал сбора:** 60 секунд ### install.sh -**Генерация:** `GET /agent/install.sh?token={token}` +**Endpoint:** `GET /agent/install.sh?token={token}` **Что делает:** -1. Проверяет Python 3 -2. Устанавливает `psutil` -3. Скачивает `agent.py` с сервера -4. Создаёт конфиг с токеном и URL -5. Создаёт systemd сервис `server-mon-agent.service` +1. Проверяет Python 3, устанавливает psutil, lm-sensors, smartmontools +2. Скачивает `agent.py` с сервера мониторинга +3. Создает конфиг с токеном и URL API +4. Создает systemd сервис `server-monitor-agent.service` + +**Безопасность:** Скрипт и агент доступны только с валидным токеном сервера. --- @@ -289,15 +293,23 @@ certbot --nginx -d mon.mirv.top ### Стандартные метрики (metric_names) | Имя | Единица | Описание | -|-----|---------|----------| +|-----|---------|---------| | `cpu_load` | % | Загрузка CPU | | `ram_used` | % | Использовано RAM | -| `disk_used` | % | Использовано Disk | +| `ram_total_gb` | ГБ | Всего RAM | +| `disk_used` | % | Использовано (общий) | +| `disk_used_root` | % | Использовано (/) | +| `disk_used_home` | % | Использовано (/home) | +| `disk_used_*` | % | Другие разделы | +| `net_in_{iface}` | % | Входящий трафик | +| `net_out_{iface}` | % | Исходящий трафик | +| `temp_cpu` | °C | Температура CPU | +| `temp_hdd` | °C | Температура диска | | `top_cpu_proc` | JSON | Топ-5 процессов по CPU | | `top_ram_proc` | JSON | Топ-5 процессов по RAM | ### Период сбора -- **Агент:** каждые 10 секунд +- **Агент:** каждые 60 секунд - **Дашборд:** автообновление каждые 30 секунд - **Графики:** 24 часа / 7 дней / 30 дней diff --git a/INSTALL.md b/INSTALL.md index 1bd2d17..5a66e7d 100755 --- a/INSTALL.md +++ b/INSTALL.md @@ -2,7 +2,7 @@ ## Требования -- PHP 8.1 или выше +- PHP 8.3 или выше - Composer - MySQL 8+ или MariaDB 10.5+ - Apache или Nginx @@ -72,7 +72,7 @@ server { location ~ \.php$ { include snippets/fastcgi-php.conf; - fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; + fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; } } @@ -136,11 +136,25 @@ chmod +x install.sh "metrics": { "cpu_load": 45.2, "ram_used": 89.1, - "disk_used": 65.5 - } + "ram_total_gb": 16.0, + "disk_used_root": 65.5, + "net_in_ens3": 12.3, + "net_out_ens3": 5.6 + }, + "services": [ + {"name": "nginx", "status": "running"} + ] } ``` +### Скачивание агента + +``` +GET /get-agent?token= +GET /agent/install.sh?token= +GET /agent/install.bat?token= +``` + ## Безопасность - Все пароли хешируются с помощью `password_hash()` diff --git a/README.md b/README.md index ee65fb2..11b48c8 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,28 @@ -# 🖥️ mirvmon — Система мониторинга серверов +# mirvmon — Система мониторинга серверов -> Лёгкая и функциональная система мониторинга для домашних и небольших серверных - инфраструктур. +> Легкая и функциональная система мониторинга для домашних и небольших серверных инфраструктур. -[![PHP](https://img.shields.io/badge/PHP-8.3+-777BB4.svg)](https://php.net) -[![Slim](https://img.shields.io/badge/Slim-4.x-3399FF.svg)](https://www.slimfram -ework.com) -[![MariaDB](https://img.shields.io/badge/MariaDB-10.11-003545.svg)](https://mari -adb.org) -[![Chart.js](https://img.shields.io/badge/Chart.js-4.x-FF6384.svg)](https://www. -chartjs.org) +[![PHP](https://img.shields.io/badge/PHP-8.3+-777BB4.svg)](https://php.net) [![Slim](https://img.shields.io/badge/Slim-4.x-3399FF.svg)](https://www.slimframework.com) [![MariaDB](https://img.shields.io/badge/MariaDB-10.11-003545.svg)](https://mariadb.org) [![Chart.js](https://img.shields.io/badge/Chart.js-4.x-FF6384.svg)](https://www.chartjs.org) --- -## 📋 Возможности +## Возможности -- 📊 **Метрики в реальном времени:** CPU, RAM, диск (по разделам), сеть (In/Out в %) -- 🔔 **Алерты и уведомления:** Настраиваемые пороги с уведомлениями через Telegram и Email -- 🖧 **Мониторинг сервисов:** Отслеживание состояния systemd-сервисов с алертами при остановке -- 📈 **Интерактивные графики:** Зум, панорамирование, детализация по периодам (1ч, 6ч, 24ч, 7д, 30д) -- 🌐 **Множество серверов:** Поддержка неограниченного числа серверов через Python-агент -- 🎨 **Цветная индикация:** Прогресс-бары меняют цвет (🟢 → 🟡 → 🔴) при приближении к порогам -- 🔐 **Авторизация:** Сессионная аутентификация с CSRF-защитой +- **Метрики в реальном времени:** CPU, RAM, диск (по разделам), сеть (In/Out в %) +- **Алерты и уведомления:** Настраиваемые пороги с уведомлениями через Telegram и Email +- **Мониторинг сервисов:** Отслеживание состояния systemd-сервисов с алертами при остановке +- **Интерактивные графики:** Зум, панорамирование, детализация по периодам (1ч, 6ч, 24ч, 7д, 30д) +- **Множество серверов:** Поддержка неограниченного числа серверов через Python-агент +- **Цветная индикация:** Прогресс-бары меняют цвет при приближении к порогам +- **Авторизация:** Сессионная аутентификация с CSRF-защитой --- -## 🚀 Установка +## Установка ### Вариант A: Docker (рекомендуется) -Самый быстрый способ — всё поднимается автоматически: +Самый быстрый способ - все поднимается автоматически: ```bash # 1. Клонируем @@ -62,7 +55,7 @@ git pull docker compose -f docker/docker-compose.yml up -d --build ``` -> 📦 Код внутри Docker-образа (immutable). Данные БД в volume `db_data` — не теряются. +> Код внутри Docker-образа (immutable). Данные БД в volume `db_data` - не теряются. --- @@ -85,14 +78,10 @@ GRANT ALL PRIVILEGES ON monitoring_system.* TO 'mon_user'@'localhost'; FLUSH PRIVILEGES; EOF -# Загружаем схему -mysql -u mon_user -pmon_password_123 monitoring_system < docker/migrations/001_create_base_schema.sql -mysql -u mon_user -pmon_password_123 monitoring_system < docker/migrations/002_add_encrypted_token.sql -mysql -u mon_user -pmon_password_123 monitoring_system < docker/migrations/003_add_agent_configs.sql -mysql -u mon_user -pmon_password_123 monitoring_system < docker/migrations/004_add_global_notification_settings.sql -mysql -u mon_user -pmon_password_123 monitoring_system < docker/migrations/005_add_service_tables.sql -mysql -u mon_user -pmon_password_123 monitoring_system < docker/migrations/006_server_metrics_value_to_text.sql -mysql -u mon_user -pmon_password_123 monitoring_system < docker/migrations/007_seed_admin_user.sql +# Загружаем миграции +for f in docker/migrations/*.sql; do + mysql -u mon_user -pmon_password_123 monitoring_system < "$f" +done ``` #### 3. Настройка .env @@ -126,25 +115,169 @@ server { #### 5. Вход в систему `http://your-server/login` + - Логин: `admin` - Пароль: `mirvmon2026` (смените сразу!) --- -## 🏗️ Архитектура +## Архитектура ``` -┌─────────────────────┐ POST /api/v1/metrics ┌──────────────────┐ -│ Python Agent │ ──────────────────────────────▶ │ PHP Backend │ -│ (мониторимый │ JSON: метрики + сервисы │ (Slim + Twig) │ -│ сервер) │◀────────────────────────────── │ │ -└─────────────────────┘ └────────┬─────────┘ - ▲ │ - │ systemctl list-units │ PDO - │ psutil ▼ -┌─────────────────────┐ ┌──────────────────┐ -│ ОС Linux │ │ MariaDB │ -│ (systemd, net, │ │ monitoring_ │ -│ disk, ps) │ │ system │ -└─────────────────────┘ └──────────────────┘ ++-----------+ POST /api/v1/metrics +----------+ +| Python | -------------------------------> | PHP | +| Agent | JSON: metrics + services | Backend | +| (server) | <------------------------------- +----+-----+ ++-----------+ ^ | + ^ | | PDO + | systemctl list-units | v ++-----------+ +-----------+ +| Linux | | MariaDB | +| OS | | | ++-----------+ +-----------+ ``` + +### Технологический стек + +| Компонент | Технология | +|-------------|-------------------------| +| Backend | Slim Framework 4.x | +| Frontend | Bootstrap 5 + Chart.js | +| Database | MariaDB 10.11 | +| Agent | Python 3 + psutil | + +--- + +## Установка агента на сервер + +Агент устанавливается через скачивание скрипта с сервера мониторинга: + +```bash +# 1. В веб-интерфейсе: Серверы -> Редактирование -> Скачать установочный скрипт + +# 2. На целевом сервере: +chmod +x install.sh +sudo ./install.sh +``` + +Агент будет: +- Установлен в `/opt/server-monitor-agent/` +- Запущен как systemd-сервис +- Отправлять метрики каждые 60 секунд + +--- + +## API + +### Получение метрик от агента + +``` +POST /api/v1/metrics +Content-Type: application/json + +{ + "token": "server_token", + "metrics": { + "cpu_load": 45.2, + "ram_used": 89.1, + "disk_used_root": 65.5, + "net_in_ens3": 12.3, + "net_out_ens3": 5.6 + }, + "services": [ + {"name": "nginx", "status": "running"}, + {"name": "mysql", "status": "stopped"} + ] +} +``` + +### Другие endpoints + +| Endpoint | Описание | +|---------------------------------|------------------------------------| +| `GET /` | Дашборд | +| `GET /servers` | Управление серверами | +| `GET /servers/{id}` | Детали сервера с графиками | +| `GET /agent/install.sh?token=` | Скачать установочный скрипт (Linux)| +| `GET /agent/install.bat?token=` | Скачать установочный скрипт (Win) | +| `POST /api/v1/metrics` | Получение метрик от агента | +| `GET /alerts` | Список алертов | +| `POST /alerts/{id}/resolve` | Отметить алерт решенным | + +--- + +## Troubleshooting + +### Агент не отправляет метрики + +```bash +# Проверить статус сервиса +sudo systemctl status server-monitor-agent + +# Посмотреть логи +sudo journalctl -u server-monitor-agent -f + +# Перезапустить +sudo systemctl restart server-monitor-agent +``` + +### Агент не устанавливается + +```bash +# Проверить Python +python3 --version + +# Установить зависимости вручную +sudo apt install python3-pip +sudo pip3 install psutil requests +``` + +### Docker: контейнер не стартует + +```bash +# Проверить логи +docker compose logs app + +# Пересобрать +docker compose down && docker compose up -d --build +``` + +--- + +## Документация + +- [ARCHITECTURE.md](ARCHITECTURE.md) - Архитектура системы +- [TECHNICAL_SPECIFICATION.md](TECHNICAL_SPECIFICATION.md) - Техническое задание +- [INSTALL.md](INSTALL.md) - Детальная инструкция установки +- [docker/README.md](docker/README.md) - Docker-развертывание + +--- + +## Changelog + +### v1.1 (Апрель 2026) +- Динамические пороги для метрик сервера +- Улучшенный агент с поддержкой VPS (virtio-диски) +- Скачивание агента с сервера (вместо встраивания в скрипт) +- Защита endpoint агента токеном +- Doughnut-графики для разделов дисков +- Графики температур и сетевых интерфейсов +- Топ-процессы в тултипах графиков +- Мониторинг systemd-сервисов + +### v1.0 (Февраль 2026) +- Ядро системы (Slim 4 + Twig + Bootstrap 5) +- Аутентификация и авторизация +- CRUD серверов и групп +- API для приема метрик +- Python-агент с systemd +- Графики Chart.js +- Система алертов с порогами +- Топ-5 процессов по CPU/RAM +- Уведомления (Email/Telegram) + +--- + +## Лицензия + +MIT diff --git a/TECHNICAL_SPECIFICATION.md b/TECHNICAL_SPECIFICATION.md index f8fb49b..d5fc8ae 100755 --- a/TECHNICAL_SPECIFICATION.md +++ b/TECHNICAL_SPECIFICATION.md @@ -55,11 +55,11 @@ ### 3.5. Агент мониторинга - **Скрипт установки:** `GET /agent/install.sh?token=...` → динамически генерирует **bash-скрипт**, который: - 1. Устанавливает Python3, psutil. + 1. Устанавливает Python3, psutil, lm-sensors, smartmontools. 2. Скачивает Python-агента (`agent.py`) с вашего сервера. 3. Подставляет **токен** и **URL API** в конфиг агента. 4. Создает systemd-сервис для автостарта. -- **Python-агент:** собирает CPU, RAM, Disk раз в **10 секунд**, отправляет на `/api/v1/metrics`. +- **Python-агент:** собирает CPU, RAM, Disk, Network, Temperature раз в **60 секунд**, отправляет на `/api/v1/metrics`. ### 3.6. Страница сервера (`/server/{id}`) - **Текущие значения** всех метрик. diff --git a/docker/README.md b/docker/README.md index 568ab47..ef55b53 100644 --- a/docker/README.md +++ b/docker/README.md @@ -13,7 +13,8 @@ nano .env docker compose up -d --build # 4. Открываем http://localhost:8080 -# Логин: admin, Пароль: admin (сменить сразу!) +# Логин: admin +# Пароль: mirvmon2026 (сменить сразу!) ``` ## Обновление