Logging standards n8n: логи, метрики и алерты ¶
Обновлено: 2026-05-29
Короткий ответ ¶
Logging standards для n8n задают единый формат журналов: какой ID события писать, где хранить статус, какие ошибки фиксировать, как связывать execution с внешним объектом и какие поля нельзя логировать. Без стандарта команда видит только «workflow упал», но не может быстро ответить, какой клиент, заказ, тикет или payload затронут.
Почему executions недостаточно ¶
Встроенные executions полезны, но они не заменяют продуманный журнал. Execution показывает путь внутри n8n, а бизнесу и поддержке нужны другие ответы: был ли обработан заказ, создан ли лид, отправлено ли письмо, какой внешний ID у результата, можно ли безопасно повторить событие.
Logging standard нужен, когда workflow влияет на клиентов, деньги, CRM, поддержку, отчёты или AI-ответы.
1. Три уровня логирования ¶
Не смешивайте всё в один поток. У n8n-команды обычно есть три разных вида журналов.
| Уровень | Для кого | Что хранить |
|---|---|---|
| Technical log | разработчики/ops | execution ID, node, error code, duration |
| Business audit log | владелец процесса | event ID, order/ticket/lead ID, итоговый статус |
| Incident log | команда реакции | timeline, impact, containment, recovery |
Technical log помогает чинить. Business audit log помогает доказать результат. Incident log помогает улучшить процесс после сбоя.
2. Обязательные поля ¶
Каждый production workflow должен иметь минимальный набор полей, которые можно найти в логах без открытия всех nodes вручную.
| Поле | Пример | Зачем |
|---|---|---|
correlation_id |
lead_2026_05_29_123 |
связать все шаги обработки |
external_event_id |
ID webhook события | защититься от дублей |
workflow_name |
prod-crm-lead-create |
найти сценарий |
execution_id |
ID запуска n8n | перейти в execution |
source |
telegram, yookassa, site_form |
понять вход |
target |
bitrix24, sheets, email |
понять write-систему |
status |
received, validated, sent, failed |
увидеть этап |
error_code |
CRM_401, RATE_LIMIT_429 |
агрегировать ошибки |
Если внешнего event ID нет, создайте собственный correlation ID в начале workflow и используйте его во всех ветках.
3. Где писать журнал ¶
Не обязательно сразу подключать сложную observability-платформу. Начать можно с таблицы, Postgres-таблицы, внутреннего API или отдельного logging workflow.
| Вариант | Подходит для | Ограничение |
|---|---|---|
| Google Sheets | ранний этап, мало событий | лимиты, ручные правки, privacy |
| Postgres table | production audit log | нужен доступ и миграции |
| CRM/ticket comment | поддержка и клиентские кейсы | не технический лог |
| External logging | зрелая инфраструктура | требует настройки формата |
| Error workflow | failed executions | не заменяет business log |
Главное правило: журнал не должен ломать основной процесс. Если logging target недоступен, workflow не должен терять заказ или платеж, если только это не обязательный compliance-контроль.
4. Маскирование и запретные поля ¶
Лог должен помогать расследовать, а не становиться вторым хранилищем персональных данных.
Не логируйте без необходимости:
- access tokens и refresh tokens;
- API keys и passwords;
- полные номера карт;
- cookie и Authorization headers;
- полный текст частной переписки;
- вложения и документы;
- слишком длинный RAG context;
- prompt с приватными данными клиента.
Можно логировать безопаснее:
- последние 4 символа ID, если нужен поиск;
- hash email/phone для дедупликации;
- external object ID;
- статус и код ошибки;
- количество обработанных строк;
- ссылку на защищённую систему-источник.
5. Ошибки и retry ¶
Ошибки должны быть классифицированы. Текст Something went wrong не помогает ни человеку, ни алерту.
Пример классификации:
| Код | Значение | Действие |
|---|---|---|
INPUT_VALIDATION_FAILED |
payload неполный | не retry, отправить в manual review |
AUTH_401 |
credential истёк | alert owner, reauth |
PERMISSION_403 |
не хватает прав | проверить scopes/role |
NOT_FOUND_404 |
внешний объект не найден | проверить ID и порядок событий |
CONFLICT_409 |
объект уже существует | проверить идемпотентность |
RATE_LIMIT_429 |
лимит API | wait/backoff, batch size |
PROVIDER_5XX |
внешний сервис нестабилен | retry с ограничением |
Разделяйте ошибки, которые можно повторять, и ошибки, которые нужно отправлять на ручную проверку.
6. Логи для AI workflow ¶
AI-сценарии требуют особых полей. Недостаточно знать, что модель ответила успешно. Нужно понимать, какой контекст использовался и можно ли доверять ответу.
Логируйте:
- model name;
- prompt version;
- retrieval query;
- source document IDs;
- confidence/validation status, если есть;
- structured output validation result;
- human approval status;
- token/cost estimate, если контролируете бюджет.
Не храните полный prompt и private context без причины. Лучше хранить версию prompt и ID источников.
7. Пример записи business audit log ¶
{
"timestamp": "2026-05-29T10:15:00+02:00",
"workflow": "prod-crm-lead-create",
"execution_id": "123456",
"correlation_id": "site_form_8f2c",
"source": "site_form",
"target": "crm",
"external_event_id": "evt_9821",
"result_object_id": "lead_551",
"status": "created",
"retry_count": 0,
"error_code": null
}
Такой лог позволяет быстро ответить, что произошло, не открывая каждый node.
FAQ ¶
Достаточно ли встроенных executions?
Для маленьких workflow — иногда да. Для production лучше иметь отдельный business audit log с безопасными полями и внешними ID.
Нужно ли логировать весь payload?
Обычно нет. Логируйте ID, статус, ошибки и ссылки на источник. Полный payload храните только там, где это оправдано и разрешено.
Что делать, если logging node упал?
Решите заранее. Для некритичных логов основной процесс должен продолжиться. Для compliance-событий может быть нужен fail-closed режим.
Как связать несколько workflow между собой?
Передавайте один correlation_id через все вызовы, sub-workflows, webhooks и внешние записи.
Как применять playbook в команде ¶
Playbook «/playbooks/logging-standards/» должен быть понятен человеку, который не писал workflow. Поэтому в нём нужны входной сигнал, частота запуска, критерий тревоги, ответственный и ожидаемое действие после срабатывания.
Используйте этот материал как операционную инструкцию: что проверить, где посмотреть логи, как понять масштаб проблемы и когда эскалировать.
| Слой | Что зафиксировать | Зачем |
|---|---|---|
| Вход | входной item по теме «/playbooks/logging-standards/»: источник события, внешний ID, время получения и нормализованные поля | позволяет повторить проблему без доступа к production-секретам |
| Контроль | successful_executions, skipped_items, retry_count, error_branch_usage, manual_override_count | показывает деградацию раньше, чем пользователи начинают писать в поддержку |
| Безопасность | принять happy path за production-готовность и не проверить повторы, пустые входы, откат и наблюдаемость | снижает риск скрытых дублей, утечки данных и неконтролируемых write-действий |
| Готовность | есть тест на happy path, пустой вход, повтор и сбой внешнего сервиса для «/playbooks/logging-standards/» | делает статью пригодной для runbook, а не только для чтения |
Пример безопасного входного контракта ¶
{
"source": "manual|webhook|schedule|api",
"external_id": "stable-id-from-source",
"received_at": "2026-05-29T10:00:00Z",
"payload_version": "v1",
"dry_run": true,
"audit": {"workflow_id": "...", "execution_id": "..."}
}
Критерий готовности ¶
- есть понятный вход, выход и владелец процесса
- проверены пустой input, повтор события и ошибка внешнего сервиса
- результат логируется без секретов и персональных данных
- страница связана с соседними рецептами, ошибками или playbook по теме