2026-04-27 OpenClaw, HTTP 429/503 upstream LLM, бюджеты повторов и форма запросов по организации на арендованном headless облачном Mac (HK / JP / KR / SG / US)
Когда OpenClaw круглосуточно работает на арендованном Mac mini M4, который виден только по SSH или изредка через VNC, самые громкие симптомы «лимита скорости» похожи на сломанную модель: ответы дёргаются, вызовы инструментов рвутся посреди трассы, спрашивают про ротацию API-ключа. На самом деле HTTP 429 и HTTP 503 на исходящем пути к провайдеру LLM — другой класс инцидентов, чем 429, который вы сами отдаёте через nginx на входящем вебхуке, и не то же самое, что мёртвые маршруты в работе по egress / DNS / TLS. Этот материал 2026-04-27 для SRE: воспроизводимое разделение нашего перерасхода квот и их деградации, численные дефолты backoff, орг-уровневый бюджет повторов без молчаливого превышения, поля логов для структурированного JSON. Тот же узел собирает Xcode — см. несколько Xcode и DEVELOPER_DIR.
Две поверхности «429»: ваш nginx и их API-шлюз
В шумные дни—крупные релизы моделей, региональные сбои, демо-скрипт маркетинга с 40 параллельными skills—легко смешать: (A) намеренно дросселированный входящий вебхук, (B) upstream 429/503, (C) 401/403 из-за неверного или просроченного креденшла. Практический triage: исходный IP (loopback процесса 127.0.0.1:18789 против публичного края), user-agent или тег библиотеки от провайдера, величина retry-after в секундах или минутах. Операторы в Гонконге и Токио часто видят корпоративный прокси с 429 на бурст при здоровом вендоре — или наоборот. Помечайте строки edge=inbound|outbound в схеме логов.
401/403 против 429 против 503/529
| Статус | Практический смысл | Позиция по умолчанию |
|---|---|---|
401 / 403 |
Креденшл, allow-list или несовпадение org | Остановить авто-retry после 0–1 зонда; проверить ключи и секреты launchd. |
429 |
Дроссель провайдера или исчерпанный токен/запрос bucket | Backoff с джиттером; уменьшить in-flight до обвинений «багов OpenClaw». |
503 / 529 |
Перегруженный пул или регион | Короткая первая задержка, меньше максимум попыток, при политике — запасная модель (allowlist triage). |
Наивный клиент, вечно повторяющий 401, может заблокировать аккаунт. Цикл без backoff на 503 превращает мелкий сбой вендора в само-DDoS с Mac на NIC 10 Гбит/с.
Параллелизм, токен-окна, бюджеты по org
Большинство тикетов «нас зарейтлимили» — самонаведённый параллелизм: cron из launchd накладывается на всплески Discord/Slack. Сначала форма трафика:
- Ограничить одновременные tool-turns, напр. 4 исходящих HTTP in-flight на процесс шлюза.
- Суточные потолки токенов по организации в бизнес-терминах, не только глобальный
MAX_TOKENS. - Сдвигать расписание, чтобы границы UTC не складывали US+EU с SG/JP.
Джиттер, экспоненциальный потолок, бюджет времени
- Первый retry
429через 0,4–1,2 с джиттера. - Потолок между попытками 32–64 с; дольше — эскалация людей.
- Жёсткий стоп задачи после 180 с суммарного ожидания повторов для пользовательских ходов чата.
sleep $((2 + RANDOM % 3))
curl -sS -D - "https://api.example/v1/health" -o /dev/null | head -n1
Runbook: шесть шагов при жёлтых графиках
- Заморозить релизы
openclawкроме отката; только config с 2-мин peer review. - Классифицировать край по inbound/outbound; при outbound 429 — снимок concurrency и лимитов из живого конфига.
- Уменьшить масштаб: параллельные runner инструментов на 50 %; если p95 падает — голод очереди, не нехватка CPU.
- Сравнить с egress/DNS: одновременный рост TLS может маскироваться под 503.
openclaw doctorв окружении демона — doctor/allowlist.- Постмортем: пик in-flight, % 429, медиана токенов на вызов.
Логи для одного запроса в Grafana/Loki
Минимум ts, provider, route, attempt, status, request_id, ms; по возможности org, surface. Расширяет пробы готовности. Связывайте с npm-апгрейдами.
Добавьте при возможности счётчик оставшегося бюджета повторов на организацию или хотя бы флаг «последняя попытка» — в трассах сразу видно, упёрлись ли вы во внутренний предел или во внешний 429. Сохраняйте request_id от провайдера без изменений: саппорт без него часто отвечает формальными шаблонами. На инцидент выгружайте окно логов до первого всплеска, а не только после — иначе теряется связь с недавним деплоем или правкой конфигурации.
В метриках разделяйте клиентские 4xx (где повтор бессмысленен или запрещён политикой) и 5xx (где короткий backoff уместен). Смешанный счётчик заставляет команду ошибочно «винить вендора», когда на самом деле цикл бесконечно долбит 401. На безголовом Mac нет «второго мнения» из браузера с открытой status-страницей провайдера — дисциплина логов компенсирует это.
Раз в неделю после согласования с FinOps можно выполнять крошечный canary-запрос с минимальным расходом токенов, чтобы поймать регрессии маршрута или DNS до пользовательских жалоб. Держите QPS намеренно низким: цель — сигнал, а не нагрузочный тест.
FAQ
| Вопрос | Краткий ответ |
|---|---|
| По умолчанию «купить больше квоты API»? | Иногда при росте, но сначала форма трафика — параллельный skill сжигает новую квоту за часы. |
| Второй физический Mac в регионе? | При низком CPU и насыщенном HTTP часто дешевле — региональные планы. |
Связанные runbook
Egress DNS/TLS, входящие вебхуки, субагенты и каналы, launchd и API-ключи.
Почему Mac mini M4 для bursty трафика моделей
OpenClaw смешивает всплески CPU (оркестрация инструментов, локальные эмбеддинги) и круглосуточный NIC (HTTP/2, TLS, heartbeat). Физический Mac mini M4 даёт честные таймеры для backoff и достаточно unified memory для больших JSON-буферов без постоянных OOM на 8-гигабайтных Linux-срезах. Если на том же хосте крутятся тяжёлые xcodebuild или индексация, смещайте ночные LLM-батчи из пиков интерактивного чата — справедливость важнее сырого CPU.
Совместное размещение с QA и фермой Xcode упрощает одного вендора для SSH, диска и SLA поддержки в Гонконге, Токио, Сеуле, Сингапуре и США. Масштабируйте до второго узла только если после снижения параллелизма p95 не улучшается — тогда не хватает канала или квоты, а не дисциплины клиента.
Шлюз на железе, переживающем повторы
1–2 ТБ · Apple Silicon · SSH и опционально VNC