0 added
0 removed
Original
2026-01-01
Modified
2026-02-19
1
<p>Или почему "оно работает" - это не то же самое, что "я понимаю, как оно работает"</p>
1
<p>Или почему "оно работает" - это не то же самое, что "я понимаю, как оно работает"</p>
2
<p>Кирилл Казарин, спикер курса<a>"Администрирование Linux"</a>и автор телеграм-канала Kazarin.online, простыми словами объясняет, что такое Observability и зачем оно нужно. Несмотря на то, что термин уже не новый, статья будет полезна людям, плохо с ним знакомым или незнакомым вовсе. Кирилл опирается на практику и на те примеры (пусть даже вымышленные), где наблюдаемости явно не хватает.</p>
2
<p>Кирилл Казарин, спикер курса<a>"Администрирование Linux"</a>и автор телеграм-канала Kazarin.online, простыми словами объясняет, что такое Observability и зачем оно нужно. Несмотря на то, что термин уже не новый, статья будет полезна людям, плохо с ним знакомым или незнакомым вовсе. Кирилл опирается на практику и на те примеры (пусть даже вымышленные), где наблюдаемости явно не хватает.</p>
3
<p>Рассмотрели три столпа наблюдаемости, необходимые инструменты, blind spots, а также составили чек-лист "Как понять, что у вас плохое observability".</p>
3
<p>Рассмотрели три столпа наблюдаемости, необходимые инструменты, blind spots, а также составили чек-лист "Как понять, что у вас плохое observability".</p>
4
<p><strong>Что вообще такое Observability?</strong></p>
4
<p><strong>Что вообще такое Observability?</strong></p>
5
<p>Observability ("наблюдаемость") - это способность понять внутреннее состояние системы только по её внешним проявлениям. Часто ещё говорят, что это свойство системы "быть наблюдаемой" (а значит ее нужно так построить. Или перестроить).</p>
5
<p>Observability ("наблюдаемость") - это способность понять внутреннее состояние системы только по её внешним проявлениям. Часто ещё говорят, что это свойство системы "быть наблюдаемой" (а значит ее нужно так построить. Или перестроить).</p>
6
<p>Как можно представить наличие такого свойства:</p>
6
<p>Как можно представить наличие такого свойства:</p>
7
<ul><li>У вас есть черный ящик</li>
7
<ul><li>У вас есть черный ящик</li>
8
<li>Вы не можете открыть его, но можете смотреть, как он реагирует на входные сигналы</li>
8
<li>Вы не можете открыть его, но можете смотреть, как он реагирует на входные сигналы</li>
9
<li>И по этим реакциям вы должны понять, что у него внутри: как он устроен, работает ли правильно, где болит</li>
9
<li>И по этим реакциям вы должны понять, что у него внутри: как он устроен, работает ли правильно, где болит</li>
10
</ul><p>Пример из жизни:</p>
10
</ul><p>Пример из жизни:</p>
11
<p>Сломался лифт. На табло - ничего. Кнопки не горят. Диспетчер говори: "Нажмите на все кнопки". Лифт молчит. Это плохая наблюдаемость. Или вовсе её отсутствие</p>
11
<p>Сломался лифт. На табло - ничего. Кнопки не горят. Диспетчер говори: "Нажмите на все кнопки". Лифт молчит. Это плохая наблюдаемость. Или вовсе её отсутствие</p>
12
<p>Теперь представим, что у лифта:</p>
12
<p>Теперь представим, что у лифта:</p>
13
<ul><li>горят статусы: "ожидание запроса", "движение вверх", "ошибка двери";</li>
13
<ul><li>горят статусы: "ожидание запроса", "движение вверх", "ошибка двери";</li>
14
<li>логируются события: "вызов получен, но не выполнен";</li>
14
<li>логируются события: "вызов получен, но не выполнен";</li>
15
<li>и у нас есть телеметрия с контроллера.</li>
15
<li>и у нас есть телеметрия с контроллера.</li>
16
</ul><p>Это уже хорошая наблюдаемость. Мы можем понять, что происходит - не вскрывая кабину, не залезая в моторный отсек, шахту и т.д.</p>
16
</ul><p>Это уже хорошая наблюдаемость. Мы можем понять, что происходит - не вскрывая кабину, не залезая в моторный отсек, шахту и т.д.</p>
17
<p><strong>Наблюдаемость ≠ Мониторинг</strong></p>
17
<p><strong>Наблюдаемость ≠ Мониторинг</strong></p>
18
<p>Можно подумать что observability - это метрики, графики и алерты. Нет. Это смешение понятий и подмена свойства "наблюдаемости" (подчеркну - свойства), процессом сбора телеметрии, ее автоматическим анализом, визуализацией и эскалацией. То есть тем, что в современном мире называют обычно "мониторинг". Мониторинг - процесс, наблюдаемость - свойство!</p>
18
<p>Можно подумать что observability - это метрики, графики и алерты. Нет. Это смешение понятий и подмена свойства "наблюдаемости" (подчеркну - свойства), процессом сбора телеметрии, ее автоматическим анализом, визуализацией и эскалацией. То есть тем, что в современном мире называют обычно "мониторинг". Мониторинг - процесс, наблюдаемость - свойство!</p>
19
<p>Мониторинг отвечает на вопрос: "Сломалось?", "Что сломалось?", "Когда сломалось?", и даже, возможно, "Сколько раз?".</p>
19
<p>Мониторинг отвечает на вопрос: "Сломалось?", "Что сломалось?", "Когда сломалось?", и даже, возможно, "Сколько раз?".</p>
20
<p><em>Observability отвечает на вопрос: "Почему?"</em></p>
20
<p><em>Observability отвечает на вопрос: "Почему?"</em></p>
21
<p><em>Мониторинг скажет: "API /checkout возвращает 5xx. Началось 5 минут назад" (это кстати еще хороший мониторинг)</em></p>
21
<p><em>Мониторинг скажет: "API /checkout возвращает 5xx. Началось 5 минут назад" (это кстати еще хороший мониторинг)</em></p>
22
<p>Observability поможет понять, почему: "Потому что новый релиз сломал работу с Redis, а на третьей ноде таймауты к кластеру выросли до 3 секунд".</p>
22
<p>Observability поможет понять, почему: "Потому что новый релиз сломал работу с Redis, а на третьей ноде таймауты к кластеру выросли до 3 секунд".</p>
23
<p>Можно также сказать, что мониторинг отвечает на известные вопросы, observability помогает формулировать новые.</p>
23
<p>Можно также сказать, что мониторинг отвечает на известные вопросы, observability помогает формулировать новые.</p>
24
<p><strong>Три столпа наблюдаемости: метрики, логи и трассировки</strong></p>
24
<p><strong>Три столпа наблюдаемости: метрики, логи и трассировки</strong></p>
25
<p><strong>1. Метрики, она же телеметрия</strong></p>
25
<p><strong>1. Метрики, она же телеметрия</strong></p>
26
<p>Что это: численные значения, которые можно агрегировать и отображать, обрабатывать триггером, зажигать алерт, ретроспективно анализировать.</p>
26
<p>Что это: численные значения, которые можно агрегировать и отображать, обрабатывать триггером, зажигать алерт, ретроспективно анализировать.</p>
27
<p>Примеры:</p>
27
<p>Примеры:</p>
28
<p>- Количество запросов в секунду.</p>
28
<p>- Количество запросов в секунду.</p>
29
<p>- Утилизация CPU.</p>
29
<p>- Утилизация CPU.</p>
30
<p>- Ошибки 5xx.</p>
30
<p>- Ошибки 5xx.</p>
31
<p>- Время ответа 95-го перцентиля.</p>
31
<p>- Время ответа 95-го перцентиля.</p>
32
<p>Где полезны:</p>
32
<p>Где полезны:</p>
33
<p>- Оперативный мониторинг.</p>
33
<p>- Оперативный мониторинг.</p>
34
<p>- Дашборды.</p>
34
<p>- Дашборды.</p>
35
<p>- Триггеры алертов.</p>
35
<p>- Триггеры алертов.</p>
36
<p>Пример: Мы видим, что latency checkout вырос с 150ms до 900ms - и это не просто "кажется", это метрика на графике в Grafana.</p>
36
<p>Пример: Мы видим, что latency checkout вырос с 150ms до 900ms - и это не просто "кажется", это метрика на графике в Grafana.</p>
37
<p><strong>2. Логи</strong></p>
37
<p><strong>2. Логи</strong></p>
38
<p>Что это: текстовые события, часто с контекстом (уровень, время, тред, пользователь).</p>
38
<p>Что это: текстовые события, часто с контекстом (уровень, время, тред, пользователь).</p>
39
<p>Примеры:</p>
39
<p>Примеры:</p>
40
<p>- ERROR Could not connect to DB</p>
40
<p>- ERROR Could not connect to DB</p>
41
<p>- INFO User 123 placed order</p>
41
<p>- INFO User 123 placed order</p>
42
<p>- WARN Timeout during external API call</p>
42
<p>- WARN Timeout during external API call</p>
43
<p>Где полезны:</p>
43
<p>Где полезны:</p>
44
<p>- Разбор инцидентов.</p>
44
<p>- Разбор инцидентов.</p>
45
<p>- Отладка (дебаг, траблшутинг)</p>
45
<p>- Отладка (дебаг, траблшутинг)</p>
46
<p>- Поиск аномалий.</p>
46
<p>- Поиск аномалий.</p>
47
<p>Пример: Логи показывают, что ошибка NullPointerException началась ровно после релиза версии 1.4.2.</p>
47
<p>Пример: Логи показывают, что ошибка NullPointerException началась ровно после релиза версии 1.4.2.</p>
48
<p><strong>3. Трассировки (distributed tracing)</strong></p>
48
<p><strong>3. Трассировки (distributed tracing)</strong></p>
49
<p>Что это: хронология вызовов между компонентами системы.</p>
49
<p>Что это: хронология вызовов между компонентами системы.</p>
50
<p>Примеры:</p>
50
<p>Примеры:</p>
51
<p>- запрос от клиента → API Gateway → backend → сервис оплаты → база.</p>
51
<p>- запрос от клиента → API Gateway → backend → сервис оплаты → база.</p>
52
<p>Где полезны:</p>
52
<p>Где полезны:</p>
53
<p>- Понимание сложных связей в микросервисах.</p>
53
<p>- Понимание сложных связей в микросервисах.</p>
54
<p>- Выявление "долго думающих" компонентов.</p>
54
<p>- Выявление "долго думающих" компонентов.</p>
55
<p>- Оптимизация цепочек.</p>
55
<p>- Оптимизация цепочек.</p>
56
<p>Пример: Вы видите, что 70% времени на оплату тратится в вызове к стороннему платежному API. И это видно в одном клике - потому что трассировка это зафиксировала.</p>
56
<p>Пример: Вы видите, что 70% времени на оплату тратится в вызове к стороннему платежному API. И это видно в одном клике - потому что трассировка это зафиксировала.</p>
57
<p><strong>Инструменты: с чего начинается наблюдаемость</strong></p>
57
<p><strong>Инструменты: с чего начинается наблюдаемость</strong></p>
58
<p>Prometheus - сбор и хранение метрик. Альтернатив много - от Zabbix до платных облачных сервисов типа Datadog</p>
58
<p>Prometheus - сбор и хранение метрик. Альтернатив много - от Zabbix до платных облачных сервисов типа Datadog</p>
59
<p>Grafana - визуализация, алерты. Есть альтернативы но будем честны - стандарт де-факто.</p>
59
<p>Grafana - визуализация, алерты. Есть альтернативы но будем честны - стандарт де-факто.</p>
60
<p>OpenTelemetry - относительно новый, открытый стандарт для сбора логов, метрик и трассировок.</p>
60
<p>OpenTelemetry - относительно новый, открытый стандарт для сбора логов, метрик и трассировок.</p>
61
<p>Jaeger / Zipkin - трассировки.</p>
61
<p>Jaeger / Zipkin - трассировки.</p>
62
<p>Elastic stack - логи, метрики, APM. Альтернатив много, например Loki - лог-агрегатор от Grafana.</p>
62
<p>Elastic stack - логи, метрики, APM. Альтернатив много, например Loki - лог-агрегатор от Grafana.</p>
63
<p>Важно: инструменты вторичны. Сначала - понимание, какие вопросы мы хотим уметь задавать системе.</p>
63
<p>Важно: инструменты вторичны. Сначала - понимание, какие вопросы мы хотим уметь задавать системе.</p>
64
<p>Пример: есть ли у нас наблюдаемость?</p>
64
<p>Пример: есть ли у нас наблюдаемость?</p>
65
<p>Представим гипотетический инцидент:</p>
65
<p>Представим гипотетический инцидент:</p>
66
<p><em>В 03:14 начались ошибки 502 Bad Gateway. Через 7 минут алерт. На поиск причины ушло ещё 40 минут (оптимистично). Смотрели логи ряда сервисов, по документации вспоминали флоу и т.д. Параллельно смотрели а что сегодня выкатывалось (слава богам если у нас поставлен процесс change-management)! В итоге оказалось - обновили сервис расчёта доставки, и он стал отдавать 500ые ошибки из-за несовместимости с новой схемой данных, потом это другим, зависимым от него сервисом конвертнулось в 503, потому что разработчик того сервиса так решил и в итоге на API gateway мы получили 502 что и зафиксировал клиент.</em></p>
66
<p><em>В 03:14 начались ошибки 502 Bad Gateway. Через 7 минут алерт. На поиск причины ушло ещё 40 минут (оптимистично). Смотрели логи ряда сервисов, по документации вспоминали флоу и т.д. Параллельно смотрели а что сегодня выкатывалось (слава богам если у нас поставлен процесс change-management)! В итоге оказалось - обновили сервис расчёта доставки, и он стал отдавать 500ые ошибки из-за несовместимости с новой схемой данных, потом это другим, зависимым от него сервисом конвертнулось в 503, потому что разработчик того сервиса так решил и в итоге на API gateway мы получили 502 что и зафиксировал клиент.</em></p>
67
<p>Вопрос: Могли бы мы выяснить это быстрее? С меньшими усилиями? С меньшим ущербом для конечного опыта пользователей?</p>
67
<p>Вопрос: Могли бы мы выяснить это быстрее? С меньшими усилиями? С меньшим ущербом для конечного опыта пользователей?</p>
68
<p>Да, могли. Если бы мы сразу получили ответ в формате цепочки сервисов - кто от кого зависит, кто начал сбоить, когда и что в это время происходило еще (какие события могли к этому привести).</p>
68
<p>Да, могли. Если бы мы сразу получили ответ в формате цепочки сервисов - кто от кого зависит, кто начал сбоить, когда и что в это время происходило еще (какие события могли к этому привести).</p>
69
<p><strong>Что тут могло пригодиться:</strong></p>
69
<p><strong>Что тут могло пригодиться:</strong></p>
70
<p>- логи разных компонент связаны за счет единого trace-id/request-id</p>
70
<p>- логи разных компонент связаны за счет единого trace-id/request-id</p>
71
<p>- в идеале есть трейсинг запроса между компонентами. Не обязательно трейсить каждый. Можно каждый 100-ый, например, или вообще динамически включать</p>
71
<p>- в идеале есть трейсинг запроса между компонентами. Не обязательно трейсить каждый. Можно каждый 100-ый, например, или вообще динамически включать</p>
72
<p>- все компоненты отдают метрики и у нас есть выборка скажем топ 10, которые вероятнее расскажут о проблеме. Эти метрики точно покрыты триггерами. Например latency, error rate, request rate, duration и тд. Привет USE, RED, 4GS.</p>
72
<p>- все компоненты отдают метрики и у нас есть выборка скажем топ 10, которые вероятнее расскажут о проблеме. Эти метрики точно покрыты триггерами. Например latency, error rate, request rate, duration и тд. Привет USE, RED, 4GS.</p>
73
<p>Если же у вас:</p>
73
<p>Если же у вас:</p>
74
<p>- нет трассировок между компонентами,</p>
74
<p>- нет трассировок между компонентами,</p>
75
<p>- логи разрозненные и не связаны по trace-id,</p>
75
<p>- логи разрозненные и не связаны по trace-id,</p>
76
<p>- метрики, например, есть только у Nginx…</p>
76
<p>- метрики, например, есть только у Nginx…</p>
77
<p>то у вас плохая наблюдаемость.</p>
77
<p>то у вас плохая наблюдаемость.</p>
78
<p><strong>Blind spots - невидимые зоны</strong></p>
78
<p><strong>Blind spots - невидимые зоны</strong></p>
79
<p><em>"Всё, что не логируется и не мониторится - исчезает в момент инцидента"</em></p>
79
<p><em>"Всё, что не логируется и не мониторится - исчезает в момент инцидента"</em></p>
80
<p>Blind spot - это участок системы, по которому мы ничего не знаем.</p>
80
<p>Blind spot - это участок системы, по которому мы ничего не знаем.</p>
81
<p>Примеры:</p>
81
<p>Примеры:</p>
82
<p>- Вызов к стороннему API, который мы не мониторим.</p>
82
<p>- Вызов к стороннему API, который мы не мониторим.</p>
83
<p>- Скрипт, который запускается по cron и не логирует ни свою работу, ни результат. К тому же не мониторится.</p>
83
<p>- Скрипт, который запускается по cron и не логирует ни свою работу, ни результат. К тому же не мониторится.</p>
84
<p>- Внутренний сервис, который пишет в stdout, а не в централизованную систему логов (забыли мы с него настроить сбор логов)</p>
84
<p>- Внутренний сервис, который пишет в stdout, а не в централизованную систему логов (забыли мы с него настроить сбор логов)</p>
85
<p>Как искать такие зоны:</p>
85
<p>Как искать такие зоны:</p>
86
<p>- Составить карту компонентов и зависимостей.</p>
86
<p>- Составить карту компонентов и зависимостей.</p>
87
<p>- Пройтись по запросу от клиента до базы: на каждом этапе - есть ли логика, метрики, трассировки?</p>
87
<p>- Пройтись по запросу от клиента до базы: на каждом этапе - есть ли логика, метрики, трассировки?</p>
88
<p>- Если нет - это и есть blind spot.</p>
88
<p>- Если нет - это и есть blind spot.</p>
89
<p>Что отличает хорошую Observability от плохой</p>
89
<p>Что отличает хорошую Observability от плохой</p>
90
<p>Хорошая:</p>
90
<p>Хорошая:</p>
91
<p>- Система отвечает на вопросы: "что происходит", "почему", "когда началось", "что ещё пострадало".</p>
91
<p>- Система отвечает на вопросы: "что происходит", "почему", "когда началось", "что ещё пострадало".</p>
92
<p>- Лёгкий доступ к данным.</p>
92
<p>- Лёгкий доступ к данным.</p>
93
<p>- Консистентные trace-id между логами, метриками, трассировками.</p>
93
<p>- Консистентные trace-id между логами, метриками, трассировками.</p>
94
<p>- История событий доступна хотя бы за неделю. В идеале пусть даже с некоторым усреднением есть статистика за месяц-квартал-год.</p>
94
<p>- История событий доступна хотя бы за неделю. В идеале пусть даже с некоторым усреднением есть статистика за месяц-квартал-год.</p>
95
<p>Плохая:</p>
95
<p>Плохая:</p>
96
<p>- Есть только дашборд "всё зелёное" (или все красное. Светофор)</p>
96
<p>- Есть только дашборд "всё зелёное" (или все красное. Светофор)</p>
97
<p>- Нет trace-id, но есть 200 Gb логов в plaintext без таймстампов.</p>
97
<p>- Нет trace-id, но есть 200 Gb логов в plaintext без таймстампов.</p>
98
<p>- Метрики только у сторонних компонент, типа Redis, MySQL, Nginx и то просто потому что их по дефолту экспортирует мониторинг агент</p>
98
<p>- Метрики только у сторонних компонент, типа Redis, MySQL, Nginx и то просто потому что их по дефолту экспортирует мониторинг агент</p>
99
<p>- Никто не знает, откуда взять трассировку, если она вообще есть.</p>
99
<p>- Никто не знает, откуда взять трассировку, если она вообще есть.</p>
100
<p>- Вы никогда не проверяли теорию о том что выход из строя компонента Х может быть найден за Y времени с тратой Z человеческих ресурсов.</p>
100
<p>- Вы никогда не проверяли теорию о том что выход из строя компонента Х может быть найден за Y времени с тратой Z человеческих ресурсов.</p>
101
<p>Observability - это культура</p>
101
<p>Observability - это культура</p>
102
<p>Наблюдаемость - не библиотека, не тул, не плагин.</p>
102
<p>Наблюдаемость - не библиотека, не тул, не плагин.</p>
103
<p>Это подход:</p>
103
<p>Это подход:</p>
104
<p>- Придумывать, какие сигналы система должна излучать.</p>
104
<p>- Придумывать, какие сигналы система должна излучать.</p>
105
<p>- Проектировать фичи с вопросом: "а как мы поймем, что она работает?". И самое главное - “когда и почему она НЕ работает”</p>
105
<p>- Проектировать фичи с вопросом: "а как мы поймем, что она работает?". И самое главное - “когда и почему она НЕ работает”</p>
106
<p>- Не верить, что "если запрос вернул 200 - всё хорошо". Потому что видели мы JSON: 200ok {Status: “Request failed”}.</p>
106
<p>- Не верить, что "если запрос вернул 200 - всё хорошо". Потому что видели мы JSON: 200ok {Status: “Request failed”}.</p>
107
<p><strong>Итоги</strong></p>
107
<p><strong>Итоги</strong></p>
108
<p>Observability - это не про "если что, посмотрим по логам". Это про систему, которая сама себя объясняет. Начинайте с вопросов, на которые вы хотите уметь отвечать.</p>
108
<p>Observability - это не про "если что, посмотрим по логам". Это про систему, которая сама себя объясняет. Начинайте с вопросов, на которые вы хотите уметь отвечать.</p>
109
<p><strong>Чеклист: как понять, что у вас плохое observability</strong></p>
109
<p><strong>Чеклист: как понять, что у вас плохое observability</strong></p>
110
<p>1. 🔍 Есть только метрики на уровне ingress-а, но не внутри приложения.</p>
110
<p>1. 🔍 Есть только метрики на уровне ingress-а, но не внутри приложения.</p>
111
<p>2. ❓ Вы не можете за 5 минут понять, почему выросли ошибки 5xx.</p>
111
<p>2. ❓ Вы не можете за 5 минут понять, почему выросли ошибки 5xx.</p>
112
<p>3. 🧩 Логи разрознены, нет trace-id или они не совпадают между сервисами.</p>
112
<p>3. 🧩 Логи разрознены, нет trace-id или они не совпадают между сервисами.</p>
113
<p>4. 📉 У вас есть дашборды, но вы на них не смотрите (и никто не знает, что они показывают).</p>
113
<p>4. 📉 У вас есть дашборды, но вы на них не смотрите (и никто не знает, что они показывают).</p>
114
<p>5. 🌪️ В случае инцидента все бегают с kubectl logs по разным подам и грепают в надежде найти "что-то странное".</p>
114
<p>5. 🌪️ В случае инцидента все бегают с kubectl logs по разным подам и грепают в надежде найти "что-то странное".</p>
115
<p>6. 🛠️ Алёрты приходят, но вы не знаете, что с ними делать.</p>
115
<p>6. 🛠️ Алёрты приходят, но вы не знаете, что с ними делать.</p>
116
<p>7. 🔧 У новых фич нет логирования или метрик вообще.</p>
116
<p>7. 🔧 У новых фич нет логирования или метрик вообще.</p>
117
<p>8. 🔐 Запрос через 3 микросервиса нельзя восстановить end-to-end.</p>
117
<p>8. 🔐 Запрос через 3 микросервиса нельзя восстановить end-to-end.</p>
118
<p>9. 🧱 Вы не знаете, какие компоненты у вас в системе и как они связаны.</p>
118
<p>9. 🧱 Вы не знаете, какие компоненты у вас в системе и как они связаны.</p>
119
<p>10. 🐛 "Сейчас вроде работает - давайте не трогать".</p>
119
<p>10. 🐛 "Сейчас вроде работает - давайте не трогать".</p>