Go to file
mirivlad ce577c5d51 feat: объединить все температурные метрики (temp_*) в один график с разными цветами, вернуть сетевые графики
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-14 03:13:03 +08:00
config Initial commit - mon.mirv.top monitoring system 2026-02-14 15:08:14 +00:00
public fix: исправлен синтаксис index.php и добавлен API маршрут дашборда 2026-04-14 00:52:53 +08:00
src fix: removed network rx/tx charts, ensured single temp chart 2026-04-14 01:52:03 +08:00
templates feat: объединить все температурные метрики (temp_*) в один график с разными цветами, вернуть сетевые графики 2026-04-14 03:13:03 +08:00
.gitignore fix: исправлена HTML структура вкладок (metrics/services/thresholds) 2026-04-13 16:25:14 +08:00
AGENTS.md fix: исправление тултипов Chart.js и обновление проекта 2026-04-13 00:59:19 +08:00
ARCHITECTURE.md fix: исправление тултипов Chart.js и обновление проекта 2026-04-13 00:59:19 +08:00
INSTALL.md Initial commit - mon.mirv.top monitoring system 2026-02-14 15:08:14 +00:00
README.md docs: update README with install.sh script instructions 2026-04-14 01:05:43 +08:00
TECHNICAL_SPECIFICATION.md Initial commit - mon.mirv.top monitoring system 2026-02-14 15:08:14 +00:00
agent.py Add top CPU/RAM process collection to agent 2026-02-14 17:07:22 +00:00
composer.json fix: исправление тултипов Chart.js и обновление проекта 2026-04-13 00:59:19 +08:00
composer.lock Initial commit - mon.mirv.top monitoring system 2026-02-14 15:08:14 +00:00
monitoring_system_dump.sql fix: исправление тултипов Chart.js и обновление проекта 2026-04-13 00:59:19 +08:00
schema.sql Initial commit - mon.mirv.top monitoring system 2026-02-14 15:08:14 +00:00

README.md

🖥️ mirvmon — Система мониторинга серверов

Лёгкая и функциональная система мониторинга для домашних и небольших серверных инфраструктур.

PHP Slim MariaDB Chart.js


📋 Возможности

  • 📊 Метрики в реальном времени: 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-агента

Через скрипт установки (рекомендуется):

  1. Получите ссылку на скрипт: В веб-интерфейсе перейдите на страницу редактирования сервера и нажмите кнопку «Скачать install.sh». Или сгенерируйте ссылку вручную:

    https://mon.mirv.top/agent/install.sh?token=ВАШ_ТОКЕН
    
  2. Запустите установку на сервере:

    curl -o install.sh "https://mon.mirv.top/agent/install.sh?token=ВАШ_ТОКЕН"
    chmod +x install.sh
    sudo bash install.sh
    

    Скрипт сам установит Python, зависимости, создаст конфиг и настроит systemd-сервис.

  3. Проверьте статус:

    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