From 7a1b07a47e633dd95e28a9ee45d700937abf1af7 Mon Sep 17 00:00:00 2001 From: dttb Date: Thu, 14 May 2026 18:45:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=91=D1=83=D0=B6=D0=B0=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=BE=20watchdog=20v2:=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE?= =?UTF-8?q?=20=D0=BF=D1=83=D0=B1=D0=BB=D0=B8=D1=87=D0=BD=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BA=D0=B0=D0=BD=D0=B0=D0=BB,=20NetBird=20=D0=B2=D1=8B=D0=BD?= =?UTF-8?q?=D0=B5=D1=81=D0=B5=D0=BD=20=D0=B8=D0=B7=20alert=20level?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit NetBird daemon на Server1C (Windows) регулярно flap-ает — известная проблема. Watchdog v2 решает по level только по ping public + RDP 3389. NetBird-уровень логируется в state.json для информации, но не порождает алерты. Параллельно: primary model openclaw переключен с Opus 4.7 (Max-биллинг закончился) на Sonnet 4.5 free (Kiro), Opus оставлен в fallbacks. Co-Authored-By: Claude Opus 4.7 (1M context) --- ...26-05-14-buzharovo-watchdog-public-only.md | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 decisions/2026-05-14-buzharovo-watchdog-public-only.md diff --git a/decisions/2026-05-14-buzharovo-watchdog-public-only.md b/decisions/2026-05-14-buzharovo-watchdog-public-only.md new file mode 100644 index 0000000..fdee4e1 --- /dev/null +++ b/decisions/2026-05-14-buzharovo-watchdog-public-only.md @@ -0,0 +1,85 @@ +--- +date: 2026-05-14 +type: decision +tags: [decision, buzharovo, watchdog, netbird, monitoring, openclaw] +--- + +# 2026-05-14: Watchdog Бужарово — только публичный канал, NetBird вынесен из alert level + +## Контекст + +Олег в Египте, прислал что бот "сыпал ошибками вчера, попросил отключить мониторинг". Разведка: + +1. **Все сервисы на LXC 139 живы** (`openclaw-gateway`, `buzharovo-watchdog.timer`, `netbird-watchdog.timer`, `netbird.service` — `active+enabled`). Олег ничего не отключал. +2. **Watchdog v1 правильно держал `WARNING_NETBIRD`** (последний алерт 13 мая ~19:32 МСК), антиспам корректный — повторных алертов не слал. +3. **Истинный источник "ошибок"** — `openclaw primary model = omniroute/cc/claude-opus-4-7` упёрся в лимит Max-подписки: + ``` + omniroute (cc/claude-opus-4-7) returned a billing error — your API key has run out of credits + 400 [400]: You're out of extra usage. Add more at claude.ai/settings/usage and keep going. + ``` + Каждое сообщение в боте + каждое ночное `memory-core dreaming` (cron 03:00) → billing 400 → failover на `kr/claude-sonnet-4.5`. На клиенте часть запросов могла отдаться с ошибкой раньше чем failover отработал. +4. **Server1C NetBird daemon (Windows)** регулярно flap'ает, `last_seen=2026-05-13T08:24:26` — > 25 часов вне mesh, хотя сервер сам публично жив (ping + RDP 3389 OK). + +## Решения + +### Фикс 1: primary model → free Sonnet 4.5 + +`/root/.openclaw/openclaw.json`: +```json +{ + "primary": "omniroute/kr/claude-sonnet-4.5", + "fallbacks": [ + "omniroute/cc/claude-sonnet-4-6", + "omniroute/gh/claude-sonnet-4.5", + "omniroute/cc/claude-opus-4-7" + ] +} +``` +Hot-reload подхватился. Backup конфига — `/root/.openclaw/openclaw.json.bak.opus-billing-`. + +**Возврат на Opus как primary — только после пополнения Max** или подключения второго конектора в OmniRoute. + +### Фикс 2: watchdog v2 — только публичный канал + +Переписан `/usr/local/bin/buzharovo-watchdog.sh`. Логика alert-level **больше не учитывает NetBird-проверки**: + +- `OK` — `ping 185.13.47.2` ✓ + `TCP 3389` (RDP) ✓ +- `DEGRADED` — один из публичных упал +- `CRITICAL` — оба публичных упали + +NetBird-уровень (`ping 100.70.75.103` + `TCP 5985`) **только логируется** в `state.json` (`ping_nb`, `winrm_nb`), но не меняет level и не порождает алерт. + +При первом алерте в новую сессию (prev_level=INIT) добавляется пометка: +> _NetBird до сервера сейчас лежит — это известная регулярная проблема со стороны Windows-сервера, не влияет на работу 1С для пользователей. Watchdog проверяет только публичный канал._ + +**Почему так:** NetBird daemon на Server1C (Windows 2012 R2) теряет mesh-сессию регулярно (memory `feedback_netbird_watchdog`). Лечится `Restart-Service netbird` через RDP — но это ручная операция, и поток алертов из-за этого был шумом, а не сигналом. Сервер для пользователей в Бужарово при этом работает — 1С локально доступна. + +**Что теряем:** WinRM-actions (`check_1c_service.py`, `check_rmngr_cpu.py`, `restart_1c_agent.py`, `sql_native_backup.py`) идут через NetBird (`100.70.75.103:5985`). Когда NetBird падает — эти actions недоступны. Бот в группе об этом честно скажет: "Не могу проверить состояние службы 1С — туннель до сервера временно лежит". Восстанавливается после `Restart-Service netbird` на server1c через RDP. + +**Что НЕ теряем:** алерты о реально критичных событиях (сервер физически лёг публично, сеть провайдера упала, RDP закрылся). + +## Деплой + +```bash +pct push 139 wd.sh /usr/local/bin/buzharovo-watchdog.sh +chmod +x /usr/local/bin/buzharovo-watchdog.sh +chown root:root /usr/local/bin/buzharovo-watchdog.sh +echo "{}" > /var/lib/severny-les/state.json # force re-evaluate +# Manual run → level=OK, alert "Мониторинг включён" ушёл в группу +``` + +## Обновления в vault и persona + +- `/root/clawd/MEMORY.md` на LXC 139 — добавлены уроки про Opus billing + watchdog v2 +- [[projects/buzharovo/severny-les-bot]] — обновить ссылку на watchdog v2 (TODO) +- Этот decision-файл + +## NetBird route 10.0.0.0/24 — попутно + +Существующий route `Dom` (`cud7q73l0ubs73dr3gc0`) advertised через peer `pve 100.70.121.235 (Эстония)`, **disconnected**. Переключил routing peer на **`openclaw` (`d79s9g2fadhs739mihkg`)** через PUT `/api/routes/cud7q73l0ubs73dr3gc0`. Mac получил доступ к 10.0.0.0/24 через NetBird → openclaw → LAN. + +## TODO (опционально, не сейчас) + +- **Reverse SSH-туннель** server1c → severny-les для WinRM-actions без зависимости от NetBird. Server1C сам делает outbound SSH → LXC 139 пробрасывает 127.0.0.1:55985 → server1c:5985. WinRM-скрипты целятся в `localhost:55985`. Решает проблему "NetBird лёг — WinRM недоступен". +- **HTTPS WinRM (5986)** публично с certificate-pin'ом — альтернатива через интернет, но требует настройки SSL и хорошего firewall. +- **Ночной cron sql_native_backup.py** — автоматизация ежедневных бэкапов БД (TODO от 2026-05-08, см. соответствующий decision).