Вчера провел незабываемый день за дебагов падений в проде.
Моё nestjs приложение крашилось, поднималось в облаке и падало вновь.
А виной всему логгирование
AxiosError. У меня в одном месте в приложении она передавалась в прямом виде (а это страшная ошибка, там внутри примерно ссылки на все кишки приложения).Приложение пыталось рекурсивно обойти всю ошибку, чтобы залогировать, упиралось в CPU, память, диск, из последних конвульсий выплевывало в stdout последнего монстра с разными
Circular ~.@fields.err.request._options.nativeProtocols.http:.globalAgent.sockets и облако переподнимало под.И тут на "помощь" приходил балансер.
У меня были ретраи с балансера при падении коннекта, и к обычной нагрузке от пользователей, я сверху добивал себя дополнительные ретраями. Только поднятый под падал вновь. А еще между балансеров и приложением был keepAlive, поэтому в axios Error помимо прочего вылазили и все существующие коннекты и их бедняга логгер тоже пытался обойти.
Не логируйте AxiosError и прочие сложные объекты, делайте плоские структуры и записывайте только их.
Всем стабильности!