docs: Update documentation to reflect current state
README.md: - Fix badge line breaks - Add migration 008_auto_cleanup_metrics.sql - Improve architecture diagram - Add troubleshooting section - Add changelog - Fix formatting ARCHITECTURE.md: - Update agent metrics list (net_in_*, temp_*, etc.) - Change interval from 10s to 60s - Fix architecture diagram INSTALL.md: - PHP 8.1 -> 8.3 - php8.1-fpm.sock -> php8.3-fpm.sock - Update API example with current metrics AGENTS.md: - PHP 8.1 -> 8.3 - Update API endpoints with new /get-agent, /agent/install.sh docker/README.md: - Fix password from 'admin' to 'mirvmon2026' TECHNICAL_SPECIFICATION.md: - Change agent interval from 10s to 60s - Add lm-sensors, smartmontools to agent requirements
This commit is contained in:
parent
fe1463442a
commit
6d3542232a
20
AGENTS.md
20
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` - список алертов
|
||||
|
||||
## Агентские задачи
|
||||
|
||||
|
|
|
|||
|
|
@ -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 дней
|
||||
|
||||
|
|
|
|||
22
INSTALL.md
22
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=<server_token>
|
||||
GET /agent/install.sh?token=<server_token>
|
||||
GET /agent/install.bat?token=<server_token>
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
- Все пароли хешируются с помощью `password_hash()`
|
||||
|
|
|
|||
219
README.md
219
README.md
|
|
@ -1,35 +1,28 @@
|
|||
# 🖥️ mirvmon — Система мониторинга серверов
|
||||
# mirvmon — Система мониторинга серверов
|
||||
|
||||
> Лёгкая и функциональная система мониторинга для домашних и небольших серверных
|
||||
инфраструктур.
|
||||
> Легкая и функциональная система мониторинга для домашних и небольших серверных инфраструктур.
|
||||
|
||||
[](https://php.net)
|
||||
[](https://www.slimfram
|
||||
ework.com)
|
||||
[](https://mari
|
||||
adb.org)
|
||||
[](https://www.
|
||||
chartjs.org)
|
||||
[](https://php.net) [](https://www.slimframework.com) [](https://mariadb.org) [](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
|
||||
|
|
|
|||
|
|
@ -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}`)
|
||||
- **Текущие значения** всех метрик.
|
||||
|
|
|
|||
|
|
@ -13,7 +13,8 @@ nano .env
|
|||
docker compose up -d --build
|
||||
|
||||
# 4. Открываем http://localhost:8080
|
||||
# Логин: admin, Пароль: admin (сменить сразу!)
|
||||
# Логин: admin
|
||||
# Пароль: mirvmon2026 (сменить сразу!)
|
||||
```
|
||||
|
||||
## Обновление
|
||||
|
|
|
|||
Loading…
Reference in New Issue