273 lines
12 KiB
Markdown
273 lines
12 KiB
Markdown
# 🖥️ mirvmon — Система мониторинга серверов
|
||
|
||
> Лёгкая и функциональная система мониторинга для домашних и небольших серверных инфраструктур.
|
||
|
||
[](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-защитой
|
||
|
||
---
|
||
|
||
## 🏗️ Архитектура
|
||
|
||
```
|
||
┌─────────────────────┐ POST /api/v1/metrics ┌──────────────────┐
|
||
│ Python Agent │ ──────────────────────────────▶ │ PHP Backend │
|
||
│ (мониторимый │ JSON: метрики + сервисы │ (Slim + Twig) │
|
||
│ сервер) │◀────────────────────────────── │ │
|
||
└─────────────────────┘ └────────┬─────────┘
|
||
▲ │
|
||
│ systemctl list-units │ PDO
|
||
│ psutil ▼
|
||
┌─────────────────────┐ ┌──────────────────┐
|
||
│ ОС Linux │ │ MariaDB │
|
||
│ (systemd, net, │ │ monitoring_ │
|
||
│ disk, ps) │ │ system │
|
||
└─────────────────────┘ └──────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 Быстрый старт
|
||
|
||
### 1. Клонирование
|
||
|
||
```bash
|
||
git clone https://git.mirv.top/mirivlad/mirvmon.git
|
||
cd mirvmon
|
||
```
|
||
|
||
### 2. Установка зависимостей
|
||
|
||
```bash
|
||
composer install
|
||
```
|
||
|
||
### 3. База данных
|
||
|
||
```bash
|
||
mysql -u root -p monitoring_system < monitoring_system_dump.sql
|
||
```
|
||
|
||
### 4. Настройка БД
|
||
|
||
Отредактируйте `config/DatabaseConfig.php`:
|
||
```php
|
||
private $host = 'localhost';
|
||
private $db_name = 'monitoring_system';
|
||
private $username = 'mon_user';
|
||
private $password = 'mon_password_123';
|
||
```
|
||
|
||
### 5. Веб-сервер (Nginx)
|
||
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
server_name mon.mirv.top;
|
||
root /var/www/mon/public;
|
||
index index.php;
|
||
|
||
location / {
|
||
try_files $uri $uri/ /index.php?$query_string;
|
||
}
|
||
|
||
location ~ \.php$ {
|
||
include snippets/fastcgi-php.conf;
|
||
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
|
||
}
|
||
}
|
||
```
|
||
|
||
### 6. Вход в систему
|
||
|
||
Перейдите на `http://mon.mirv.top/login`. Пароль по умолчанию для тестовых данных: `admin123`.
|
||
|
||
---
|
||
|
||
## 🤖 Установка Python-агента
|
||
|
||
### Через скрипт установки (рекомендуется):
|
||
|
||
1. **Получите ссылку на скрипт:**
|
||
В веб-интерфейсе перейдите на страницу редактирования сервера и нажмите кнопку **«Скачать install.sh»**.
|
||
Или сгенерируйте ссылку вручную:
|
||
```bash
|
||
https://mon.mirv.top/agent/install.sh?token=ВАШ_ТОКЕН
|
||
```
|
||
|
||
2. **Запустите установку на сервере:**
|
||
```bash
|
||
curl -o install.sh "https://mon.mirv.top/agent/install.sh?token=ВАШ_ТОКЕН"
|
||
chmod +x install.sh
|
||
sudo bash install.sh
|
||
```
|
||
*Скрипт сам установит Python, зависимости, создаст конфиг и настроит systemd-сервис.*
|
||
|
||
3. **Проверьте статус:**
|
||
```bash
|
||
systemctl status server-monitor-agent
|
||
```
|
||
|
||
### Что собирает агент:
|
||
- **CPU** (`cpu_load`) — загрузка процессора (%)
|
||
- **RAM** (`ram_used`) — использование памяти (%) + топ-5 процессов
|
||
- **Диск** (`disk_used_root`, `disk_used_home`, ...) — по каждому реальному разделу (%) + общий объём (GB)
|
||
- **Сеть** (`net_in_enp4s0`, `net_out_enp4s0`) — % использования пропускной способности интерфейса
|
||
- **Сервисы** — статус всех systemd-юнитов (running/stopped)
|
||
|
||
---
|
||
|
||
## 📁 Структура проекта
|
||
|
||
```
|
||
/var/www/mon/
|
||
├── config/
|
||
│ └── DatabaseConfig.php # Настройки подключения к БД
|
||
├── public/
|
||
│ ├── index.php # Точка входа (Slim Framework)
|
||
│ ├── chartjs-plugin-zoom.min.js # Плагин зума для графиков
|
||
│ └── hammer.min.js # Зависимость zoom (CDN)
|
||
├── src/
|
||
│ ├── Controllers/
|
||
│ │ ├── DashboardController.php # Дашборд с карточками серверов
|
||
│ │ ├── ServerDetailController.php # Детали сервера + графики + пороги
|
||
│ │ ├── ServerController.php # CRUD серверов
|
||
│ │ ├── GroupController.php # CRUD групп
|
||
│ │ ├── AlertController.php # Управление алертами
|
||
│ │ ├── AdminController.php # Админ-панель
|
||
│ │ └── Api/
|
||
│ │ └── MetricsController.php # REST API для приёма метрик
|
||
│ ├── Models/
|
||
│ │ ├── Server.php # Модель сервера
|
||
│ │ ├── Group.php # Модель группы
|
||
│ │ └── Alert.php # Модель алерта
|
||
│ ├── Middlewares/
|
||
│ │ ├── AuthMiddleware.php # Проверка авторизации
|
||
│ │ ├── CsrfMiddleware.php # CSRF-защита
|
||
│ │ ├── SessionMiddleware.php # Работа с сессиями
|
||
│ │ └── FlashMiddleware.php # Flash-сообщения
|
||
│ └── Services/
|
||
│ └── NotificationService.php # Отправка уведомлений (Telegram/Email)
|
||
├── templates/
|
||
│ ├── layout.twig # Базовый layout (Bootstrap 5)
|
||
│ ├── dashboard.twig # Дашборд с карточками
|
||
│ ├── servers/detail.twig # Детали сервера: графики, пороги, сервисы
|
||
│ └── ...
|
||
├── composer.json
|
||
├── monitoring_system_dump.sql # Дамп структуры + примеры данных
|
||
└── schema.sql # Чистая схема БД
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 Метрики и графики
|
||
|
||
### На странице сервера доступны:
|
||
|
||
| Метрика | Тип графика | Описание |
|
||
|---------|-------------|----------|
|
||
| **CPU Загрузка** | Line (синий) | Загрузка процессора во времени |
|
||
| **RAM Использование** | Line (фиолетовый) | Использование памяти + топ процессов в тултипе |
|
||
| **Сеть: enp4s0** | Line (2 линии: 🟢 In / 🔴 Out) | % использования пропускной способности |
|
||
| **Диски** | Doughnut (карточки по 3 в ряд) | Текущее заполнение каждого раздела с GB |
|
||
|
||
### Управление графиками:
|
||
- 🖱️ **Колёсико мыши** — зум
|
||
- ✋ **Перетаскивание** — панорамирование
|
||
- 🔍 **Кнопка «Сброс»** — возврат к исходному масштабу
|
||
- ⏱️ **Период:** 1ч / 6ч / 24ч / 7д / 30д
|
||
|
||
---
|
||
|
||
## 🔔 Алерты и уведомления
|
||
|
||
### Пороги метрик
|
||
Для каждой метрики настраиваются:
|
||
- ⚠️ **Предупреждение** (warning threshold)
|
||
- 🚨 **Критический** (critical threshold)
|
||
- ⏱️ **Длительность** (минуты до срабатывания)
|
||
|
||
### Алерты сервисов
|
||
- 🛑 **Остановка** — красное уведомление, создаётся алерт
|
||
- ✅ **Запуск** — зелёное уведомление, алерт закрывается
|
||
- Отслеживаются только сервисы, отмеченные галочкой во вкладке «Сервисы»
|
||
|
||
### Каналы уведомлений
|
||
- **Telegram** — через Bot API (с поддержкой прокси)
|
||
- **Email** — через SMTP или функцию `mail()`
|
||
|
||
---
|
||
|
||
## 🗄️ База данных
|
||
|
||
### Основные таблицы:
|
||
| Таблица | Описание |
|
||
|---------|----------|
|
||
| `servers` | Мониторимые серверы |
|
||
| `server_metrics` | Временные ряды метрик |
|
||
| `metric_names` | Справочник метрик |
|
||
| `metric_thresholds` | Пороги алертов для серверов |
|
||
| `alerts` | Активные и закрытые алерты |
|
||
| `service_status` | Текущие статусы сервисов |
|
||
| `service_alerts` | Алерты на остановку сервисов |
|
||
| `agent_configs` | Настройки агентов (интервал, список сервисов) |
|
||
| `agent_tokens` | Токены авторизации агентов |
|
||
| `server_groups` | Группы серверов |
|
||
| `users` | Пользователи системы |
|
||
| `global_notification_settings` | Глобальные настройки уведомлений |
|
||
|
||
---
|
||
|
||
## ⚙️ Конфигурация
|
||
|
||
### PHP-FPM
|
||
- PHP 8.3+
|
||
- Расширения: `pdo`, `pdo_mysql`, `json`, `curl`, `mbstring`
|
||
|
||
### Nginx
|
||
- PHP-FPM через Unix socket
|
||
- `try_files` для Slim routing
|
||
|
||
### Python Agent
|
||
- Python 3.8+
|
||
- `psutil >= 5.0`
|
||
- `requests >= 2.25`
|
||
- `systemd` (для сбора статусов сервисов)
|
||
|
||
---
|
||
|
||
## 🔒 Безопасность
|
||
|
||
- ✅ Все пароли хешируются через `password_hash()` (bcrypt)
|
||
- ✅ Токены агентов хранятся как SHA-256 хеши
|
||
- ✅ Подготовленные выражения (PDO) для всех SQL-запросов
|
||
- ✅ CSRF-токены для всех форм
|
||
- ✅ Сессионная аутентификация для веб-интерфейса
|
||
- ✅ Валидация и санитизация входных данных
|
||
|
||
---
|
||
|
||
## 📝 Лицензия
|
||
|
||
MIT
|
||
|
||
---
|
||
|
||
## 👤 Автор
|
||
|
||
Владимир (mirivlad) — [git.mirv.top](https://git.mirv.top/mirivlad/mirvmon)
|