Андрей Бобырев 306e687988 fix(keenetic): reset session after auth probe, retry 503
Probing used short timeouts on the session reused for RCI calls.
Recreate the session after auth and treat 503 as transient.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-22 03:22:25 +03:00

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-monitoring
  • ExecStart=/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)

  1. Карточка роутера → ✏️ KeenDNS
  2. Введите URL (https://example.netcraze.pro:8443)
  3. Сохранить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_andreyGitHub · Telegram

MIT

Description
Private: VPS Monitoring subscription-only access
Readme 173 KiB
Languages
Python 44.3%
JavaScript 25.5%
HTML 18.1%
CSS 5.6%
PowerShell 5.1%
Other 1.4%