Files
vps_monitoring/README.md
Андрей Бобырев 1c4f97124a feat: keenetic integration, VPN alerts, docs
Wire keenetic monitor loop and router into main app. Add deduplicated
Telegram alerts for router offline, internet, CPU/RAM, and VPN down.
Update README with KeenDNS edit, import format, troubleshooting.

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

163 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 прямо из карточки роутера
## Установка
```bash
curl -sSL https://raw.githubusercontent.com/andrey271192/vps_monitoring/main/install.sh | bash
```
Кастомный порт:
```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 минимум
### Ручная установка
```bash
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`
```bash
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 роутера)
```bash
./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
```bash
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` |
```bash
systemctl status vps-monitoring
journalctl -u vps-monitoring --since "1 hour ago" -p err
ss -tlnp | grep 7272
```
## Обновление
```bash
cd /opt/vps-monitoring && git pull && systemctl restart vps-monitoring
```
## Автор
**@Iot_andrey** — [GitHub](https://github.com/andrey271192) · [Telegram](https://t.me/Iot_andrey)
MIT