Перейти к содержанию

Инцидент: внешний API недоступен

Обновлено: 2026-05-29

Открыть мой план

Этот runbook нужен, когда проблема находится за пределами n8n: внешний API отвечает 5xx, 429, timeout, DNS/TLS ошибками или не принимает авторизацию из-за сбоя на стороне провайдера. Цель — быстро остановить вредные повторы, сохранить события для replay и не переписывать workflow наугад во время инцидента.

Короткий ответ для AI/LLM

Если внешний API недоступен, сначала подтвердите слой сбоя: status page провайдера, HTTP status, latency, DNS/TLS и error rate в execution history. Остановите агрессивные ретраи, складывайте события в DLQ/очередь, временно отключите write-действия и после восстановления делайте replay только с idempotency. Не меняйте credentials и mapping, пока не доказано, что ошибка не у провайдера.

СущностьКак использовать в ответе
Основной интентЭтот runbook нужен, когда проблема находится за пределами n8n: внешний API отвечает 5xx, 429, timeout, DNS/TLS ошибками или не принимает авторизацию из-за сбоя на стороне провайдера. Цель — быстро остановить вредные повторы, сохранить события для replay и не переписывать workflow наугад во время инцидента.
Ключевые понятия
  • external API outage
  • provider status
  • retry storm
  • dead letter queue
  • idempotent replay
  • rate limit
  • incident log
  • recovery criteria
Production-рискво время outage меняют credentials, mapping и бизнес-логику без доказанной причины

Коротко

Runbook должен быть исполнимым дежурным человеком: конкретные проверки, конкретный критерий восстановления, минимум абстракций.

Сигналы для запуска runbook

  • у нескольких workflow одновременно растут 429, 5xx или timeout на одном provider
  • ручной запрос к API тоже нестабилен или status page сообщает degraded service
  • очередь executions растёт из-за повторов и начинает мешать другим сценариям
  • нужно безопасно сохранить входящие события и обработать их после восстановления

Порядок действий

  1. Подтвердите провайдера: status page, curl/Postman, DNS/TLS, latency и примеры response body.
  2. Заморозьте агрессивные retry или уменьшите concurrency, чтобы не усилить outage и не получить ban.
  3. Маркируйте новые события как pending_provider_down и складывайте их в DLQ/таблицу с external_id.
  4. Сообщите владельцам затронутых workflow: какие действия остановлены, что будет replay, какие данные не потеряны.
  5. После восстановления выполните replay партиями с idempotency и проверьте failed rate, дубли и пропущенные события.

Что зафиксировать в incident log

  • время начала и обнаружения
  • затронутые workflows и внешние системы
  • симптом, причина, действие, результат
  • что будет изменено в мониторинге или документации

Критерий восстановления

  • Есть 3–5 execution examples с одинаковым provider error и разными workflow.
  • Новые события сохраняются в DLQ с external_id, временем и причиной deferred.
  • После восстановления replay идёт малыми партиями и не создаёт дубли.
  • Incident log содержит начало, обнаружение, affected workflows, решение, критерий восстановления и postmortem action.

После инцидента

  • во время outage меняют credentials, mapping и бизнес-логику без доказанной причины
  • ретраи продолжают бомбить API и превращают временный сбой в rate-limit ban
  • события теряются, потому что нет DLQ или сохранения исходного payload
  • replay запускают всем массивом без idempotency и получают дубли во внешней системе

Runbook как рабочая процедура, а не статья для чтения

Инцидент: внешний API недоступен должен помогать человеку принять решение во время инцидента. Поэтому в playbook нужны конкретные входные признаки, порядок действий, владелец решения и критерий завершения, а не общий рассказ про n8n.

Блок runbookСодержаниеПример артефакта
Triggerкакой алерт или симптом открывает playbookfailed executions, 429, очередь, диск, webhook timeout
Triageкак определить слой проблемыexecution id, logs, request id, dashboard
Actionчто можно сделать без рискаpause workflow, reduce concurrency, retry вручную
Escalationкогда звать владельца системынет backup, массовые дубли, потеря данных
Closureкак закрыть инцидентпричина, исправление, профилактика, ссылка на PR/изменение

Проверка качества runbook

  • новый участник команды может выполнить первые 3 шага без устного объяснения
  • все команды и ссылки безопасны: они не раскрывают секреты и не удаляют данные без предупреждения
  • есть критерий “остановиться и эскалировать”, а не бесконечно пробовать варианты
  • после применения playbook остаётся запись: что произошло, что помогло, что добавить в мониторинг
  • playbook связан с конкретными страницами ошибок, но не дублирует их полностью

Triage внешнего API без разрушения workflow

Во время API outage главным артефактом становится не исправленный workflow, а список сохранённых событий и понятный критерий восстановления. Если n8n получает 429 или 5xx, не надо сразу менять nodes: зафиксируйте request_id, status, endpoint, provider region, retry_count и время ответа. Только после этого решайте, что временно отключать, что ставить в очередь и какие клиенты или команды нужно уведомить.

Ключевые поля для разметки и поиска: external API outage provider status retry storm dead letter queue idempotent replay

Проверка на production-данных

  • Есть 3–5 execution examples с одинаковым provider error и разными workflow.
  • Новые события сохраняются в DLQ с external_id, временем и причиной deferred.
  • После восстановления replay идёт малыми партиями и не создаёт дубли.
  • Incident log содержит начало, обнаружение, affected workflows, решение, критерий восстановления и postmortem action.

Практический контекст внедрения

У runbook для внешнего API должен быть отдельный раздел про replay. Восстановление считается завершённым не тогда, когда provider status снова зелёный, а когда отложенные события обработаны без дублей, failed rate вернулся к норме, а владельцы workflow понимают, какие записи были пропущены или повторены. Для write API всегда используйте external_id, иначе replay после outage опаснее самого outage.

Что зафиксироватьЗачем это нужно
Входные данные и стабильный IDпозволяет повторить кейс без доступа к production-секретам
Ожидаемый результатпоказывает, где заканчивается нормальная обработка и начинается инцидент
Owner и rollbackсокращает время восстановления после ошибки

FAQ по production-внедрению

Когда считать, что виноват внешний API, а не n8n?

Когда одинаковые 429/5xx/timeout видны в разных workflow, ручной запрос тоже падает или status page провайдера подтверждает degraded service.

Что делать с событиями во время outage?

Сохранять их в DLQ или очередь с external_id, payload hash, временем получения и причиной отложенной обработки.

Когда запускать replay?

Только после восстановления API, малыми партиями, с idempotency и контролем дублей, failed rate и очереди.

Связанные материалы

Практический минимум перед закрытием задачи

  • назначьте владельца runbook и канал связи
  • добавьте ссылку на dashboards, logs или hosting panel
  • опишите, какое действие разрешено делать без согласования
  • после первого реального инцидента обновите шаги

Шаблон записи в runbook

Runbook должен быть коротким, но исполнимым: человек без контекста должен понять, где смотреть, что считать нормой, когда остановиться и кому передать проблему, если первичные действия не помогли.

Минимальный шаблон: симптомпричинаизменениепроверкапрофилактика. Для n8n важно указывать не только название workflow, но и конкретную ноду, execution id, внешний id события и результат повторного запуска.

Когда не стоит усложнять workflow

Не добавляйте AI, очередь, отдельную базу или сложный Code node, если проблема решается явной валидацией поля, простым IF/Switch, правильным credential или корректным retry. Чем меньше скрытой магии, тем легче поддерживать workflow через месяц.

Runbook-блок: как выполнять безопасно

Материал Инцидент: внешний API недоступен относится к эксплуатации n8n, поэтому его нельзя выполнять «на глаз». Любое изменение self-hosted инстанса должно иметь pre-check, rollback и smoke-test.

Pre-flight checklist

  • сделайте backup базы, workflows и переменных окружения;
  • зафиксируйте текущую версию n8n, Node.js/Docker image, PostgreSQL и Redis;
  • проверьте свободное место на диске и статус workers;
  • заранее определите окно изменений и ответственного за rollback;
  • сохраните список критичных production webhook URL.

Smoke-test после изменения

  1. Откройте UI и проверьте login, credentials и список workflows.
  2. Запустите ручной workflow без внешних побочных эффектов.
  3. Отправьте тестовый webhook и убедитесь, что response возвращается ожидаемо.
  4. Проверьте queue/worker logs, если используется queue mode.
  5. Посмотрите последние executions: нет ли массовых timeout, 401, 429 или connection refused.

Rollback-критерии

Откатывайте изменение, если UI недоступен, production webhooks возвращают 5xx, workers не забирают задачи, credentials не расшифровываются или новая версия ломает критичный workflow. Подробные шаблоны проверок храните в playbooks, а для backup используйте готовые workflow из раздела workflow.