Шлюз OpenClaw в macOS легко забыть, пока он работает: LaunchAgent держит долгоживущий процесс на порту, агенты ходят по loopback, журналы тихие. После перезагрузки гипервизора, ротации TLS или частичного обновления CLI демон часто «залипает» без шума, пока не остановится клиентский трафик. Здесь — как построить мониторинг здоровья для арендованного облачного Mac mini: синтетические пробы, бюджеты задержек, связка с openclaw doctor и runbook’и восстановления. Сначала прочитайте диагностику шлюза через OpenClaw doctor, чтобы пробы проверяли те же инварианты, что и человек, и держите открытым перезапуск шлюза и восстановление LaunchAgent — алерты должны заканчиваться там, а не в импровизированной истории shell.
Сигналы перед отказом
Здоровый шлюз стабильно отвечает на лёгкие HTTP/WebSocket-handshake, пишет структурные логи без всплесков ошибок и держит CPU в предсказуемом диапазоне. Больной шлюз часто показывает рост p95 задержки до полного отказа, повторяющиеся ошибки TLS после смены сертификатов или внезапные выходы процесса, когда macOS отзывает ранее кэшированное разрешение TCC.
Считайте вывод openclaw doctor контрактом: doctor зелёный при красных пробах — вероятен сетевой путь или port forwarding. Пробы зелёные при предупреждениях о версиях — вы близки к несовместимости. Храните оба сигнала на одной временной шкале инцидента.
Телеметрия небольших команд на общих mini показывает порядка 5–8% еженедельных алертов из-за плановых окон — снапшоты, сеть провайдера — калибруйте пороги, чтобы не выжечь дежурных, но ловить регрессии за минуты.
Следите за дескрипторами файлов и ротацией логов: без лимита растущий журнал давит на тот же процесс, что обслуживает health. В мультитенантности изолируйте пользователей, порты и каталоги логов, чтобы сосед не исчерпал FD для всех.
Версионируйте вывод doctor: diff между релизами часто добавляет проверки, которые нужно отразить в синтетике.
Проектирование проб
Хорошая проба копирует минимальное успешное взаимодействие: авторизация при необходимости, health-роут или сокет, заголовок версии, ненулевой код при таймауте. Три точки зрения: localhost на mini (bind/демон), бастион или VPN (маршрут), внешняя только при осознанной публикации шлюза — чего большинство команд избегает.
Запускайте пробы через launchd с ограничением параллелизма; джиттер и экспоненциальный backoff снижают самонанесённый отказ во время инцидентов.
Безопасность: не кладите долгоживущие токены в команды, попадающие в syslog. Короткоживущие учётные данные, строгие env-файлы или связка с связкой ключей macOS под отдельным пользователем-зондом, зеркалирующим прод.
В staging добавьте «негативные» пробы (неверные токены), чтобы отличать ожидаемые 401/403 от неожиданных 5xx.
Пример скрипта
Иллюстративный фрагмент; подставьте порт и заголовки.
#!/bin/bash
set -euo pipefail
URL="http://127.0.0.1:18789/health"
START=$(python3 - <<'PY'
import time; print(int(time.time()*1000))
PY
)
code=$(curl -sS -o /tmp/ocgw_probe.json -w "%{http_code}" "$URL" || true)
END=$(python3 - <<'PY'
import time; print(int(time.time()*1000))
PY
)
lat=$((END-START))
echo "openclaw_probe http=$code latency_ms=$lat"
[[ "$code" == "200" ]] || exit 1
Отправляйте структурную строку в сборщик логов или экспортёр метрик. Успех должен укладываться примерно в секунду.
Таблица SLO
Используйте на сервис-ревью; подстройте под обязательства перед клиентом.
| Метрика | Цель | Заметки |
|---|---|---|
| Месячная доступность | 99,5%+ | Плановые окна выносите отдельно. |
| p95 задержка пробы | < 300 мс localhost | Всплески часто предшествуют исчерпанию сокетов. |
| Неуспешные пробы | < 5–8% / неделя | Ищите паттерны, не единичные точки. |
| Дрейф doctor | 0 предупреждений | Расхождение версий должно будить раньше клиентов. |
Сочетайте количественные SLO с ручной проверкой раз в спринт: doctor и метки времени в ~/Library/Logs.
Еженедельная эксплуатация облачного Mac
Арендованные mini перезагружаются при миграциях и патчах ядра. После reboot проверьте порядок LaunchAgent, чтение секретов, затем снова doctor.
Закладывайте 30–45 минут в неделю: дашборды, ротация коротких секретов, снапшот перед рискованными обновлениями. Без запасного железа арендуйте Mac mini на Apple Silicon с SSH/VNC примерно за $16,9/день в напряжённые недели — дешевле срочной доставки ноутбуков.
Документируйте маршруты алертов: Slack, PagerDuty, скрипт пересоздания хоста. Мультитенант — отдельные пользователи-зонды.
Цикл: алерт → doctor → контролируемый restart launchctl → переустановка бинарника только при доказанном дрейфе plist/путей.
Корреляция важнее красного/зелёного: задержка растёт при HTTP 200 — ищите блокировки event loop, тяжёлый JSON, синхронный дисковый I/O или антивирус на свежих логах. Прикладывайте sample/spindump к тикетам.
Мониторинговые скрипты — как продуктовый код: ревью, версии, закреплённые интерпретаторы, контрольные суммы.
Плитка для руководства: uptime, медианная задержка, открытые инциденты. Все три ухудшились — это инфраструктура, не промпт.
Обучайте дежурных по двум ссылкам: doctor даёт доказательства, restart — управляемый рычаг.
Если шлюз стоит за локальным reverse proxy, пусть пробы бьют и в loopback-порт демона, и в публичный путь прокси. Так быстрее увидите проблему сертификата между прокси и upstream, которую чистый TCP на 127.0.0.1 скрывает.
Провайдеры облачных mini иногда молча обновляют правила фаервола. После любого окна обслуживания проверьте, что health-порт по-прежнему открыт для ваших скриптов: doctor может оставаться зелёным, если идёт другим путём, нежели плановый curl.
Для аудита храните пакет артефактов на инцидент: вывод doctor, plist LaunchAgent, точная версия CLI. Ревизоры хотят видеть, что staging повторил ту же последовательность шагов, что и прод.
Планируйте лёгкие game day: искусственная нагрузка, симулированная отзыв токена, кратковременный обрыв сети. Так вы проверите дашборды и runbooks до того, как реальный клиент устроит первый стресс-тест.
Держите большинство проб на localhost и добавляйте внешние пинги только при реальной публикации шлюза — постоянные SaaS-пробы могут стоить дороже аренды самого mini.
Учитывайте часовые пояса внешних синтетик: сдвиг на секунды может исказить p95 и дать ложные тревоги. Фиксируйте регион источника каждой пробы и помечайте окна обслуживания в том же календаре, что и патчи ядра у хостера.
Определите матрицу эскалации: кто может перезагружать LaunchAgents, кто перезаписывает бинарники, кто утверждает откат снапшота на арендованном mini. Без ролей два инженера параллельно запускают разные команды и затирают состояние друг друга.
Если staging, demo и prod изолированы на одном физическом хосте, подписывайте плитки дашборда конкретным профилем OPENCLAW_HOME. Зелёный «шлюз» бесполезен, если меряется не та инстанция.
Дополняйте автоматику редкими ручными проверками curl с реалистичными заголовками: часть TLS/HTTP2-аномалий всплывает только при настоящих user-agent, которые упрощённые скрипты не отправляют.
Наконец, синхронизируйте расписание ротации секретов с окнами низкой нагрузки: смена токена в пик может дать краткий всплеск ошибок, который мониторинг интерпретирует как аварию, хотя это ожидаемый эффект.
Храните рядом с мониторингом ссылку на внутренний статус провайдера mini: когда хостер признаёт деградацию сети, вы быстрее коррелируете внешние пробы с внешней причиной вместо расследования «битого» шлюза.
Если команда распределена по часовым поясам, фиксируйте в runbook, кто ночью может только перезапустить сервис, а кто имеет право менять plist или переустанавливать бинарник—разделение снижает риск несогласованных правок на одном арендованном хосте.
Ведите журнал изменений probe-скриптов с привязкой к релизам OpenClaw: когда обновление добавляет новый обязательный заголовок health-эндпоинта, старый curl без доработки даст ложные тревоги, хотя шлюз фактически исправен.
Сравнивайте медиану и хвосты распределения задержки: рост только p95 при стабильной медиане часто указывает на редкие блокировки GC или диска, а не на системную перегрузку. Такие сигналы помогают решить, нужен ли горизонтальный шаг или точечная настройка логирования.
Зафиксируйте целевое время восстановления после контролируемого рестарта—команды, знающие эту цифру, реже запускают повторные перезапуски из паники и быстрее отличают нормальный прогрев от зависшего процесса.
Наконец, периодически прогоняйте doctor сразу после планового OS-patch: иногда обновление macOS сбрасывает разрешения или пути, которые LaunchAgent всё ещё ссылает, хотя файлы переехали. Ранний проход экономит часы ночных разборок.
FAQ
Пробы должны идти от root или от пользователя шлюза?
Совместите с пользователем LaunchAgent. Root скрывает права; неверный UID промахнётся по keychain или сокетам.
Как часто бить шлюз пробами?
Минимум раз в минуту для доступности; чаще — только с backoff. Частоту привяжите к бюджету ошибок SLO.
Самый быстрый путь восстановить зависший шлюз?
Сначала doctor, затем перезапуск LaunchAgent, затем переустановка бинарника при дрейфе — фиксируйте порядок.
Mac mini на Apple Silicon — практичная база для OpenClaw-шлюзов с устойчивыми разрешениями и предсказуемым launchd. MacHTML сдаёт облачные bare-metal mini по SSH/VNC, чтобы подключать пробы, репетировать инциденты и закрывать окружения без нового CapEx.
Мониторинг OpenClaw на облачном Mac mini
Арендуйте Apple Silicon Mac mini с SSH/VNC для проб, сверки doctor с метриками и репетиции восстановления LaunchAgent.