- Обновлен скрипт установки агента (добавлены lm-sensors, smartmontools) - Агент теперь собирает температуры: CPU (через psutil), Диски (smartctl), GPU (nvidia-smi) - Бэкенд автоматически определяет единицу измерения °C для метрик temp_* - Добавлен общий график Температуры на страницу сервера |
||
|---|---|---|
| config | ||
| public | ||
| src | ||
| templates | ||
| .gitignore | ||
| AGENTS.md | ||
| ARCHITECTURE.md | ||
| INSTALL.md | ||
| README.md | ||
| TECHNICAL_SPECIFICATION.md | ||
| agent.py | ||
| composer.json | ||
| composer.lock | ||
| monitoring_system_dump.sql | ||
| schema.sql | ||
README.md
🖥️ mirvmon — Система мониторинга серверов
Лёгкая и функциональная система мониторинга для домашних и небольших серверных инфраструктур.
📋 Возможности
- 📊 Метрики в реальном времени: 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. Клонирование
git clone https://git.mirv.top/mirivlad/mirvmon.git
cd mirvmon
2. Установка зависимостей
composer install
3. База данных
mysql -u root -p monitoring_system < monitoring_system_dump.sql
4. Настройка БД
Отредактируйте config/DatabaseConfig.php:
private $host = 'localhost';
private $db_name = 'monitoring_system';
private $username = 'mon_user';
private $password = 'mon_password_123';
5. Веб-сервер (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-агента
Через скрипт установки (рекомендуется):
-
Получите ссылку на скрипт: В веб-интерфейсе перейдите на страницу редактирования сервера и нажмите кнопку «Скачать install.sh». Или сгенерируйте ссылку вручную:
https://mon.mirv.top/agent/install.sh?token=ВАШ_ТОКЕН -
Запустите установку на сервере:
curl -o install.sh "https://mon.mirv.top/agent/install.sh?token=ВАШ_ТОКЕН" chmod +x install.sh sudo bash install.shСкрипт сам установит Python, зависимости, создаст конфиг и настроит systemd-сервис.
-
Проверьте статус:
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.0requests >= 2.25systemd(для сбора статусов сервисов)
🔒 Безопасность
- ✅ Все пароли хешируются через
password_hash()(bcrypt) - ✅ Токены агентов хранятся как SHA-256 хеши
- ✅ Подготовленные выражения (PDO) для всех SQL-запросов
- ✅ CSRF-токены для всех форм
- ✅ Сессионная аутентификация для веб-интерфейса
- ✅ Валидация и санитизация входных данных
📝 Лицензия
MIT
👤 Автор
Владимир (mirivlad) — git.mirv.top