Почему логирование может тормозить сервис
Вопрос
Сервис пишет много логов, и под нагрузкой растёт задержка event loop. Логи уходят через форматтер в человекочитаемый вид и отправку по сети прямо в процессе. Что рекомендуют для pino?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Перейти на
console.log, он асинхронный и не блокирует event loop - Логировать только ошибки, остальные уровни выключить навсегда
- JSON в stdout, а форматирование и отправка в worker thread или агентеправильный ответ
- Включить синхронную запись в файл, так надёжнее и быстрее
Разбор
Форматирование (pino-pretty) и отправка по сети в основном потоке тратят CPU и время event loop на каждую строку. pino рассчитан на то, чтобы основной поток только сериализовал JSON и писал в поток, а тяжёлое делали транспорты в отдельном worker thread или внешний агент, читающий stdout контейнера.
console.log в stdout при записи в файл или pipe в Node может быть синхронным и медленнее pino. Выключать всё кроме ошибок теряет диагностику, правильнее управлять уровнем динамически и семплировать. Синхронная запись в файл блокирует event loop на каждой строке.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что можно делать в process.on("exit")
Следующий вопрос
Сквозная трассировка запроса между сервисами