Найти в Дзене

Почему мой код "слепой", а я этого не замечал? (Или как я случайно открыл для себя Observability)

Вчера вечером, сидя за очередным багом в продакшне, который никак не хотел воспроизводиться в деве, я вдруг поймал себя на мысли: а ведь я работаю с "слепой" системой. Точнее, я вижу только то, что мне позволяют логи. А что если где-то там в недрах приложения происходит что-то, о чем я даже не догадываюсь? Кофе остывал, а я все листал документацию, пытаясь понять, что же это за зверь такой — Observability. Слово, которое постоянно мелькало в статьях, но которое я как-то пропускал мимо ушей. А может, зря? Начал я, как водится, с Википедии. "Способность внутреннего состояния системы быть выведенным из знаний о ее внешних выходах". Хм, звучит как что-то из области астрофизики. Продолжил рыться в статьях — метрики, трассировка, логирование... И тут до меня дошло: да ведь это же про то, чтобы видеть систему целиком, а не по частям! Стали вспоминаться ситуации из опыта. Вот у меня приложение вроде работает, API отвечает быстро, но пользователи жалуются, что "где-то что-то тормозит". Логи мол

Вчера вечером, сидя за очередным багом в продакшне, который никак не хотел воспроизводиться в деве, я вдруг поймал себя на мысли: а ведь я работаю с "слепой" системой. Точнее, я вижу только то, что мне позволяют логи. А что если где-то там в недрах приложения происходит что-то, о чем я даже не догадываюсь?

Кофе остывал, а я все листал документацию, пытаясь понять, что же это за зверь такой — Observability. Слово, которое постоянно мелькало в статьях, но которое я как-то пропускал мимо ушей. А может, зря?

Начал я, как водится, с Википедии. "Способность внутреннего состояния системы быть выведенным из знаний о ее внешних выходах". Хм, звучит как что-то из области астрофизики. Продолжил рыться в статьях — метрики, трассировка, логирование... И тут до меня дошло: да ведь это же про то, чтобы видеть систему целиком, а не по частям!

Стали вспоминаться ситуации из опыта. Вот у меня приложение вроде работает, API отвечает быстро, но пользователи жалуются, что "где-то что-то тормозит". Логи молчат, база отвечает, а недовольство есть. Или вот — смена дня, и внезапно все ломается. А в логах тишина. "Вероятно, какие-то фоновые процессы", — думаешь, а что за процессы — хрен знает.

А тут я читаю про три "столпа" Observability: метрики, логи и трейсинг. И до меня доходит — ведь я это все уже использую, но как-то... бессистемно. Метрики тут, логи там, а связи между ними никакой. Это как пытаться понять сюжет фильма, смотря только на отдельные кадры.

Вот и получается, что ты сидишь перед экраном монитора, а система вокруг тебя — как черный ящик. Все вроде работает по индикаторам, а что творится внутри — загадка. И когда что-то идет не так, ты начинаешь гадать — а что это было? Что изменилось? Когда именно?

А Observability, как я понял, это про то, чтобы система "рассказала" тебе сама, что с ней происходит. Не ждать, пока пользователь напишет в саппорт "у вас все сломалось", а самому видеть в реальном времени: вот здесь стало медленнее, вот там выросло количество ошибок, вот этот сервис начал потреблять больше памяти.

И вот я сижу и думаю: а ведь Observability — это не просто набор инструментов, это вообще другой взгляд на разработку. Это когда ты перестаешь "отлаживать вслепую" и начинаешь *понимать* свою систему.

Но с другой стороны, это ведь может быть просто модное слово для того, что я и так делал? Или я все усложняю, и можно обойтись старыми добрыми логами? Может, это просто способ продать новые инструменты?

Хотя... Почему-то мне кажется, что в этой неуверенности и есть главный инсайт. Может, дело в том, что до определенного уровня масштабов и сложности действительно можно жить и без Observability? А вот когда система растет, когда микросервисов становится много, когда пользователей десятки тысяч — тут без "внутреннего зрения" уже не обойтись?

Или, может, я просто ищу оправдание, чтобы не изучать новые технологии? Вдруг это просто модный тренд, который завтра уйдет? А может, это как с Git — сначала казался излишеством, а теперь без него никуда?

Я еще не знаю, правильный ли этот вывод, но пока он кажется мне честным: Observability — это не роскошь, а необходимость, когда твоя система перестает помещаться в голове одного человека. И лучше освоить это заранее, чем разбираться с кризисами по мере роста.

В любом случае, я планирую начать с малого — добавить в наш проект базовый мониторинг, потом попробовать трассировку. Посмотрим, что из этого выйдет, в любом случае буду держать вас в курсе, пойдет это по пути "оказывается, это было просто" или по пути "теперь я понимаю, что происходило все это время" — время покажет.

А у вас был опыт, когда вы понимали, что система "говорит" с вами на языке метрик и логов? Или это только у меня глаза открылись так поздно?