Resetting the session after auth dropped cookies and broke metrics collection with "No data from router" despite successful login. Co-authored-by: Cursor <cursoragent@cursor.com>
VPS Monitoring
Платформа мониторинга VPS, Keenetic-роутеров, Synology, Home Assistant и Windows PC с веб-панелью, SSH-терминалом и Telegram-ботом.
Возможности
- VPS — CPU, RAM, Disk, Network, Uptime, Load Average, SSH-терминал
- Keenetic — мониторинг роутеров через KeenDNS/RCI API, VPN-туннели, AnyDesk-ссылки
- Synology / HA / PC — дополнительные вкладки мониторинга
- Telegram — бот, Mini App, алерты (offline, CPU/RAM, VPN down 5+ мин)
- KeenDNS edit — изменение web URL прямо из карточки роутера
Установка
curl -sSL https://raw.githubusercontent.com/andrey271192/vps_monitoring/main/install.sh | bash
Кастомный порт:
curl -sSL https://raw.githubusercontent.com/andrey271192/vps_monitoring/main/install.sh | bash -s -- --port 9090
Требования
- Ubuntu 20.04+ / Debian 11+
- Python 3.10+
- 512 MB RAM минимум
Ручная установка
git clone https://github.com/andrey271192/vps_monitoring.git /opt/vps-monitoring
cd /opt/vps-monitoring
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # заполните TELEGRAM_*
mkdir -p data
Systemd unit (/etc/systemd/system/vps-monitoring.service):
WorkingDirectory=/opt/vps-monitoringExecStart=/opt/vps-monitoring/venv/bin/uvicorn server.main:app --host 0.0.0.0 --port 7272
systemctl daemon-reload && systemctl enable --now vps-monitoring
После установки
- Панель:
http://YOUR_IP:7272 - Логин:
admin/admin(смените в настройках) - Health:
GET /api/health
Переменные окружения
| Переменная | Описание |
|---|---|
TELEGRAM_BOT_TOKEN |
Токен Telegram-бота |
TELEGRAM_CHAT_ID |
ID чата для алертов |
Задаются в systemd unit (Environment=...) или в data/settings.json. См. .env.example.
Дополнительные настройки в data/settings.json: пороги CPU/RAM/Disk, keenetic_interval, muted_devices.
Keenetic — импорт роутеров
Формат import (TSV/CSV)
Колонки: Address, Keenetic, AnyDesk (заголовок опционален).
Address Keenetic AnyDesk
Москва Сити https://moscowcity.netcraze.pro:5443
Лофт https://loftliliana.netcraze.pro 1020687391
Подмосковный http://95.165.93.46:777 1527495291
POST /api/keenetic/import — body: {"login":"admin","password":"...","tsv":"..."}.
Скрипт синхронизации (24 роутера)
./venv/bin/python3 scripts/sync_keenetic_import.py /opt/vps-monitoring/data/keenetic.json
HTTP/HTTPS и порты
- URL сохраняется как есть:
https://host:5443,http://91.77.164.164 - Схема по умолчанию —
httpsдля KeenDNS,httpдля IP - Порт входит в
hostиweb_url(напримерmalahovka1.netcraze.pro:5083) - Кнопка Веб на карточке использует точный
web_url
KeenDNS edit (dashboard)
- Карточка роутера → ✏️ KeenDNS
- Введите URL (
https://example.netcraze.pro:8443) - Сохранить →
PATCH /api/keenetic/{name}обновляетkeenetic.jsonи делает refresh
Проверка доступности с VPS
cd /opt/vps-monitoring
./venv/bin/python3 scripts/quick_auth_check.py # быстрая auth-проверка
./venv/bin/python3 scripts/check_keenetic.py # полная (медленнее)
Telegram алерты
Настройка: TELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_ID в systemd или settings.
Keenetic алерты:
- Router offline / back online
- No internet
- CPU/RAM > 90%
- VPN down 5+ минут (sustained, deduplicated)
Per-device mute: 🔔/🔕 на карточке → POST /api/notifications/mute-device.
Тест: POST /api/notifications/test/telegram.
API (основное)
| Endpoint | Method | Описание |
|---|---|---|
/api/login |
POST | Авторизация |
/api/keenetic/list |
GET | Список роутеров |
/api/keenetic/import |
POST | Импорт TSV/CSV |
/api/keenetic/{name} |
PATCH | Обновить web_url |
/api/keenetic/refresh/{name} |
POST | Обновить один |
/api/keenetic/refresh-all |
POST | Обновить все |
/api/servers |
GET | VPS серверы |
/api/health |
GET | Health check |
Troubleshooting
| Симптом | Причина | Действие |
|---|---|---|
ConnectionTimeoutError |
VPS не достучался до роутера (сеть/VPN/firewall) | Проверить KeenDNS, порт, доступность с VPS: curl -m 10 URL |
Authentication failed / 401 |
Неверный login/password | Проверить credentials в keenetic.json |
Name or service not known |
DNS не резолвится | Проверить KeenDNS имя, TTL |
| Панель не отвечает | Сервис упал / перегрузка polling | systemctl restart vps-monitoring, journalctl -u vps-monitoring -n 50 |
| Медленный refresh-all | 24 роутера × 3 retry × timeout | Использовать quick_auth_check.py, увеличить keenetic_interval |
systemctl status vps-monitoring
journalctl -u vps-monitoring --since "1 hour ago" -p err
ss -tlnp | grep 7272
Обновление
cd /opt/vps-monitoring && git pull && systemctl restart vps-monitoring
Автор
@Iot_andrey — GitHub · Telegram
MIT