fix docs
This commit is contained in:
parent
3edf138e43
commit
58001aaffe
|
|
@ -95,7 +95,7 @@
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🗄️ База данных (8 таблиц)
|
## 🗄️ База данных
|
||||||
|
|
||||||
### Схема
|
### Схема
|
||||||
```
|
```
|
||||||
|
|
@ -153,7 +153,7 @@ alerts # Алерты
|
||||||
|
|
||||||
### SQL инъекции
|
### SQL инъекции
|
||||||
- Prepared statements (PDO) во всех запросах
|
- Prepared statements (PDO) во всех запросах
|
||||||
- Базовый класс `Model` предоставляет методы `fetchAll()`, `fetchOne()`, `insert()`, `update()`
|
- Базовый класс `Model` даёт единый доступ к PDO через `DatabaseConfig`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -172,7 +172,8 @@ alerts # Алерты
|
||||||
| Метод | Путь | Контроллер | Описание |
|
| Метод | Путь | Контроллер | Описание |
|
||||||
|-------|------|------------|----------|
|
|-------|------|------------|----------|
|
||||||
| GET | `/` | `DashboardController` | Дашборд (карточки серверов) |
|
| 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/create` | `ServerController` | Добавить сервер |
|
||||||
| GET/POST | `/servers/{id}/edit` | `ServerController` | Редактировать сервер |
|
| GET/POST | `/servers/{id}/edit` | `ServerController` | Редактировать сервер |
|
||||||
| GET/POST | `/servers/{id}/delete` | `ServerController` | Удалить сервер |
|
| GET/POST | `/servers/{id}/delete` | `ServerController` | Удалить сервер |
|
||||||
|
|
@ -198,6 +199,7 @@ alerts # Алерты
|
||||||
- `net_in_{iface}`, `net_out_{iface}` - трафик (% от скорости интерфейса)
|
- `net_in_{iface}`, `net_out_{iface}` - трафик (% от скорости интерфейса)
|
||||||
- `temp_*` - температуры (°C)
|
- `temp_*` - температуры (°C)
|
||||||
- `top_cpu_proc`, `top_ram_proc` - топ-5 процессов (JSON)
|
- `top_cpu_proc`, `top_ram_proc` - топ-5 процессов (JSON)
|
||||||
|
- `uptime` - аптайм в секундах
|
||||||
|
|
||||||
**Интервал сбора:** 60 секунд
|
**Интервал сбора:** 60 секунд
|
||||||
|
|
||||||
|
|
@ -241,9 +243,9 @@ alerts # Алерты
|
||||||
- `alerts/*.twig` — список алертов
|
- `alerts/*.twig` — список алертов
|
||||||
|
|
||||||
### JavaScript
|
### JavaScript
|
||||||
- Chart.js для графиков (CPU/RAM/Disk за 24ч/7д/30д)
|
- Chart.js для графиков CPU/RAM/Network/Temperature/Disk
|
||||||
- Автообновление дашборда через `setTimeout`
|
- Автообновление дашборда через `setTimeout`
|
||||||
- Внешний tooltip handler для загрузки данных процессов
|
- Внешний tooltip handler для загрузки данных процессов и деталей RAM
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -311,7 +313,8 @@ certbot --nginx -d mon.mirv.top
|
||||||
### Период сбора
|
### Период сбора
|
||||||
- **Агент:** каждые 60 секунд
|
- **Агент:** каждые 60 секунд
|
||||||
- **Дашборд:** автообновление каждые 30 секунд
|
- **Дашборд:** автообновление каждые 30 секунд
|
||||||
- **Графики:** 24 часа / 7 дней / 30 дней
|
- **Графики:** 1 час / 6 часов / 24 часа / 7 дней / 30 дней
|
||||||
|
- **Длинные периоды:** данные берутся из `server_metrics_trends`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -341,9 +344,9 @@ certbot --nginx -d mon.mirv.top
|
||||||
|
|
||||||
## 📝 Changelog
|
## 📝 Changelog
|
||||||
|
|
||||||
### v1.0 (Февраль 2026)
|
### v1.1 (Апрель 2026)
|
||||||
- ✅ Ядро системы (Slim 4 + Twig + Bootstrap 5)
|
- ✅ Ядро системы (Slim 4 + Twig + Bootstrap 5)
|
||||||
- ✅ 8 таблиц базы данных
|
- ✅ Базовая схема и последующие миграции для trends, сервисов и offline-логики
|
||||||
- ✅ Аутентификация и авторизация
|
- ✅ Аутентификация и авторизация
|
||||||
- ✅ CRUD серверов и групп
|
- ✅ CRUD серверов и групп
|
||||||
- ✅ API для приёма метрик
|
- ✅ API для приёма метрик
|
||||||
|
|
|
||||||
44
INSTALL.md
44
INSTALL.md
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone <repository-url>
|
git clone <repository-url>
|
||||||
cd monitoring-system
|
cd mon
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. Установка зависимостей
|
### 2. Установка зависимостей
|
||||||
|
|
@ -78,15 +78,22 @@ server {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 5. Настройка конфигурации базы данных
|
### 5. Настройка окружения
|
||||||
|
|
||||||
Отредактируйте файл `config/DatabaseConfig.php` для указания параметров подключения к базе данных:
|
Скопируйте `.env.example` в `.env` и укажите параметры подключения к базе данных:
|
||||||
|
|
||||||
```php
|
```bash
|
||||||
private $host = 'localhost';
|
cp .env.example .env
|
||||||
private $db_name = 'monitoring_system';
|
```
|
||||||
private $username = 'your_db_username';
|
|
||||||
private $password = 'your_db_password';
|
Ключевые переменные:
|
||||||
|
|
||||||
|
```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` и войдите в систему.
|
Перейдите на `http://mon.mirv.top/login` и войдите в систему.
|
||||||
|
|
||||||
Для первоначальной настройки создайте администратора через SQL:
|
По умолчанию миграция `007_seed_admin_user.sql` создаёт пользователя:
|
||||||
|
|
||||||
```sql
|
- логин: `admin`
|
||||||
INSERT INTO users (username, password_hash, email, role)
|
- пароль: `mirvmon2026`
|
||||||
VALUES ('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin@example.com', 'admin');
|
|
||||||
```
|
|
||||||
|
|
||||||
Пароль: `password`
|
|
||||||
|
|
||||||
### 2. Добавление серверов
|
### 2. Добавление серверов
|
||||||
|
|
||||||
|
|
@ -124,6 +127,15 @@ chmod +x install.sh
|
||||||
|
|
||||||
Агент будет установлен как systemd-сервис и начнет отправлять метрики на сервер мониторинга.
|
Агент будет установлен как systemd-сервис и начнет отправлять метрики на сервер мониторинга.
|
||||||
|
|
||||||
|
## Trends и длинные периоды
|
||||||
|
|
||||||
|
Для графиков за периоды больше 24 часов используются агрегированные данные из `server_metrics_trends`.
|
||||||
|
Если после установки или миграции нужно дозаполнить историю:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
php /var/www/mon/cron/backfill_trends.php 30
|
||||||
|
```
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
### Отправка метрик
|
### Отправка метрик
|
||||||
|
|
@ -160,4 +172,4 @@ GET /agent/install.bat?token=<server_token>
|
||||||
- Все пароли хешируются с помощью `password_hash()`
|
- Все пароли хешируются с помощью `password_hash()`
|
||||||
- Токены агентов хранятся в виде SHA-256 хешей
|
- Токены агентов хранятся в виде SHA-256 хешей
|
||||||
- Все SQL-запросы используют подготовленные выражения
|
- Все SQL-запросы используют подготовленные выражения
|
||||||
- Вход на все страницы требует аутентификации (кроме API и страницы входа)
|
- Вход на все страницы требует аутентификации (кроме API и страницы входа)
|
||||||
|
|
|
||||||
23
README.md
23
README.md
|
|
@ -33,7 +33,7 @@ cd mirvmon
|
||||||
cd docker && bash deploy.sh
|
cd docker && bash deploy.sh
|
||||||
|
|
||||||
# 3. Открываем браузер
|
# 3. Открываем браузер
|
||||||
# http://localhost:8080
|
# http://localhost:8082
|
||||||
# Логин: admin
|
# Логин: admin
|
||||||
# Пароль: mirvmon2026 (смените сразу!)
|
# Пароль: mirvmon2026 (смените сразу!)
|
||||||
```
|
```
|
||||||
|
|
@ -73,18 +73,20 @@ composer install
|
||||||
```bash
|
```bash
|
||||||
mysql -u root -p <<EOF
|
mysql -u root -p <<EOF
|
||||||
CREATE DATABASE monitoring_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
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';
|
GRANT ALL PRIVILEGES ON monitoring_system.* TO 'mon_user'@'localhost';
|
||||||
FLUSH PRIVILEGES;
|
FLUSH PRIVILEGES;
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Загружаем миграции
|
cp .env.example .env
|
||||||
|
# Укажите в .env актуальные DB_HOST / DB_USERNAME / DB_PASSWORD
|
||||||
|
|
||||||
for f in docker/migrations/*.sql; do
|
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
|
done
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 3. Настройка .env
|
#### 3. Настройка `.env`
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
|
|
@ -117,7 +119,7 @@ server {
|
||||||
`http://your-server/login`
|
`http://your-server/login`
|
||||||
|
|
||||||
- Логин: `admin`
|
- Логин: `admin`
|
||||||
- Пароль: `mirvmon2026` (смените сразу!)
|
- Пароль: `mirvmon2026` (создаётся миграцией `007_seed_admin_user.sql`, смените сразу)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -242,6 +244,15 @@ docker compose logs app
|
||||||
docker compose down && docker compose up -d --build
|
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
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Документация
|
## Документация
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
- **Интерфейс:** **Полностью на русском языке** (все надписи, кнопки, формы, меню)
|
- **Интерфейс:** **Полностью на русском языке** (все надписи, кнопки, формы, меню)
|
||||||
- **Безопасность:** Prepared Statements для всех SQL-запросов, хеши паролей (`password_hash`), **токены агентов хранятся только как SHA-256 хеши**.
|
- **Безопасность:** Prepared Statements для всех SQL-запросов, хеши паролей (`password_hash`), **токены агентов хранятся только как SHA-256 хеши**.
|
||||||
|
|
||||||
## 2. Структура базы данных (8 таблиц)
|
## 2. Структура базы данных
|
||||||
| Таблица | Поля (ключевые) | Назначение |
|
| Таблица | Поля (ключевые) | Назначение |
|
||||||
| ------------------------------ | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
|
| ------------------------------ | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
|
||||||
| **users** | `id, username (unique), password_hash, email, role(admin/user), created_at` | Управление доступом |
|
| **users** | `id, username (unique), password_hash, email, role(admin/user), created_at` | Управление доступом |
|
||||||
|
|
@ -61,12 +61,18 @@
|
||||||
4. Создает systemd-сервис для автостарта.
|
4. Создает systemd-сервис для автостарта.
|
||||||
- **Python-агент:** собирает CPU, RAM, Disk, Network, Temperature раз в **60 секунд**, отправляет на `/api/v1/metrics`.
|
- **Python-агент:** собирает CPU, RAM, Disk, Network, Temperature раз в **60 секунд**, отправляет на `/api/v1/metrics`.
|
||||||
|
|
||||||
### 3.6. Страница сервера (`/server/{id}`)
|
### 3.6. Страница сервера (`/servers/{id}`)
|
||||||
- **Текущие значения** всех метрик.
|
- Основной маршрут: `/servers/{id}` (`/server/{id}` оставлен как legacy redirect).
|
||||||
- **Графики Chart.js** для метрик:
|
- **Текущие значения** ключевых метрик.
|
||||||
- По умолчанию — **последние 24 часа**.
|
- **Графики Chart.js**:
|
||||||
- Кнопки выбора периода: **24 часа, 7 дней, 30 дней** (через параметр `?period=7d`).
|
- CPU и RAM — отдельные линейные графики.
|
||||||
- **Управление порогами:** форма настройки `warning_threshold` и `duration` для каждой метрики этого сервера (сохраняет в `metric_thresholds`).
|
- Network — отдельный график на каждый интерфейс (In/Out).
|
||||||
|
- Temperature — один общий график по всем выбранным `temp_*`.
|
||||||
|
- Disk — donut-графики по разделам.
|
||||||
|
- `uptime` показывается текстом, без графика.
|
||||||
|
- Кнопки выбора периода: **1 час, 6 часов, 24 часа, 7 дней, 30 дней**.
|
||||||
|
- Для периодов больше 24 часов используются агрегаты из `server_metrics_trends`.
|
||||||
|
- **Управление порогами:** форма настройки `warning_threshold`, `critical_threshold` и `duration`.
|
||||||
|
|
||||||
### 3.7. Система алертов
|
### 3.7. Система алертов
|
||||||
- **Автоматическое создание** при превышении порога.
|
- **Автоматическое создание** при превышении порога.
|
||||||
|
|
@ -89,12 +95,12 @@
|
||||||
|
|
||||||
### Этап 1: Ядро системы
|
### Этап 1: Ядро системы
|
||||||
- **Цель:** Slim Framework + Twig + Bootstrap работают.
|
- **Цель:** Slim Framework + Twig + Bootstrap работают.
|
||||||
- **Результат:** Открываю `http://localhost:8080/test` → вижу «Система мониторинга».
|
- **Результат:** Открываю `http://localhost:8082/test` → вижу «Система мониторинга».
|
||||||
- ✅ **Выполнен**
|
- ✅ **Выполнен**
|
||||||
|
|
||||||
### Этап 2: База данных
|
### Этап 2: База данных
|
||||||
- **Цель:** Все 8 таблиц созданы.
|
- **Цель:** Базовая схема и справочник метрик созданы.
|
||||||
- **Результат:** Импорт `schema.sql` → в MySQL есть все таблицы, включая `metric_names` с записями «cpu_load», «ram_used».
|
- **Результат:** Импорт `schema.sql` и миграций → в MySQL есть основные таблицы, включая `metric_names` с записями `cpu_load`, `ram_used`.
|
||||||
- ✅ **Выполнен**
|
- ✅ **Выполнен**
|
||||||
|
|
||||||
### Этап 3: Аутентификация + CRUD групп
|
### Этап 3: Аутентификация + CRUD групп
|
||||||
|
|
@ -132,7 +138,7 @@
|
||||||
### Этап 7: Детали сервера + графики
|
### Этап 7: Детали сервера + графики
|
||||||
- **Цель:** Страница с графиками и выбором периода.
|
- **Цель:** Страница с графиками и выбором периода.
|
||||||
- **Результат:**
|
- **Результат:**
|
||||||
1. Кликаю на карточку сервера → открывается `/server/1`.
|
1. Кликаю на карточку сервера → открывается `/servers/1`.
|
||||||
2. Вижу график CPU за 24 часа.
|
2. Вижу график CPU за 24 часа.
|
||||||
3. Нажимаю «7 дней» → график перерисовывается за неделю.
|
3. Нажимаю «7 дней» → график перерисовывается за неделю.
|
||||||
- ✅ **Выполнен**
|
- ✅ **Выполнен**
|
||||||
|
|
@ -159,7 +165,7 @@
|
||||||
|
|
||||||
### Выполненные этапы:
|
### Выполненные этапы:
|
||||||
- ✅ Этап 1: Ядро системы (Slim Framework 4, Twig, Bootstrap 5, Font Awesome 6)
|
- ✅ Этап 1: Ядро системы (Slim Framework 4, Twig, Bootstrap 5, Font Awesome 6)
|
||||||
- ✅ Этап 2: База данных (схема создана, 8 таблиц, стандартные метрики)
|
- ✅ Этап 2: База данных (схема создана, миграции и стандартные метрики применены)
|
||||||
- ✅ Этап 3: Аутентификация и авторизация (middleware, формы входа/выхода, CRUD групп)
|
- ✅ Этап 3: Аутентификация и авторизация (middleware, формы входа/выхода, CRUD групп)
|
||||||
- ✅ Этап 4: CRUD серверов (добавление/редактирование/удаление, генерация токенов)
|
- ✅ Этап 4: CRUD серверов (добавление/редактирование/удаление, генерация токенов)
|
||||||
- ✅ Этап 5: API для агентов (прием метрик, проверка токенов, обновление статусов)
|
- ✅ Этап 5: API для агентов (прием метрик, проверка токенов, обновление статусов)
|
||||||
|
|
@ -171,7 +177,7 @@
|
||||||
### Архитектура:
|
### Архитектура:
|
||||||
- **Frontend:** Bootstrap 5, Font Awesome 6, Chart.js (через CDN)
|
- **Frontend:** Bootstrap 5, Font Awesome 6, Chart.js (через CDN)
|
||||||
- **Backend:** Slim Framework 4, Twig templates, PSR-7
|
- **Backend:** Slim Framework 4, Twig templates, PSR-7
|
||||||
- **Database:** MySQL/MariaDB с 8 таблицами
|
- **Database:** MySQL/MariaDB с базовой схемой и последующими миграциями
|
||||||
- **Security:** Password hashing, SHA-256 token hashes, prepared statements
|
- **Security:** Password hashing, SHA-256 token hashes, prepared statements
|
||||||
- **Language:** Полный перевод интерфейса на русский язык
|
- **Language:** Полный перевод интерфейса на русский язык
|
||||||
|
|
||||||
|
|
@ -180,4 +186,4 @@
|
||||||
- API для приема метрик от агентов
|
- API для приема метрик от агентов
|
||||||
- Скрипт установки агента для мониторинга серверов
|
- Скрипт установки агента для мониторинга серверов
|
||||||
- Система алертов и уведомлений
|
- Система алертов и уведомлений
|
||||||
- Административная панель
|
- Административная панель
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue