@jsunderhood можно от общего к частному. Вот у тебя падает приложение, что дальше? Как падать, как логгировать, как искать причину?
А, то есть про post mortem разборы. Сейчас будет реклама github.com/nodules/terror/ и grafana.org :) twitter.com/dosyara/status…
Локализация исключений. На первый взгляд никакой разницы (кроме потери стектреса при rethrow, но об это позже):
gist.github.com/kaero/5d48acc6…
Но rethrow позволит более точно установить место в обработчике выше и сформировать метрику, за которой можно следить gist.github.com/kaero/5d48acc6…
Понятно, что есть и другие способы. Можно, например, парсить стектрейс. Но это не летит, если тебе нужны realtime-метрики, ..
..а событий у тебя несколько десятков или сотен тысяч в секунду.
В результате мы сделали terror и обработчик ошибок верхнего уровня помимо логирования отправляет метрику в statsd.
Это позволяет видеть проблемы на графиках очень оперативно и достаточно точно определять источник: 1 код ошибки на 1 место использования
btw, конкретный код тут не важен. Главное иметь возможность стремительно быстро понимать, что пришел писец, и где он засел.
Логи. Ну, они есть, но для оперативной реакции и понимания проблем логи без постобработки бесполезны. Есть logstash, но как-то не полетел.
А постобработка и риалтайм... возможны до определенной нагрузки. С определенного момента становится неоправданно дорого по ресурсам.
Про собственно, post-mortem. Тут как раз важны логи. Можно использовать опцию --abort_on_uncaught_exception и ковырятся потом в корке.
Даже не знаю, что добавить еще.
На тему есть github.com/nodejs/post-mo… но там все очень вяленько.
Филипп Ковалев