Files
knowledge-base/projects/buzharovo/severny-les-bot.md

12 KiB
Raw Blame History

date, type, tags
date type tags
2026-05-08 project
buzharovo
bot
openclaw
watchdog
monitoring

Северный лес — AI-ассистент для server1c

Создан 2026-05-08, до отпуска Олега в Египте (2026-05-09 → 2026-05-22). Цель — пока Олега нет, кто-то на стороне Бужарово видит в Telegram-группе что происходит с сервером и может ткнуть /approve на восстановительные действия.

Что это

Отдельный AI-бот на стеке openclaw 2026.5.7, заточен только под мониторинг и реагирование на инциденты сервера 1С в Бужарово. Watchdog-слой работает независимо от openclaw и шлёт алерты в Telegram напрямую через bot API — даже если AI-часть упала, уведомления всё равно дойдут.

Не путать с:

Расположение

Параметр Значение
Proxmox LXC 139 (hostname severny-les)
IP LAN 10.0.0.240
NetBird IP 100.70.212.78 (FQDN severny-les.netbird.cloud)
Ресурсы 2 cores / 4 GB RAM / 10 GB disk (Ubuntu 24.04)
Доступ sshpass -p '1qaz!QAZ' ssh root@10.0.0.250 "pct exec 139 -- bash"

Telegram

  • Bot username: @bz_sl_bot
  • Display name: "ИИ Ассистент Бужарово ( Северный лес )"
  • Bot ID: 8322860033
  • Token: см. /root/.openclaw/openclaw.jsonchannels.telegram.botToken (или /etc/severny-les/watchdog.env)
  • Allowlist: Олег 1292155421 (DM). Группа — пока пустая, обновим groupAllowFrom когда бот будет добавлен в TG-группу руководящего состава.

Стек и сервисы

openclaw 2026.5.7 (system-level systemd)

  • Конфиг: /root/.openclaw/openclaw.json
  • Workspace: /root/clawd/ (IDENTITY/INFRASTRUCTURE/USER/SOUL/MEMORY/TOOLS/HEARTBEAT.md + scripts/)
  • Unit: /etc/systemd/system/openclaw-gateway.service (НЕ --user как на 137 — в LXC без sessions это не работает)
  • Gateway port: 18790 (на 137 — 18789, чтобы не путать)
  • Primary model: omniroute/cc/claude-opus-4-7 (Opus 4.7 через Max), fallbacks: kr/claude-sonnet-4.5cc/claude-sonnet-4-6
  • Plugin bonjour: disabled (превентивно от mDNS-крэшей в LXC)
  • NODE_OPTIONS: --dns-result-order=ipv4first (превентивно от Telegram IPv6-сбоев)
systemctl status openclaw-gateway.service
systemctl restart openclaw-gateway.service
journalctl -u openclaw-gateway.service -n 50 --no-pager

buzharovo-watchdog (system-level systemd timer, каждые 60s)

  • Скрипт: /usr/local/bin/buzharovo-watchdog.sh
  • Unit: /etc/systemd/system/buzharovo-watchdog.{service,timer}
  • Env: /etc/severny-les/watchdog.env (TG token + chat_id)
  • State: /var/lib/severny-les/state.json — антиспам (алерт только при смене уровня)

Уровни: OK / WARNING (часть проверок упала) / WARNING_NETBIRD (NB до server1c лежит, публично OK) / CRITICAL (сервер недоступен и публично, и через NetBird).

Алерт уходит в TG напрямую через https://api.telegram.org/bot.../sendMessage, мимо openclaw. Если openclaw упал — алерт всё равно придёт.

journalctl -t buzharovo-watchdog --since "1 hour ago" -n 30
systemctl list-timers buzharovo-watchdog.timer
# Тестовый прогон:
set -a; . /etc/severny-les/watchdog.env; set +a; /usr/local/bin/buzharovo-watchdog.sh

netbird-watchdog (как на LXC 132/137)

  • Скрипт: /usr/local/bin/netbird-watchdog.sh (порт с LXC 137)
  • Unit: /etc/systemd/system/netbird-watchdog.{service,timer} (каждые 2 мин)
  • При Relays: 0/N или Peers: 0/N (когда N>0) и Management=Connected — systemctl restart netbird (минимум 5 мин между рестартами).

Heartbeat (cron */5)

  • /etc/cron.d/severny-les-heartbeat/root/clawd/scripts/heartbeat.sh пишет timestamp в /tmp/severny-les-heartbeat
  • buzharovo-watchdog проверяет: если heartbeat старше 600s — добавляет в алерт строчку про "openclaw молчит" (анти-спам: не чаще 1 раз в час).

Что бот может делать (TOOLS.md)

Без /approve (read-only)

  • /status — общий статус (ping/порты публично + через NetBird, состояние 1С службы, CPU rmngr)
  • /check_1c — три 1С службы через WinRM (Running/Stopped/Disabled)
  • /check_rmngr — детектор rmngr-loop (CPU rmngr.exe за 5 секунд, >50% = диагноз)

С /approve от Олега 1292155421

  • /restart_1cRestart-Service '1C:Enterprise 8.3 Server Agent (x86-64)' -Force. Все сеансы 1С вылетят. Это рецепт от 2026-05-07 rmngr-loop (decisions/2026-05-07-buzharovo-1c-rmngr-loop-after-crash).
  • /kill_orphan_ragent — найти ragent.exe без LISTENING на 1540 и Stop-Process -Force (зомби после restart_1c).

Ребут сервера НЕ даём — по опыту 2026-05-07 ребут rmngr-loop не помогает, простой добавляет.

exec-approvals.json лежит в /root/.openclaw/exec-approvals.json — это whitelist для openclaw. Команды не из whitelist openclaw отказывается выполнять.

WinRM на server1c

  • Адрес: 100.70.75.103:5985 (через NetBird, basic, http) — публично 5985 закрыт
  • Учётка: dttb / 1qaz!QAZ
  • Python: pywinrm уже стоит. Обёртка — /root/clawd/scripts/winrm_lib.py.

⚠️ На 2026-05-08 NetBird ACL до server1c пока НЕ работает — handshake не идёт (Required key not available). Олегу нужно в NetBird Dashboard разрешить severny-les доступ к server1c хотя бы на порты 5985 (WinRM) + 1 ICMP + 3389 (опц.). До этого WinRM-actions не работают, watchdog мониторит только публичные проверки.

Скрипты в /root/clawd/scripts/

Скрипт Что делает
check_buzharovo.sh bash, общий статус (ping+порты), без WinRM
winrm_lib.py обёртка pywinrm, переиспользуют все py-скрипты
check_1c_service.py 3 службы 1С через WinRM
check_rmngr_cpu.py детектор rmngr-loop
restart_1c_agent.py Restart-Service '1C:...' (требует /approve)
kill_orphan_ragent.py убить зомби ragent (требует /approve)
heartbeat.sh cron, пишет timestamp
sql_native_backup.py бэкап ИБ через MS SQL Server BACKUP DATABASE с компрессией (см. decisions/2026-05-08-buzharovo-sql-native-backup). Online, ~2 сек на 3.8 GB, не требует cluster admin 1С

Сценарии работы

Олег в отпуске, ночью упал rmngr

  1. Watchdog на 60-й секунде заметил: WinRM 1C:Enterprise 8.3 Server Agent (x86-64) всё ещё Running, но check_rmngr_cpu.py вернул RMNGR_LOOP.
  2. Watchdog шлёт в TG-группу: 🚨 Северный лес — rmngr-loop на server1c. CPU rmngr 67%. Предлагаю /restart_1c.
  3. Дежурный из руководящего состава отвечает в группу, бот ему: "Ок, но нужно /approve от Олега. Можете позвонить ему? Или подождать утра — время до критичного простоя ~2 часа."
  4. Олег с пляжа делает /approve restart_1c → бот выполняет → отписывается в группу что прошло.

Сервер недоступен публично

  1. Watchdog: 3 подряд провала ping 185.13.47.2 за 3 минуты + RDP не отвечает.
  2. Шлёт в группу: 🚨 server1c НЕДОСТУПЕН. Не отвечает ни публично, ни через NetBird. Похоже сервер лёг или сеть провайдера.
  3. Бот ничего не может сделать сам — это VDS у внешнего провайдера. Эскалирует на Олега, ждёт ручного вмешательства.

NetBird до server1c упал, публично всё OK

  1. Watchdog: ping 185.13.47.2 ОК, ping 100.70.75.103 нет.
  2. Шлёт: ⚠️ NetBird до server1c лежит. Публично сервер виден. WinRM-actions недоступны.
  3. Сервер сам по себе работает — пользователи в Бужарово 1С видят. Но бот не может делать диагностику/рестарты пока NetBird не починен.

Чек-лист после возвращения Олега из Египта

  • Прописать в NetBird Dashboard ACL severny-lesserver1c (5985 TCP минимум).
  • Добавить @bz_sl_bot в TG-группу руководящего состава Северного леса; узнать chat_id группы.
  • Обновить /etc/severny-les/watchdog.env BZ_TG_CHAT на групповой chat_id.
  • Обновить /root/.openclaw/openclaw.json channels.telegram.groupAllowFrom — добавить chat_id группы.
  • Сделать smoke-test /restart_1c (на тестовых выходных, не в боевые часы) — убедиться что openclaw реально дёргает скрипт после /approve.
  • После миграции server1c на свой сервер — обновить IP в /root/clawd/INFRASTRUCTURE.md и в watchdog-скрипте.

Известные ограничения и риски

  • NetBird ACL на момент создания не пускает severny-les к server1c. Watchdog мониторит публично + через NetBird пингом; WinRM-команды (диагностика 1С, рестарт службы) не работают пока ACL не настроен.
  • Группа TG ещё не настроена — алерты идут в личку Олегу. Когда @bz_sl_bot добавят в группу — поправить env+config.
  • Bonjour отключен превентивно (был crash-loop на 137, см. projects/dttb/openclaw#Проблема-Crash-loop-каждые-40-сек).
  • DNS LXC 139 идёт на 1.1.1.1/8.8.8.8 напрямую (через pct set --nameserver), не на 10.0.0.1 — иначе FakeIP от Mihomo ломает Telegram API.
  • openclaw на system-level (не --user как на 137). В LXC без user-session systemd --user недоступен.

Бэкап

# на самом LXC 139
tar czf /root/severny-les-state-$(date +%F).tar.gz /root/.openclaw /root/clawd /etc/systemd/system/buzharovo-watchdog.* /etc/systemd/system/netbird-watchdog.* /etc/systemd/system/openclaw-gateway.service /etc/severny-les /etc/cron.d/severny-les-heartbeat /usr/local/bin/buzharovo-watchdog.sh /usr/local/bin/netbird-watchdog.sh

# скопировать наружу
sshpass -p '1qaz!QAZ' ssh root@10.0.0.250 "pct pull 139 /root/severny-les-state-*.tar.gz /var/lib/vz/dump/"

Откат

Если бот сломал что-то и его нужно убрать целиком:

# stop and disable
pct exec 139 -- systemctl disable --now openclaw-gateway.service buzharovo-watchdog.timer netbird-watchdog.timer

# либо целиком LXC
pct stop 139 && pct destroy 139

NetBird-пир severny-les.netbird.cloud останется в Dashboard — нужно удалить руками.