Выбор ответа Senior Ошибки и логирование обновлено

Почему логирование может тормозить сервис

Вопрос

Сервис пишет много логов, и под нагрузкой растёт задержка event loop. Логи уходят через форматтер в человекочитаемый вид и отправку по сети прямо в процессе. Что рекомендуют для pino?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: JSON в stdout, а форматирование и отправка в worker thread или агенте. Форматирование (pino-pretty) и отправка по сети в основном потоке тратят CPU и время event loop на каждую строку. pino рассчитан на то, чтобы основной поток только сериализовал JSON и писал в поток, а тяжёлое делали транспорты в отдельном…

Варианты ответа

  1. Перейти на console.log, он асинхронный и не блокирует event loop
  2. Логировать только ошибки, остальные уровни выключить навсегда
  3. JSON в stdout, а форматирование и отправка в worker thread или агентеправильный ответ
  4. Включить синхронную запись в файл, так надёжнее и быстрее

Разбор

Форматирование (pino-pretty) и отправка по сети в основном потоке тратят CPU и время event loop на каждую строку. pino рассчитан на то, чтобы основной поток только сериализовал JSON и писал в поток, а тяжёлое делали транспорты в отдельном worker thread или внешний агент, читающий stdout контейнера.

console.log в stdout при записи в файл или pipe в Node может быть синхронным и медленнее pino. Выключать всё кроме ошибок теряет диагностику, правильнее управлять уровнем динамически и семплировать. Синхронная запись в файл блокирует event loop на каждой строке.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.