429 quota_exceeded
Перевод в процессе / Translation in progress. See русская версия.
Ingestion возвращает HTTP 429 с телом quota_exceeded, как только объём логов или метрик за окно исчерпан. В этом состоянии агент не выбрасывает события: он буферизует их в локальный SQLite spool и ждёт окна разблокировки, честно уважая подсказки backoff от сервера. Ниже — как убедиться, что вы действительно упёрлись в квоту, и как вывести агент из throttle.
Симптом
- Метрика
flaree_ingest_quota_denied_totalрастёт на backend, её хорошо видно в dashboard. - SQLite spool на хосте агента начинает расти (размер файла
flaree-spool.dbувеличивается с каждым tick-ом отправки). - В логах агента
journalctl -u flaree-agentпоявляются записи вида429 quota_exceededс полямиreset_atи заголовкомRetry-After. - В dashboard
app.flaree.ruсоответствующий компонент/агент помечен какthrottled, поток данных визуально «замер».
Диагностика
Сначала подтвердите, что backend действительно возвращает 429, и соберите оба источника backoff — тело ответа (reset_at) и заголовок (Retry-After):
journalctl -u flaree-agent | grep -E 'quota_exceeded|Retry-After' | tail -n 10
curl -sS -H "X-Flaree-Token: ${FLAREE_TOKEN}" -X POST https://api.flaree.ru/ingest/logs -d '[]' -o - -w '\nHTTP %{http_code}, Retry-After: %header{retry-after}\n'
Что ожидать в ответе ingestion-шлюза:
- В теле — JSON с полями
error: "quota_exceeded"иreset_at(UTC-timestamp окончания окна квоты). - В HTTP-заголовках —
Retry-Afterв секундах, указывающий авторитетный (authoritative) backoff-интервал.
Явное правило приоритета: при одновременном наличии и reset_at, и Retry-After агент ДОЛЖЕН уважать именно Retry-After как authoritative backoff. reset_at в этом случае остаётся справочным полем для UI и логов, но именно Retry-After определяет, когда agent возобновит отправку. Это поведение зафиксировано в AGENTS.md и в Flaree.Ingestion.
Исправление
- Проверьте текущую квоту плана в dashboard (
app.flaree.ru) — раздел Billing / Usage, колонки logs и metrics за активное окно. - Снизьте объём входящего потока: включите sampling и redact на источниках с самым большим usage, отключите заведомо шумные источники логов.
- Если нагрузка легитимна — перейдите на тариф выше или попросите у support временное расширение квоты на окно.
- Пока квота не восстановится, ничего делать не нужно: агент автоматически буферизует события в SQLite spool и возобновит отправку после истечения
Retry-After(илиreset_at, еслиRetry-Afterотсутствует).
Ручная проверка, что агент вышел из throttle после шагов выше:
systemctl restart flaree-agent
curl -sS -H "X-Flaree-Token: ${FLAREE_TOKEN}" https://api.flaree.ru/ingest/heartbeat -o /dev/null -w '%{http_code}\n'
Код 200 на heartbeat и отсутствие новых 429 quota_exceeded в journalctl подтверждают, что окно разблокировано.