This commit is contained in:
mirivlad 2026-04-26 20:47:43 +08:00
parent 3edf138e43
commit 58001aaffe
4 changed files with 76 additions and 44 deletions

View File

@ -95,7 +95,7 @@
---
## 🗄️ База данных (8 таблиц)
## 🗄️ База данных
### Схема
```
@ -153,7 +153,7 @@ alerts # Алерты
### SQL инъекции
- Prepared statements (PDO) во всех запросах
- Базовый класс `Model` предоставляет методы `fetchAll()`, `fetchOne()`, `insert()`, `update()`
- Базовый класс `Model` даёт единый доступ к PDO через `DatabaseConfig`
---
@ -172,7 +172,8 @@ alerts # Алерты
| Метод | Путь | Контроллер | Описание |
|-------|------|------------|----------|
| GET | `/` | `DashboardController` | Дашборд (карточки серверов) |
| GET | `/server/{id}` | `ServerDetailController` | Детали сервера + графики |
| GET | `/server/{id}` | redirect | Legacy redirect на `/servers/{id}` |
| GET | `/servers/{id}` | `ServerDetailController` | Детали сервера + графики |
| GET/POST | `/servers/create` | `ServerController` | Добавить сервер |
| GET/POST | `/servers/{id}/edit` | `ServerController` | Редактировать сервер |
| GET/POST | `/servers/{id}/delete` | `ServerController` | Удалить сервер |
@ -198,6 +199,7 @@ alerts # Алерты
- `net_in_{iface}`, `net_out_{iface}` - трафик (% от скорости интерфейса)
- `temp_*` - температуры (°C)
- `top_cpu_proc`, `top_ram_proc` - топ-5 процессов (JSON)
- `uptime` - аптайм в секундах
**Интервал сбора:** 60 секунд
@ -241,9 +243,9 @@ alerts # Алерты
- `alerts/*.twig` — список алертов
### JavaScript
- Chart.js для графиков (CPU/RAM/Disk за 24ч/7д/30д)
- Chart.js для графиков CPU/RAM/Network/Temperature/Disk
- Автообновление дашборда через `setTimeout`
- Внешний tooltip handler для загрузки данных процессов
- Внешний tooltip handler для загрузки данных процессов и деталей RAM
---
@ -311,7 +313,8 @@ certbot --nginx -d mon.mirv.top
### Период сбора
- **Агент:** каждые 60 секунд
- **Дашборд:** автообновление каждые 30 секунд
- **Графики:** 24 часа / 7 дней / 30 дней
- **Графики:** 1 час / 6 часов / 24 часа / 7 дней / 30 дней
- **Длинные периоды:** данные берутся из `server_metrics_trends`
---
@ -341,9 +344,9 @@ certbot --nginx -d mon.mirv.top
## 📝 Changelog
### v1.0 (Февраль 2026)
### v1.1 (Апрель 2026)
- ✅ Ядро системы (Slim 4 + Twig + Bootstrap 5)
- ✅ 8 таблиц базы данных
- ✅ Базовая схема и последующие миграции для trends, сервисов и offline-логики
- ✅ Аутентификация и авторизация
- ✅ CRUD серверов и групп
- ✅ API для приёма метрик

View File

@ -13,7 +13,7 @@
```bash
git clone <repository-url>
cd monitoring-system
cd mon
```
### 2. Установка зависимостей
@ -78,15 +78,22 @@ server {
}
```
### 5. Настройка конфигурации базы данных
### 5. Настройка окружения
Отредактируйте файл `config/DatabaseConfig.php` для указания параметров подключения к базе данных:
Скопируйте `.env.example` в `.env` и укажите параметры подключения к базе данных:
```php
private $host = 'localhost';
private $db_name = 'monitoring_system';
private $username = 'your_db_username';
private $password = 'your_db_password';
```bash
cp .env.example .env
```
Ключевые переменные:
```dotenv
DB_HOST=localhost
DB_NAME=monitoring_system
DB_USERNAME=mon_user
DB_PASSWORD=your_db_password
APP_PORT=8082
```
## Использование
@ -95,14 +102,10 @@ private $password = 'your_db_password';
Перейдите на `http://mon.mirv.top/login` и войдите в систему.
Для первоначальной настройки создайте администратора через SQL:
По умолчанию миграция `007_seed_admin_user.sql` создаёт пользователя:
```sql
INSERT INTO users (username, password_hash, email, role)
VALUES ('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin@example.com', 'admin');
```
Пароль: `password`
- логин: `admin`
- пароль: `mirvmon2026`
### 2. Добавление серверов
@ -124,6 +127,15 @@ chmod +x install.sh
Агент будет установлен как systemd-сервис и начнет отправлять метрики на сервер мониторинга.
## Trends и длинные периоды
Для графиков за периоды больше 24 часов используются агрегированные данные из `server_metrics_trends`.
Если после установки или миграции нужно дозаполнить историю:
```bash
php /var/www/mon/cron/backfill_trends.php 30
```
## API
### Отправка метрик

View File

@ -33,7 +33,7 @@ cd mirvmon
cd docker && bash deploy.sh
# 3. Открываем браузер
# http://localhost:8080
# http://localhost:8082
# Логин: admin
# Пароль: mirvmon2026 (смените сразу!)
```
@ -73,18 +73,20 @@ composer install
```bash
mysql -u root -p <<EOF
CREATE DATABASE monitoring_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'mon_user'@'localhost' IDENTIFIED BY 'mon_password_123';
CREATE USER 'mon_user'@'localhost' IDENTIFIED BY 'your_db_password';
GRANT ALL PRIVILEGES ON monitoring_system.* TO 'mon_user'@'localhost';
FLUSH PRIVILEGES;
EOF
# Загружаем миграции
cp .env.example .env
# Укажите в .env актуальные DB_HOST / DB_USERNAME / DB_PASSWORD
for f in docker/migrations/*.sql; do
mysql -u mon_user -pmon_password_123 monitoring_system < "$f"
mysql -u mon_user -pyour_db_password monitoring_system < "$f"
done
```
#### 3. Настройка .env
#### 3. Настройка `.env`
```bash
cp .env.example .env
@ -117,7 +119,7 @@ server {
`http://your-server/login`
- Логин: `admin`
- Пароль: `mirvmon2026` (смените сразу!)
- Пароль: `mirvmon2026` (создаётся миграцией `007_seed_admin_user.sql`, смените сразу)
---
@ -242,6 +244,15 @@ docker compose logs app
docker compose down && docker compose up -d --build
```
### Графики за 7/30 дней показывают не всю историю
Для длинных периодов страница сервера использует агрегированные данные из `server_metrics_trends`.
Если history только что мигрировала или trends ещё не заполнены, выполните backfill:
```bash
php /var/www/mon/cron/backfill_trends.php 30
```
---
## Документация

View File

@ -9,7 +9,7 @@
- **Интерфейс:** **Полностью на русском языке** (все надписи, кнопки, формы, меню)
- **Безопасность:** Prepared Statements для всех SQL-запросов, хеши паролей (`password_hash`), **токены агентов хранятся только как SHA-256 хеши**.
## 2. Структура базы данных (8 таблиц)
## 2. Структура базы данных
| Таблица | Поля (ключевые) | Назначение |
| ------------------------------ | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| **users** | `id, username (unique), password_hash, email, role(admin/user), created_at` | Управление доступом |
@ -61,12 +61,18 @@
4. Создает systemd-сервис для автостарта.
- **Python-агент:** собирает CPU, RAM, Disk, Network, Temperature раз в **60 секунд**, отправляет на `/api/v1/metrics`.
### 3.6. Страница сервера (`/server/{id}`)
- **Текущие значения** всех метрик.
- **Графики Chart.js** для метрик:
- По умолчанию — **последние 24 часа**.
- Кнопки выбора периода: **24 часа, 7 дней, 30 дней** (через параметр `?period=7d`).
- **Управление порогами:** форма настройки `warning_threshold` и `duration` для каждой метрики этого сервера (сохраняет в `metric_thresholds`).
### 3.6. Страница сервера (`/servers/{id}`)
- Основной маршрут: `/servers/{id}` (`/server/{id}` оставлен как legacy redirect).
- **Текущие значения** ключевых метрик.
- **Графики Chart.js**:
- CPU и RAM — отдельные линейные графики.
- Network — отдельный график на каждый интерфейс (In/Out).
- Temperature — один общий график по всем выбранным `temp_*`.
- Disk — donut-графики по разделам.
- `uptime` показывается текстом, без графика.
- Кнопки выбора периода: **1 час, 6 часов, 24 часа, 7 дней, 30 дней**.
- Для периодов больше 24 часов используются агрегаты из `server_metrics_trends`.
- **Управление порогами:** форма настройки `warning_threshold`, `critical_threshold` и `duration`.
### 3.7. Система алертов
- **Автоматическое создание** при превышении порога.
@ -89,12 +95,12 @@
### Этап 1: Ядро системы
- **Цель:** Slim Framework + Twig + Bootstrap работают.
- **Результат:** Открываю `http://localhost:8080/test` → вижу «Система мониторинга».
- **Результат:** Открываю `http://localhost:8082/test` → вижу «Система мониторинга».
- ✅ **Выполнен**
### Этап 2: База данных
- **Цель:** Все 8 таблиц созданы.
- **Результат:** Импорт `schema.sql` → в MySQL есть все таблицы, включая `metric_names` с записями «cpu_load», «ram_used».
- **Цель:** Базовая схема и справочник метрик созданы.
- **Результат:** Импорт `schema.sql` и миграций → в MySQL есть основные таблицы, включая `metric_names` с записями `cpu_load`, `ram_used`.
- ✅ **Выполнен**
### Этап 3: Аутентификация + CRUD групп
@ -132,7 +138,7 @@
### Этап 7: Детали сервера + графики
- **Цель:** Страница с графиками и выбором периода.
- **Результат:**
1. Кликаю на карточку сервера → открывается `/server/1`.
1. Кликаю на карточку сервера → открывается `/servers/1`.
2. Вижу график CPU за 24 часа.
3. Нажимаю «7 дней» → график перерисовывается за неделю.
- ✅ **Выполнен**
@ -159,7 +165,7 @@
### Выполненные этапы:
- ✅ Этап 1: Ядро системы (Slim Framework 4, Twig, Bootstrap 5, Font Awesome 6)
- ✅ Этап 2: База данных (схема создана, 8 таблиц, стандартные метрики)
- ✅ Этап 2: База данных (схема создана, миграции и стандартные метрики применены)
- ✅ Этап 3: Аутентификация и авторизация (middleware, формы входа/выхода, CRUD групп)
- ✅ Этап 4: CRUD серверов (добавление/редактирование/удаление, генерация токенов)
- ✅ Этап 5: API для агентов (прием метрик, проверка токенов, обновление статусов)
@ -171,7 +177,7 @@
### Архитектура:
- **Frontend:** Bootstrap 5, Font Awesome 6, Chart.js (через CDN)
- **Backend:** Slim Framework 4, Twig templates, PSR-7
- **Database:** MySQL/MariaDB с 8 таблицами
- **Database:** MySQL/MariaDB с базовой схемой и последующими миграциями
- **Security:** Password hashing, SHA-256 token hashes, prepared statements
- **Language:** Полный перевод интерфейса на русский язык