Легка, швидка та сучасна платформа моніторингу інфраструктури для Linux, Windows та macOS — з панеллю керування у стилі Grafana, збором метрик у реальному часі та гнучкими сповіщеннями.
- Основні можливості
- Швидкий старт
- Розгортання агентів
- Команди
- Конфігурація та змінні середовища
- Безпека
- Документація
- Технології
- Професійний NOC Dashboard — сучасний інтерфейс у темній темі з потоковою передачею метрик (WebSocket) та індикаторами здоров'я.
- Моніторинг серверів — CPU, RAM, диски та мережа через
node_exporter(Linux). - Моніторинг сервісів — зовнішні перевірки HTTP / TCP / Ping / SSL (Blackbox) для сайтів та API.
- Сповіщення — Telegram, Discord, MS Teams, Slack, Email (SMTP).
- Міграція з Prometheus — імпорт наявних
prometheus.yml(сервери та сервіси) прямо в інтерфейсі. - Режим обслуговування — тимчасове відключення сповіщень для вузлів під час планових робіт.
- Alerting rules — гнучкі правила на CPU/RAM/диск з дебаунсингом за тривалістю.
- Звіти про здоров'я — генерація 24-годинних звітів із графіками (PDF через друк).
- Бекапи — автоматичні за розкладом (cron) та ручні, з відновленням.
- PWA — встановлення дашборду на мобільний як окремий застосунок.
Ubuntu / Debian (одна команда і встановлює, і оновлює):
curl -sSL https://raw.githubusercontent.com/ajjs1ajjs/Monitoring/main/install.sh | sudo bashАбо збірка з сирців:
./run.sh --port 10000Одна й та сама команда і встановлює, і оновлює. Скрипт сам визначає режим.
Windows (PowerShell від імені адміністратора; одна команда і встановлює, і оновлює):
irm https://raw.githubusercontent.com/ajjs1ajjs/Monitoring/main/install.ps1 | iexРеєструється як служба Windows (PyMonNOC, автозапуск), запускається під NT AUTHORITY\NetworkService. Дані та конфіг зберігаються в %ProgramData%\PyMon і не видаляються при повторному запуску скрипта (оновлення бінарника).
macOS (Apple Silicon та Intel):
curl -sSL https://raw.githubusercontent.com/ajjs1ajjs/Monitoring/main/install.sh | sudo bashВстановлюється як LaunchDaemon (com.pymon.pymon), дані в /var/lib/pymon.
| Встановлення (перший запуск) | Оновлення (повторний запуск) | |
|---|---|---|
| Бінарник | завантажується з GitHub Releases | замінюється на новий |
Конфіг /etc/pymon/config.yml |
створюється з прикладу | зберігається без змін |
База даних /var/lib/pymon/pymon.db |
створюється | зберігається без змін |
| Користувачі та паролі | створюється адмін | зберігаються без змін |
| Старий бінарник | — | зберігається як pymon.old (відкат) |
Служба systemd |
створюється та запускається | перезапускається |
Відкат після оновлення (якщо щось пішло не так):
sudo systemctl stop pymon
sudo install -m 0755 /opt/pymon/pymon.old /opt/pymon/pymon
sudo systemctl start pymonВстановлення конкретної версії:
PYMON_VERSION=v3.0.0 curl -sSL https://raw.githubusercontent.com/ajjs1ajjs/Monitoring/main/install.sh | sudo bashПри першому встановленні скрипт генерує пароль і друкує його прямо у висновку:
====================================
Логін: admin
Пароль: <згенерований>
====================================
Пароль також зберігається одноразово у /var/lib/pymon/admin_password.txt (права 0600):
sudo cat /var/lib/pymon/admin_password.txt
sudo rm /var/lib/pymon/admin_password.txt # видаліть після входуВтратили пароль або хочете свій — скиньте:
sudo PYMON_ADMIN_PASSWORD='YourStrongPass123' /opt/pymon/pymon reset-admin --config /etc/pymon/config.yml
sudo systemctl restart pymon
# Логін: admin / YourStrongPass123💡 При першому вході дашборд попросить змінити пароль перед використанням (це стандартний flow
must_change_password). Після зміни — інтерфейс повністю активний.
- Дашборд слухає TCP 10000 (можна змінити у
config.yml→server.port). - Якщо браузер на іншій машині — відкрийте порт:
sudo ufw allow 10000/tcp
curl http://localhost:10000/api/v1/health # {"status":"ok"}Linux Node (node_exporter):
curl -sSL https://github.com/prometheus/node_exporter/releases/latest/download/node_exporter-*.linux-amd64.tar.gz -o ne.tar.gz
tar xzf ne.tar.gz && ./node_exporter/node_exporter &Далі додайте вузол у дашборді (Servers → Add) або імпортуйте prometheus.yml.
sudo systemctl start|stop|restart|status pymon
sudo journalctl -u pymon -f # якщо journalctl доступний
# Оновлення = та сама команда встановлення
curl -sSL https://raw.githubusercontent.com/ajjs1ajjs/Monitoring/main/install.sh | sudo bash
# Прямий запуск з сирців (для розробки)
./run.sh --port 10000# Задати конкретний пароль (через sudo, бо файли належать pymon)
sudo PYMON_ADMIN_PASSWORD='YourStrongPass123' /opt/pymon/pymon reset-admin --config /etc/pymon/config.yml
sudo systemctl restart pymonStart-Service PyMonNOC ; Stop-Service PyMonNOC ; Restart-Service PyMonNOC
Get-Service PyMonNOC
Get-EventLog -LogName Application -Source PyMonNOC -Newest 20 # якщо служба пише в Event Log
# Оновлення = та сама команда встановлення
irm https://raw.githubusercontent.com/ajjs1ajjs/Monitoring/main/install.ps1 | iexСкидання пароля адміна (Windows):
$env:PYMON_ADMIN_PASSWORD = "YourStrongPass123"
& "$env:ProgramFiles\PyMon\pymon.exe" reset-admin --config "$env:ProgramData\PyMon\config.yml"
Restart-Service PyMonNOCКонфігурація — у config.yml (за зразком config.example.yml). Файл config.yml у .gitignore — не комітьте секрети в git.
| Змінна | Призначення | За замовчуванням |
|---|---|---|
JWT_SECRET |
Ключ підпису JWT (мін. 32 символи). Задавайте на проді, щоб токени переживали рестарт. | авто → .pymon_jwt_secret |
PYMON_ADMIN_PASSWORD |
Початковий/скидальний пароль адміна. | випадковий (показ один раз) |
CONFIG_PATH |
Шлях до конфіга. | config.yml |
DB_PATH |
Шлях до бази (перекриває конфіг). | з config.yml |
DATA_DIR / LOG_DIR |
Директорії даних і логів. | . |
PYMON_ALLOW_METADATA |
Дозволити скрейп cloud-метаданих (169.254.169.254). |
false |
PYMON_ALLOWED_ORIGINS |
Cross-origin allowlist для API та WebSocket (CSWSH-захист), через кому. Порожньо = same-origin. | порожньо |
Повний приклад — .env.example.
- Пароль адміна показується лише один раз — при першому створенні або після
reset-admin. Він ніколи не зберігається у відкритому вигляді — у базі лежить тільки bcrypt-хеш. Втратили — виконайтеpymon reset-admin. - Дефолтного пароля в коді немає. За порожнього/слабкого значення в
config.ymlна першому запуску генерується сильний випадковий пароль (можна задати черезPYMON_ADMIN_PASSWORD). - Керування інфраструктурою — лише для адмінів. Створення/зміна/видалення серверів, бекапи (
/backup/*), очищення журналів і метрик доступні тільки адмінам. - API-ключі — лише для інжесту/читання. Будь-які адмін-дії через
X-API-Keyповертають403. - Захист від XSS — усі дані екрануються; хост валідовується суворим whitelist-ом символів.
- Захист від SSRF — скрейп відмовляє на адреси cloud-метаданих (вимикач
PYMON_ALLOW_METADATA=true); приватні LAN-діапазони лишаються дозволеними. - Політика пароля — мінімум 12 символів, верхній + нижній регістр + цифра.
| Документ | Опис |
|---|---|
| docs/API.md | REST API довідка |
| docs/ARCHITECTURE.md | Архітектура проекту |
| docs/TROUBLESHOOTING.md | Усунення несправностей |
| CHANGELOG.md | Журнал змін |
| MIGRATION_PLAN.md | План міграції Python → Go |
Бекенд: Go 1.25 · net/http · SQLite (WAL, modernc.org/sqlite) · gorilla/websocket · golang-jwt · prometheus/common
Фронтенд: Vanilla JS · Chart.js · WebSocket · PWA (embedded через go:embed)
Агенти: Prometheus node_exporter




