Мониторинг и наблюдаемость: Реальная разница с журналами, метриками и трассировками
Мониторинг говорит вам, что что-то не так. Наблюдательность поможет вам понять причину, даже если неудачу вы никогда не предсказывали. Проследите за инцидентом на кассе, чтобы увидеть, как они работают вместе.
- Мониторинг отслеживает известные проблемы, используя предопределенные показатели и оповещения.
- Наблюдаемость – это то, насколько хорошо вы можете понять внутреннее состояние системы по ее выходным данным.
- Журналы, метрики и трассировки — это распространенные сигналы, но их сбор не гарантирует понимания.
- Они работают вместе: мониторинг поднимает тревогу, а наблюдаемость помогает найти причину.
Панель управления зеленая, но клиенты жалуются, что касса не работает. Если вы были на этой должности, вы уже понимаете разницу между мониторингом и наблюдаемостью. Ваш мониторинг проверил только то, что вы хотели проверить, и этот сбой — нечто новое.
В этом руководстве обе идеи объясняются без использования маркетингового языка и прослеживаются в одном вымышленном инциденте от предупреждения до основной причины. Журналы, трассировка и цифры придуманы для иллюстрации процесса. Вы также должны знать, что поставщики и практики проводят эту линию по-разному, и некоторые считают, что это отчасти маркетинговое различие. Мы делаем упор на практическую часть.
Короткий ответ
Мониторинг — это деятельность. Вы заранее решаете, за чем следить, например, за процессором, частотой ошибок или дисковым пространством, и устанавливаете пороговые значения, которые вызывают оповещения. Он отвечает: «Произошло ли то, о чем я беспокоился?»
Наблюдаемость — это свойство вашей системы. Этот термин пришел из теории управления, где он описывает, насколько хорошо вы можете сделать вывод о внутреннем состоянии системы на основе ее внешних результатов. На практике он отвечает: «Что происходит и почему, в том числе и из-за проблем, которых я не ожидал?»
Подумайте об автомобиле. Контрольные лампы на приборной панели контролируют ситуацию. Они охватывают ряд известных проблем. Полный диагностический порт механика, который позволяет задавать новые вопросы о любой части двигателя, ближе к наблюдаемости.
Мониторинг и наблюдаемость бок о бок
| Аспект | Мониторинг | Наблюдаемость |
|---|---|---|
| Главный вопрос | Что-то не так? | Почему это неправильно? |
| Лучшее для | Известные виды отказов | Неизвестные и новые неудачи |
| Подход | Предопределенные проверки и информационные панели | Открытое исследование богатых данных |
| Типичный результат | Оповещения и графики состояния | Ответы на новые вопросы |
| Детализация данных | Часто агрегированные | Подробно, по запросу, где это возможно |
| Настройка | Настройка проверок извне | Требуется инструментирование вашего кода |
| Используется | Оперативный персонал, дежурный персонал | Разработчики и дежурный персонал |
Это не выбор между двумя. Вам по-прежнему нужны оповещения, подсказывающие, когда искать.
Почему одного мониторинга недостаточно
При наличии одного приложения на одном сервере список проблем, которые могут пойти не так, довольно короткий, поэтому вы можете просмотреть их все. Современная система может иметь десятки сервисов, очередей и сторонних API, а также контейнеров, которые приходят и уходят. Сбои становятся комбинациями, которые никто не предвидел: один регион, один тип клиента, конкретная версия приложения и одна медленная зависимость.
Нельзя заранее написать дашборд по вопросу, о котором вы не подумали. Вам нужны данные, которые позволят вам задать их впоследствии.
Журналы, метрики и трассировки
Эти три типа телеметрии часто называют столпами наблюдаемости. Каждый отвечает на свой вопрос:
| Сигнал | Что это такое | Ответы | Слабость |
|---|---|---|---|
| Метрики | Цифры со временем | Сколько? Становится хуже? | Немного подробностей об отдельных событиях |
| Журналы | Записи отдельных событий | Что именно произошло? | Может быть дорогим и шумным |
| Следы | Путь запроса через сервисы | Куда ушло время? | Требуют приборов и часто отбирают образцы. |
Метрики
http_requests_total{service="checkout", status="500"} 1832
http_request_duration_seconds{service="checkout", quantile="0.95"} 2.4
Метрики легко хранить и быстро запрашивать, что делает их идеальными для информационных панелей и оповещений. Будьте осторожны с метками высокой мощности, такими как идентификатор пользователя, во многих метрических системах, поскольку они могут резко увеличить стоимость.
Следы
Трассировка следует за одним запросом между службами. Каждый шаг представляет собой промежуток со временем начала и продолжительностью:
POST /checkout 2410 ms
├─ auth-service: verify token 18 ms
├─ cart-service: load cart 42 ms
├─ pricing-service: calculate 2290 ms <-- slow
│ └─ SELECT coupons ... 2265 ms
└─ payment-service: not reached
Трассировка делает медленный шаг очевидным, что очень сложно увидеть в отдельных логах отдельных сервисов.
Журналы
Журналы содержат подробную информацию о том, что произошло в определенный момент. Мы рассмотрим, как сделать их полезными в мгновение ока.
Описание инцидента
Вот как части соединяются друг с другом на вымышленном примере.
| Шаг | Сигнал | Чему мы учимся |
|---|---|---|
| 1. Оповещение о пожарах | Метрика | Задержка Checkout p95 превысила целевой показатель в 1 секунду |
| 2. Разбейте это | Метрика | Затрагивается только мобильное приложение, а не веб-сайт. |
| 3. Проверка запроса | След | Время в прайс-сервисе, по запросу купона |
| 4. Прочтите подробности | Журналы | Все медленные запросы используют купон из сегодняшней кампании. |
| 5. Подтвердите причину | План запроса | Поиск купонов не имеет подходящего индекса |
| 6. Исправьте это | Развертывание | Добавьте индекс и наблюдайте за восстановлением задержки |
Мониторинг выполнялся на этапе 1. Все, что было дальше, было наблюдаемостью. Обратите внимание, как каждый вопрос возник из предыдущего ответа. Никто не мог заранее создать информационную панель для «запроса купонов в мобильном приложении из сегодняшней кампании». Что касается самого исправления, в нашем руководстве по оптимизации SQL-запросов показано, как читать такой план.
Улучшенные журналы
Журналы в виде простого текста созданы для человеческого глаза, и их трудно запрашивать. Структурированные журналы используют поля, по которым машина может фильтровать:
# Hard to search
ERROR Payment failed for user 42 after 3 tries
# Easy to search
{"level":"error","event":"payment_failed","user_id":"42",
"attempts":3,"provider":"acme","trace_id":"a1b2c3","duration_ms":2410}
При помощи второй формы можно сразу спросить «сколько сбоев у одного провайдера за последний час?» Поле trace_id особенно ценно, поскольку оно связывает строку журнала со всем запросом для каждой службы, к которой он обращается.
Никогда не регистрируйте пароли, токены или номера карт и будьте осторожны с личными данными. Как объясняется в нашем руководстве, JWT может повторно использоваться любым, кто читает их из журнала.
Совет. Добавьте контекст, который вам понадобится во время инцидента, например версию, регион, уровень клиента и состояние флага функции. Возможность сказать «только версия 2.14 в одном регионе» часто решает проблему сама по себе.
Золотые сигналы
Не знаете, что отслеживать? Книга Google Site Reliability Engineering предлагает четыре сигнала для систем, ориентированных на пользователя:
| Сигнал | Вопрос | Пример |
|---|---|---|
| Задержка | Сколько времени занимают запросы? | время отклика p95 и p99 |
| Трафик | Насколько велик спрос? | Запросов в секунду |
| Ошибки | Сколько запросов терпят неудачу? | Частота 5xx ответов |
| Насыщенность | Насколько заполнена система? | Использование ЦП, памяти, пула соединений |
Используйте процентили для определения задержки, поскольку средние значения скрывают медленные запросы, как мы показали в нагрузочном и стресс-тестировании.
Оповещения, которым люди доверяют
Если оповещения срабатывают постоянно, люди перестанут их читать. Хорошие люди следуют нескольким правилам:
- Оповещение о симптомах, которые ощущают пользователи. «Ошибки при оформлении заказа выше 2 %» лучше, чем «Загрузка процессора при 85 %». Высокий процессор, который никому не вредит, не должен никого будить.
- Сделайте каждое оповещение действенным. Если никому не нужно ничего делать, сделайте его элементом панели управления или удалите.
- Ссылка на Runbook. Расскажите респонденту, где искать и что попробовать.
- Регулярно просматривайте их. Удалите или исправьте все оповещения, которые были проигнорированы в прошлом месяце.
Цели уровня обслуживания
SLO превращает «сайт должен быть быстрым и надежным» в измеримую цель, например «99,9% запросов на оформление заказа выполняются в течение 30 дней». Это позволяет исключить около 0,1 % ошибок, что называется бюджетом ошибок. Если у вас осталось много, вы можете отправить товар быстрее, а если он почти израсходован, вы можете поставить надежность в приоритет. Это полезный способ разрешить споры между скоростью доставки и стабильностью.
OpenTelemetry и инструменты
OpenTelemetry — это независимый от поставщиков стандарт с открытым исходным кодом для создания и экспорта данных телеметрии. Это проект Cloud Native Computing Foundation. Инструментирование с его помощью означает, что вы можете изменить свой бэкэнд позже, не переписывая код. Это не продукт хранилища или информационной панели, поэтому вы можете объединить его с одним из них:
| Цель | Примеры с открытым исходным кодом | Коммерческие примеры |
|---|---|---|
| Метрики | Прометей | Датадог, Новая Реликвия |
| Панели мониторинга | Графана | Датадог, Dynatrace |
| Журналы | Локи, OpenSearch | Сплэнк, Эластичный |
| Следы | Джагер, Темп | Соты, Datadog |
Проверьте текущие функции и цены самостоятельно, поскольку эти продукты часто меняются. Затраты могут быстро расти с увеличением объема данных, поэтому используйте выборку и устанавливайте ограничения на хранение.
С чего начать
- Начните с золотых сигналов для вашей самой важной услуги.
- Добавьте одно или два оповещения о симптомах, которые замечают пользователи.
- Перейдите на структурированные журналы, с идентификатором запроса в каждой строке.
- Добавьте трассировку в свой основной путь пользователя с помощью OpenTelemetry, поскольку автоматическое инструментирование может охватывать многие распространенные платформы.
- Свяжите развертывания со своими графиками, чтобы вы могли увидеть, вызвал ли выпуск из вашего конвейера CI/CD изменения.
- Извлекайте уроки из каждого инцидента. После каждого из них спрашивайте, какие данные помогли бы быстрее решить проблему, и добавляйте их.
Небольшой команде с одним сервисом не нужна огромная платформа. Базовых показателей, хороших журналов и нескольких предупреждений может быть достаточно. Отслеживание зарабатывает себе на жизнь по мере роста количества сервисов.
Распространенные ошибки
- Купить инструмент и назвать его наблюдаемым. Ценность зависит от хорошего инструментария и того, как вы используете данные.
- Относитесь к трем столпам как к контрольному списку. Отдельные данные без возможности связать их заставляют искать информацию на вкладках. Общие идентификаторы имеют значение.
- Собираем всё. Нефильтрованная телеметрия обходится дорого и добавляет шума.
- Слишком много информационных панелей. Несколько доверенных просмотров превосходят сотню, которую никто не открывает.
- Думаю, что это заменяет тестирование. Тесты все равно нужны перед выпуском. Однако Canary-релизы хорошо сочетаются с этими сигналами.
Итоги
Мониторинг сообщает вам, что что-то пошло не так, а наблюдаемость дает вам возможность выяснить, почему. Практический тест прост: сможете ли вы найти причину, не отправляя новый код, при появлении незнакомой проблемы? В следующий раз, когда вы попадете в аварию, запишите все вопросы, на которые вы не смогли ответить. Этот список — ваша дорожная карта.
Часто задаваемые вопросы
В чем разница между мониторингом и наблюдаемостью?
Мониторинг отслеживает предопределенные показатели и выдает оповещения об известных проблемах. Наблюдаемость — это способность понимать состояние системы по ее выходным данным, в том числе в случае непредвиденных проблем.
Каковы три столпа наблюдаемости?
Это журналы, метрики и трассировки. В журналах регистрируются события, метрики измеряют значения с течением времени, а трассировки следуют за одним запросом между службами.
Нужна ли мне наблюдаемость, если у меня есть мониторинг?
Для небольшой и простой системы может быть достаточно хорошего мониторинга и журналов. Поскольку системы становятся распределенными, а сбои становятся менее предсказуемыми, наблюдаемость становится более ценной.
Что такое OpenTelemetry?
Это стандарт с открытым исходным кодом и набор инструментов для создания и экспорта журналов, метрик и трассировок, поэтому вы не привязаны к агенту одного поставщика.
Каковы четыре золотых сигнала?
Это задержка, трафик, ошибки и насыщенность. Руководство Google по SRE рекомендует использовать их в качестве отправной точки для мониторинга систем, с которыми работают пользователи.
Продолжайте учиться
Нужна помощь с тестированием, WordPress или SEO?
Мы помогаем командам выпускать лучшее программное обеспечение и развивать свои сайты. Расскажите нам, над чем вы работаете, и мы предложим четкий следующий шаг.
Больше руководств по тестирование, искусственный интеллект и современные разработки
Понравилась эта статья? Выберите тему и сразу приступайте к нашим новейшим руководствам.
Объяснение галлюцинаций искусственного интеллекта: почему языковые модели все выдумывают и как их уменьшить
Галлюцинации ИИ объяснили: что это такое, почему языковые модели их создают, распространенные типы, как уменьшить их с помощью заземления и подсказо…
Читать статью →DevOpsОбъяснение переменных среды: файлы .env, секреты и правильно выполненная конфигурация
Переменные среды объясняются на примерах Python, которые мы запускали: их чтение и установка, почему каждое значение является строкой, файлы .env, н…
Читать статью →Разработка ПООбъяснение ограничения скорости API: алгоритмы, заголовки и обработка ошибок 429
Ограничение скорости API объясняется с помощью проведенного нами моделирования: сегмент токенов, фиксированное окно, скользящее окно, 429 ответов, з…
Читать статью →Автоматизация тестированияИздевательство в Python: unittest.mock, патч и ошибки, из-за которых тесты лгут
Издевательство на Python с помощью unittest.mock, протестировано: Mock и return_value, Side_effect, исправление использования имени, спецификация и …
Читать статью →Тестирование ПООбъяснение покрытия кода: покрытие линий или ветвей и что на самом деле означает 100%
Покрытие кода объяснено с помощью реального запуска покрытия.py: покрытие строк, ветвей и условий, чтение отчета, почему 100%-ное покрытие все еще м…
Читать статью →Базы данных и SQLDELETE, TRUNCATE и DROP в SQL: различия, откат и когда использовать каждый из них
Объяснение DELETE, TRUNCATE и DROP на примере протестированного SQL: что каждый из них удаляет, откат, триггеры, сброс идентификаторов, скорость и ч…
Читать статью →Базы данных и SQLОбъяснение представлений SQL: создавайте, используйте и избегайте ловушек, с примерами
Представления SQL, объясненные с помощью запросов, которые мы выполняли: создание представления, результаты в реальном времени, скрытие столбцов, пр…
Читать статью →Разработка ПОИнтерфейс TypeScript и тип: реальные различия, протестированные с помощью компилятора
Интерфейс TypeScript против типа, проверенный реальным компилятором: что могут делать оба, что может делать только один, слияние объявлений, расшире…
Читать статью →Разработка ПООбъяснение Python *args и **kwargs: гибкие функции с понятными примерами
Python *args и **kwargs, объясненные с помощью кода, который мы запускали: упаковка и распаковка, порядок параметров, аргументы только по ключевым с…
Читать статью →Разработка ПОЛямбда-функции Python: синтаксис, реальное использование и когда их не следует использовать
Лямбда-функции Python, объясненные с помощью кода, который мы запускали: синтаксис, сортировка с помощью ключа, карты и фильтра, замыкания, ловушка …
Читать статью →Искусственный интеллектЧто такое ИИ-агенты? Как они работают: можно запустить простой цикл агента
Что такое агенты ИИ? Простое руководство по циклу агента, инструментам, памяти и ограничениям, с небольшим циклом Python, который мы запустили, реал…
Читать статью →DevOpsМониторинг и наблюдаемость: реальная разница с журналами, метриками и трассировками
Объяснение мониторинга и наблюдаемости: известные и неизвестные сбои, журналы, метрики и трассировки, пошаговое руководство по инцидентам при оформл…
Читать статью →DevOpsDocker Volumes против Bind Mounts: правильное сохранение данных контейнера
Объяснение томов Docker и монтирования привязки: почему исчезают данные контейнера, именованные тома, монтирование привязки, tmpfs, примеры создания…
Читать статью →Автоматизация тестированияTDD против BDD: ключевые различия, одна функция, созданная для обоих способов, и когда использовать каждый
TDD и BDD объясняются с помощью одной функции скидки, созданной в обоих направлениях: красно-зеленый рефакторинг с кодом, который мы запускали, сцен…
Читать статью →Разработка ПОGit merge vs rebase: отличия, примеры и когда что использовать
Git merge vs rebase с реальным выводом log, сравнительной таблицей, золотым правилом rebase и безопасным рабочим процессом для команды.
Читать статью →Разработка ПОГенераторы списков в Python: синтаксис, примеры и когда их избегать
Генераторы списков в Python: синтаксис, фильтры, if-else, вложенные циклы, измеренное время и случаи, когда обычный цикл for лучше.
Читать статью →Базы данных и SQLSQL JOIN: объяснение с примерами (Inner, Left, Right, Full)
Разберите SQL JOIN шаг за шагом на примерах таблиц и запросов: INNER, LEFT, RIGHT, FULL, CROSS и SELF, а также частые ошибки и советы по производите…
Читать статью →