С нуля: что такое наблюдаемость на самом деле
Наблюдаемость — это возможность спросить «что делает моя система и почему» снаружи. Это карта «с нуля» и восемь слов, которые остальной трек считает уже знакомыми.
Твой сервис живёт. Пользователи заходят. И тут кто-то в Slack пишет: «оформление заказа сломалось». Ты открываешь терминал и смотришь в пустоту. К дебаггеру не подключиться — код работает сразу на трёх серверах, обрабатывает сотни запросов в секунду, а сбой случился 90 секунд назад. У тебя есть только то, что система сама решила о себе записать. Если она записала нужное в нужном виде — ты ответишь «что случилось и почему» за несколько минут. Если нет — будешь угадывать в темноте. Наблюдаемость — это дисциплина делать системы читаемыми снаружи. И этот урок — словарь, который нужен прежде, чем начнётся настоящая работа.
Единственная проблема, которую решает наблюдаемость
Когда код работает у тебя на ноутбуке, ты можешь подключить дебаггер, добавить print и следить за каждой переменной. В продакшене — нет. Программа крутится на машинах, которыми ты не управляешь, обрабатывает много запросов параллельно, а момент, который тебе важен, уже прошёл. Ты постоянно снаружи. Наблюдаемость — инженерная дисциплина, которая делает «снаружи» достаточным: система непрерывно записывает сигналы о себе — числа, текст, причинно-следственные цепочки — а ты запрашиваешь эти сигналы, чтобы понять поведение, которое ты напрямую не наблюдал. Сделаешь правильно — пятиминутный инцидент превратится в десятиминутный постмортем. Сделаешь неправильно — каждая авария станет археологией.
Цель не в том, чтобы логировать всё; цель — испускать сигналы, которые позволят ответить на вопросы, которые ты ещё не придумал.
Восемь слов, которые остальной трек считает знакомыми
Senior-уроки дальше используют эти термины, не останавливаясь на определениях. Вот они, по одному предложению — что это и зачем оно.
| Слово | Что это | Зачем оно |
|---|---|---|
| Телеметрия | Данные, которые код испускает о своём поведении — зонтичный термин для метрик, логов и трасс. | Чтобы было что запросить, когда что-то пойдёт не так. |
| Метрика | Число, измеряемое во времени — частота запросов, количество ошибок, потреблённая память. | Чтобы видеть тренды, ставить пороги и знать, когда что-то их переступает. |
| Лог | Текстовая запись с меткой времени об одном событии — «пользователь 42 оформил заказ 99». | Чтобы детально прочитать историю конкретного момента. |
| Трасса | Полный путь одного запроса через все сервисы, которых он коснулся, сшитый воедино. | Чтобы видеть, где потрачено время и какой сервис вызвал задержку. |
| Спан | Один измеренный блок работы внутри трассы — один запрос к БД, один HTTP-вызов. | Чтобы трасса была деревом спанов, каждый с собственным таймингом и атрибутами. |
| Дашборд | Экран с графиками, отображающими метрики во времени в одном месте. | Чтобы команда могла оценить здоровье системы одним взглядом, без ручных запросов. |
| Алерт | Правило, которое отправляет уведомление, когда метрика переступает порог. | Чтобы люди получали сигнал автоматически, когда система требует внимания. |
| Кардинальность | Количество уникальных значений, которые может принять метка метрики — например, одно на user_id очень высокая кардинальность. | Чтобы понимать, почему одни метрики дёшевы, а другие взрывают счёт за хранилище. |
Как они складываются вместе
Прочитанные по порядку, слова рассказывают одну историю: твой код непрерывно испускает телеметрию — поток метрик, логов и трасс. Метрики — агрегированные числа; дашборд строит их во времени, чтобы команда видела состояние одним взглядом, а алерты срабатывают, когда метрика пересекает порог, — никому не нужно следить за графиками вручную. Логи — детальный нарратив: когда срабатывает алерт, ты читаешь логи за этот момент, чтобы понять, что именно произошло. Трассы сшивают логи из многих сервисов в историю одного запроса — каждый переход это спан — так ты видишь, какой сервис добавил задержку или выбросил ошибку. Кардинальность — скрытая цена: чем больше уникальных комбинаций меток у метрики, тем больше хранилища и времени запроса она требует. Это один абзац — весь трек в миниатюре; каждый следующий юнит увеличивает один из этих кусочков.
▸Почему это работает
Почему не просто зайти по SSH и проверить всё руками? Потому что к тому моменту, как ты зашёл, проблема может исчезнуть — и у тебя не будет записи о том, что система делала в момент сбоя. Предварительно испущенная телеметрия — единственное доказательство, которое можно запросить постфактум. Ещё: система под нагрузкой обрабатывает сотни запросов в секунду на множестве серверов. Ни один человек не сможет наблюдать это в реальном времени. Наблюдаемость превращает «смотри в реальном времени» в «запроси запись» — а это масштабируется бесконечно и работает с инцидентами, которые случились в прошлый вторник.
Алерт сообщает, что частота ошибок превысила 5 %. К какому сигналу ты обращаешься дальше, чтобы понять, что произошло?
Расставь шаги расследования, когда срабатывает алерт на твоём сервисе:
- 1 Алерт срабатывает — метрика пересекла настроенный порог
- 2 Открываешь дашборд, чтобы увидеть, какая метрика изменилась и когда
- 3 Читаешь логи за этот промежуток, чтобы найти конкретные упавшие события
- 4 Открываешь трассу для упавшего запроса, чтобы увидеть, какой сервис или спан стал причиной
- 01В одном дыхании: что такое наблюдаемость и как три типа сигналов делят работу?
- 02Что такое кардинальность и почему она важна для метрик?
Наблюдаемость — это одна идея с кучей навешанной механики: сделай систему читаемой снаружи, заставив её непрерывно испускать данные о себе, — чтобы ты мог ответить на вопросы о её поведении постфактум. Три типа сигналов делят работу по гранулярности. Метрики — числа, измеряемые во времени: дёшевы, агрегированы, хороши для дашбордов и алертов. Логи — текстовые записи на каждое событие: детальны, дороги при масштабе, правильный инструмент для чтения истории конкретного момента. Трассы следуют за одним запросом через все сервисы, которых он коснулся, — каждый переход как спан — правильный инструмент для понимания задержки и причинности через границы сервисов. Кардинальность — скрытая цена, определяющая, насколько дорого хранить метрику. Тебе не нужно держать все восемь слов сразу — у каждого впереди свой юнит. Теперь, когда встретишь сработавший алерт, ты будешь знать, за каким сигналом тянуться: метрики — чтобы увидеть форму, логи — чтобы прочитать, что произошло, трассы — чтобы найти, где именно через сервисы что-то сломалось.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.