12 KiB
12 KiB
🖥️ 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-агента
На мониторимом сервере:
- Создайте сервер через веб-интерфейс и получите токен.
- Создайте файл
/opt/server-monitor-agent/config.json:
{
"token": "ваш_токен_с_веб-страницы",
"api_url": "https://mon.mirv.top/api/v1/metrics",
"interval_seconds": 60
}
- Установите зависимости:
pip install psutil requests
- Скопируйте
agent.pyв/opt/server-monitor-agent/и настройте systemd-сервис:
[Unit]
Description=Server Monitor Agent
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/server-monitor-agent
ExecStart=/usr/bin/python3 /opt/server-monitor-agent/agent.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
- Запустите:
systemctl enable --now 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