Files
ipwhitelist-app/docs/kuma-alerts-2026-08-22.md
2026-08-27 12:50:26 +03:00

87 lines
7.2 KiB
Markdown
Raw Permalink 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.
# Kuma / алерты на сбой БД — сессия 2026-08-22
> Итог: задача (оповещения о сбое связи с БД) **поставлена на паузу**. Ниже — полная история, находки, причины и варианты. Kuma на ВМ 213 **откачена**.
## 1. Задача
Нужно личное оповещение (почта / Telegram) при сбое связи приложения `whitelist.nodejsk8s.services.ngcloud.ru` с БД. Рассматривался Uptime Kuma как мониторинг.
## 2. Что было развёрнуто и где
### Kuma на кластере `example-timasbxz` (уже существовала, не я)
- URL: `https://kum.containerk8s.dev.nubes.ru`
- Контейнер-сервис Nubes: deployment `containerk8s`, образ `louislam/uptime-kuma:1`
- namespace `5f9245f9-b813-4886-9997-1dd0a85de7e8`, под `containerk8s-595c6c8c5-hsctn`
- БД: managed MariaDB `mariak8s.5e053e2c-795d-4dfb-a872-0f98cc65d455.svc.cluster.local`
- user `kum`, db `kumbase`, пароль в Nubes UI (`kumpasswd` — тестовый)
- Монитор `IPWhitelist DB`: `HTTP(s) - Слово`, URL `https://whitelist.nodejsk8s.services.ngcloud.ru/v2/db-status`, слово `Connected` → **работает (UP)**
## 3. Найденные проблемы (факты)
### 3.1 Telegram заблокирован в сети Nubes/провайдера
- Из пода Kuma лог: `connect ETIMEDOUT 149.154.166.110:443` (api.telegram.org).
- `api.telegram.org` резолвится в `149.154.166.110` — **заблокирован** (timeout).
- Рабочий IP Telegram: **`149.154.167.220`** — открыт (curl `--resolve` → HTTP 302).
- Блокировка **выборочная по IP-диапазонам Telegram** (149.154.x частично, 91.108.x), не весь egress.
- С личной машины (WSL) Telegram доступен; из кластеров Nubes и ВМ 213 — нет.
### 3.2 Кластеры Nubes — нестабильный канал до API
- `example-timasbxz` (185.247.187.234) и `iot-naeel` (185.247.187.149) — оба:
- обрезают большие ответы API на ~21–30 KB (JSON неполный);
- HTTP/2 падает (`http2: client connection lost`), `kubectl`/`exec` зависают;
- малые ответы (metrics, отдельные ноды) стабильны (~0.2 с).
- Это общий сетевой слой Nubes (обе машины в подсети 185.247.187.x) — не конкретный кластер.
- Ресурсы кластера example в порядке: 16 CPU / 32 GB, занято ~11% CPU / ~29% RAM, ноды Ready.
### 3.3 egress (исходящий) в кластерах
- example: NetworkPolicy/CiliumNP/CCNP = **0** (нет политик). Egress к whitelist работает (монитор UP), к Telegram — нет.
- iot-naeel: `deny-cross-tenant` — только `policyTypes: ["Ingress"]`, egress не ограничивает; образы из интернета тянутся.
## 4. Инфраструктура (обследовано)
### ВМ 213 = `5.172.178.213` (naeel-vm, отладочная)
- SSH: `ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213`
- На 3001 крутится `node /home/naeel/ipwhitelist/server.js` (whitelist-приложение).
- Docker есть (29.1.3); контейнеры: `keycloak` (8080), `llmui` (8888).
- nginx на 80/443 (server_name 5.172.178.213 → proxy llmui:8888; домены check.kube5s.ru, obdai.ru).
- Telegram: **недоступен** (таймаут). Доступны: google, whitelist, sms.ru, smsc.ru, SMTP (smtp.yandex.ru/gmail/mail.ru).
### VULTR (Германия) = `95.179.252.111` (NaeelVultr) — КРИТИЧНЫЙ (VPN)
- SSH: `ssh -i ~/.ssh/vultr_openssh root@95.179.252.111` (исходный ключ `C:\SOFT\vultr.ppk`, сконвертирован в `~/.ssh/vultr_openssh`).
- **VPN = Xray** (слушает 8443 и 127.0.0.1:45987) + nginx (80/443) + gunicorn/python (8765/8766).
- **Telegram доступен нативно**: `https://api.telegram.org/` → HTTP 302 за 0.09 с.
- Ubuntu 22.04, Docker НЕТ, 951 MB RAM, 12 GB свободно.
## 5. Каналы алертов — сравнение
| Канал | Доступность из сети | Цена | Примечание |
|---|---|---|---|
| Telegram | ❌ из Nubes/ВМ 213; ✅ из VULTR и личной машины | 0 ₽ | нужен рабочий IP 149.154.167.220 или выход через VULTR |
| Email (SMTP) | ✅ smtp.yandex.ru:465/587 | 0 ₽ | ящик `tazet@narod.ru` + app password |
| SMS (smsc.ru) | ✅ 200 за 0.06 с | Мегафон 11.10 ₽, Т2 9.80 ₽, «остальные» 0.50 ₽ | sms.ru тоже доступен |
| SMS (междунар. Twilio/46elks/Plivo/ClickSend) | ✅ (Vonage ❌) | платно | для зарубежных номеров |
## 6. Креды (СЕКРЕТЫ — не коммитить в публичные репо)
- Telegram-бот: token `8690845859:AAFxjaWe55c1XfeB-hAjeKR3DIsXMQe67lA`, chat_id `378620327`, бот `@wl314159bot`.
- Почта (Yandex/narod): `tazet@narod.ru`, app password `msxaxwmjgrbfbqlq`.
- SSH: `~/.ssh/naeel_vm_id_ed25519` (ВМ 213), `~/.ssh/vultr_openssh` (VULTR).
- Номер получателя: Т2, зарегистрирован в Ульяновске (точный номер не зафиксирован в этой сессии).
## 7. Что сделано и откачено
- Kuma была развёрнута на ВМ 213 (Docker): контейнер `uptime-kuma`, порт `3002→3001`, том `/opt/uptime-kuma`.
- **ОТКАЧЕНО**: контейнер остановлен и удалён, том удалён, образ `louislam/uptime-kuma:1` удалён, правило ufw 3002 удалено. Порт 3002 свободен. Другие сервисы ВМ 213 (whitelist:3001, keycloak, llmui, nginx) НЕ тронуты.
## 8. Выводы и варианты на будущее
1. **Telegram** — рабочий путь: Kuma на VULTR (Германия), там Telegram нативно работает. Но VULTR критичен (VPN), установка требует аккуратности (без Docker).
2. **Email** — самый простой и безопасный: Kuma где угодно с доступом к smtp.yandex.ru (например, ВМ 213), бесплатно.
3. **SMS** — платно, но надёжно: smsc.ru на Т2 (~9.80 ₽/СМС).
4. Проблема обрезки API кластеров Nubes (~21–30 KB) — на уровне сетевого слоя, адресовать девопсам.
## 9. Ключевые технические детали (для повторного захода)
- Монитор whitelist: `HTTP(s) - Слово`, URL `https://whitelist.nodejsk8s.services.ngcloud.ru/v2/db-status`, слово **`Connected`** (не `PG Diagnostic OK` — в HTML между ними тег `<span>`).
- Kuma на кластере уже настроена и работает (монитор UP), осталось заменить канал уведомления.