1. Болевые точки: 429 и таймауты — разные режимы отказа
(1) 429 — семантика квот: RPM/TPM, организационная параллельность или edge rate limits. Слепое увеличение таймаутов обычно усиливает проблему, бьётся в тот же bucket. (2) Таймауты — семантика пути: DNS, TLS, idle reverse-proxy или холодный старт модели; разделяйте таймеры подключения и чтения. (3) Тишина канала: иногда модель не отвечает; иногда отвечает, но канал теряет ACK или неверно ретраит — логи должны назначить вину модели, Gateway или каналу.
В эксплуатации видимые и невидимые сбои часто склеивают в один ярлык. Пара «HTTP-код и прошедшее время» делает повторяемость заметнее. Флаг стриминга обязателен в тикете: он сильно двигает распределение таймаутов.
2. Матрица мульти-провайдер-маршрутизации
Матрица не выбирает «победившего» вендора; она про изоляцию сбоев. Основной маршрут оптимизирует цену и качество; резерв — выживание. Зафиксируйте владельцев ротации ключей, кто утверждает пороги breaker и какие каналы никогда не делят bucket квот с пакетной автоматизацией.
| Стратегия | Когда помогает | Риск |
|---|---|---|
| Основной/резервный Base URL | Та же OpenAI-совместимая поверхность, несколько регионов или поставщиков | Стоимость и фрагментация логов; храните request id для сверки |
| Понижение алиаса модели | В пиках доступность важнее качества | Дрейф стиля; при необходимости раскрыть в системном промпте |
| Окно circuit breaker | Остановить трэшинг после серий 429/5xx | Ошибочная настройка мгновенно сжигает резервный бюджет |
| Маршрутизация по каналам | Публичная поддержка и внутренние инструменты на разных путях | Операционная сложность; таблица маршрутизации — единственный источник истины |
3. Пятишаговый runbook дежурства
- Зафиксировать доказательства: окно UTC, канал, имя модели, флаг стриминга; коды и выдержки из логов.
- Слоистые пробы:
openclaw status, здоровье шлюза, затем минимальный curl к Base URL (не вставлять прод-секреты в чат). - Разделить 429 и таймаут: 429 — квота/backoff; таймаут — сеть/прокси/read; при смеси сначала снизить параллелизм.
- Настроить failover: потолки retry, экспоненциальный backoff с джиттером, интервал восстановления breaker, дневной лимит резерва.
- Строка постмортема: класс причины (квота, DNS, прокси, ротация ключей, окружение launchd) и ссылки на метки времени в логах.
4. Пороги, которые можно цитировать
Замените на SLA вендоров и свою телеметрию:
- Если та же модель пишет пять и более подряд 429 за 10 минут и резерв есть — переключить маршрут и позвать человека по политике квот; не крутить бесконечный retry на основном.
- Если медианы read-timeout превышают 60 секунд с ошибками TLS/DNS — смотреть idle прокси и egress раньше длины контекста.
- На удалённом Mac launchd-Gateway расхождение shell export и plist-
EnvironmentVariables— отказ первого класса; после каждого изменения — дымовое сообщение.
5. Параметры retry и backoff
| Сценарий | Делать | Избегать |
|---|---|---|
| 429 с Retry-After | Уважать заголовок; без него старт с 2с, потолок около 60с | Фиксированные циклы 200 мс, вызывающие жёсткие баны |
| Редкие 5xx | Ограниченные ретраи (≤3) с джиттером | Общая бесконечная петля с обработкой 429 |
| Таймаут подключения | Сначала DNS/TLS/прокси; connect и read независимо | Один таймаут 300 с, маскирующий провал handshake |
6. Слоистое чтение openclaw-логов
Четыре слоя: (A) старт и конфигурация — загрузились ли ожидаемые Base URL и префиксы ключей; (B) HTTP egress — коды и upstream trace id; (C) инструменты/MCP — не доминируют ли медленные инструменты; (D) запись в канал — сбои ACK или исчерпание ретраев. Большинство «случайной тишины» схлопывается в один слой после принудительного разделения.
| Сигнал | Подозреваем | Действие |
|---|---|---|
| Всплеск 429 на одно поле модели | Уровень квоты или параллелизм | Снизить параллелизм, перейти на резерв или меньшую модель |
| Таймаут TLS handshake | Egress или middlebox | Сменить путь, проверить время, убрать плохие прокси |
| HTTP 200 от модели, пустой канал | Форматирование канала или путь ACK | Сравнить отладочные логи канала и emit-логи Gateway |
7. Чеклист удалённого Mac Gateway (специфика launchd)
launchd наследует более узкое окружение, чем login shell. Любой апгрейд, затрагивающий API-ключи или OPENCLAW_*, в два шага: обновить plist, перезагрузить job, проверить неинтерактивной пробой. Удалённые рабочие столы отличаются от colo: энергосбережение Wi-Fi, обрывы VPN и сон дисплея могут рвать долгоживущие демоны, если роль хоста Gateway не закреплена явно.
| Проверка | Зачем важно |
|---|---|
| EnvironmentVariables в plist | После апгрейдов должно совпадать с интерактивными export |
| UserName / WorkingDirectory | Неверный пользователь или workspace даёт тихие отказы в правах |
| Ротация логов и диск | Полный диск выглядит как загадочные зависания |
| Связанные runbook апгрейда | Паровать со статьями про апгрейд и «тихий» Gateway для смоков |
8. FAQ
В: Качество резервной модели падает — что видят пользователи? Явно указать деградированный режим в системном промпте, вернуться после восстановления квот, логировать переключения.
В: Домашняя сеть, зарубежные ключи всегда в таймауте? Это класс линка, не логика OpenClaw; колокировать Gateway или сменить регион вендора.
В: Внезапный 401 после апгрейда? Следовать статье про апгрейд: префиксы ключей и миграция state-dir до параллельного редактирования конфигов.
9. Кейс: послеобеденные заторы из-за RPM, а не «канала»
Команда держала Gateway на удалённом Mac. Пользователи винили канал сообщений, но логи показывали плотные 429 между 14:00–16:00 с растущим Retry-After. Корень: нет разделения автоматизации и человеческого трафика на одном RPM-ярусе. Исправление: heartbeat на маленькой модели и отдельном ключе; основной чат на главном ключе; breaker 90 с на резерв при всплесках. Простои сократились с часов до минут.
Второй паттерн: принять латентность инструмента за латентность модели. Один медленный MCP съедает весь read-timeout и даёт пустые сообщения. Раздельные таймауты инструмента и модели стабилизируют UX.
Сочетайте с гайдом по GitHub webhook: HTTP-семантика (401/403/429) — та же цепочка доказательств, что и при ошибках подписи.
Runbook сильнее героизма: в 3 часа ночи все выполняют одинаковые шаги. Пороги в документах ускоряют решения по ёмкости, включая выделенный Apple Silicon вместо общего ноутбука.
Если на том же Mac крутятся локальные LLM, конкуренция за память и Wi-Fi мешает воспроизводить таймауты; выделенный удалённый узел сужает факторы.
Тестируйте failover-скрипты: синтезируйте 429 и таймаут в staging и убедитесь, что один цикл не опустошает дневной резерв.
Параллелизм мульти-агентов скрывает потолок RPM: каждый вызов может быть 200, а агрегат даёт 429 — «в одних комнатах ответ, в других нет». Лечится глобальными бюджетами параллелизма в конфиге и дашбордах, а не одним успехом одиночных запросов.
Держите страницу со всеми автоматизациями, бьющими в модельный стек, их каденцией и ключом — иначе каждая пятница — охота на призраков.
Команды перезапускаются по привычке, когда 429 и таймауты читаются одним комом; слоистый порядок сначала фиксирует HTTP модели, затем процесс Gateway, затем запись в канал, затем дрейф launchd — это дисциплинированно и повторяемо.
В мульти-провайдере различаются гранулярность биллинга и rate limits; одинаковые имена моделей могут давать разный эффективный RPM. Вносите реальные ID моделей, владельцев ключей, допуск к всплескам и дневные потолки в таблицу маршрутизации и требуйте ревью при изменениях, чтобы не блуждать ночью.
Удалённые Mac-Gateway не делят предположения питания и Wi-Fi с девелоперским ноутбуком; для 24/7 в SLO включайте энергополитику и стабильность сети, калибруйте таймауты как для стационарного сервера, а не роуминг-клиента.
Когда инструменты и MCP делят read-timeout с моделью, причина смазывается; короткие потолки на инструмент и чуть более длинное чтение для модели разделяют логи и разбор инцидента.
Структурированные события переключения failover ускоряют постмортемы и аудит: кто одобрил, какой порог превышен, когда вернули основной маршрут — всё в одной строке.
Нагрузочные тесты в staging с инжектом 429 и таймаутов проверяют, что политики retry не сжигают резервный лимит за ночь; прод-политикам нужны трассы, а не только цифры в вики.
Параллельные субагенты создают агрегированные всплески RPM, невидимые по одиночному запросу; дашборды по ключу и глубине глобальной очереди, а не только по каналу, показывают потолок.
Апгрейды OpenClaw и device auth v2 могут вызвать шторм 401 независимо от модельного HTTP; положите runbook апгрейда в ту же папку инцидента, что и этот HTTP-плейбук, для ночных смен.
10. Минимум наблюдаемости
Отслеживайте как минимум: долю 429 по моделям, сквозную p95-латентность, число переключений failover, долю сбоев ACK канала, число рестартов Gateway. Если ухудшаются все пять вместе — квота или региональный upstream; если только ACK — слой канала.
| Симптом | Смотреть сначала | Смягчить |
|---|---|---|
| Один канал медленный | Лимиты API канала и задержка webhook | Троттлинг, очередь или смена режима соединения |
| Все каналы медленные | Egress модели или CPU Gateway | Failover, масштаб узла, rate limit |
| Всплеск после апгрейда | Дрейф окружения и аутентификации | doctor, чеклист апгрейда, откат |
Без APM хватит плановых health-pull и структурированных grep-подсчётов, если ряды выровнены по окнам инцидентов. Вместе с ужесточением поверхности не публикуйте debug-эндпоинты — иначе цепочка доказательств станет вектором атаки.
11. Закрытие: failover — дисциплина, не удача
(1) Пределы: один ключ, один регион, без backoff рано или поздно упираются в 429 и хвостовую задержку; спящий ноутбук под Gateway усиливает таймауты.
(2) Зачем удалённый Apple Silicon: стабильное питание, яснее поверхности окружения, лучше для 24/7 Gateway и очередей retry.
(3) MACGPU: если нужен низкий трение пробный удалённый Mac, чтобы отвязать десктопы от автоматизации и созвонов, MACGPU даёт арендуемые узлы и публичную помощь — CTA ниже ведёт к тарифам без логина.
(4) Финальный гейт: не выкатывайте политику failover, пока staging не докажет, что один режим отказа не опустошает резервный бюджет за один проход.