Наблюдаемость
Наблюдаемость — это свойство системы, позволяющее внешнему наблюдателю (человеку-оператору, мониторинговой системе или алгоритму) делать выводы о её внутреннем состоянии на основе анализа внешних выходных данных (логов, метрик, трассировок, событий). В контексте информационных технологий и DevOps наблюдаемость является ключевым принципом для управления сложными распределёнными системами, микросервисными архитектурами и облачными инфраструктурами.
История возникновения и развития
Термин «наблюдаемость» (observability) был заимствован из теории автоматического управления и математической теории систем. В 1960-х годах американский математик Рудольф Калман ввёл понятие наблюдаемости как критерия, определяющего, можно ли восстановить вектор состояния динамической системы по известным входным и выходным сигналам. В классической теории управления система считается наблюдаемой, если по её выходным данным за конечный интервал времени можно однозначно определить все её внутренние переменные.
В сферу программной инженерии и эксплуатации IT-систем термин проник в начале 2010-х годов вместе с ростом популярности микросервисной архитектуры, контейнеризации и облачных вычислений. Традиционные методы мониторинга (мониторинг на основе чёрных ящиков, проверка доступности сервисов по протоколу ICMP или HTTP) перестали быть достаточными для понимания поведения сложных распределённых приложений. В 2015—2017 годах концепция наблюдаемости была популяризирована сообществом DevOps, в частности компаниями Honeycomb, Lightstep и New Relic, а также книгами и докладами инженеров из Twitter, Uber и Netflix.
Отличие наблюдаемости от мониторинга
Наблюдаемость и мониторинг часто путают, однако между ними существует принципиальное различие:
- Мониторинг — это процесс сбора и отображения заранее определённых метрик (например, загрузка CPU, количество запросов в секунду, время ответа) и проверка их соответствия заданным порогам. Мониторинг отвечает на вопрос «что сломалось?» и опирается на известные сценарии отказов.
- Наблюдаемость — это свойство системы, позволяющее задавать произвольные вопросы о её поведении без необходимости заранее знать, какие именно вопросы возникнут. Наблюдаемость отвечает на вопрос «почему это произошло?» и позволяет исследовать неизвестные ранее аномалии.
Таким образом, наблюдаемость является более широким понятием: мониторинг может быть частью наблюдаемой системы, но наблюдаемость требует дополнительных инструментов и практик для сбора контекстно-богатых данных.
Основные компоненты наблюдаемости
В современной практике наблюдаемость принято описывать через три столпа (three pillars of observability), хотя некоторые авторы критикуют эту модель за излишнюю упрощённость.
Логи (Logs)
Логи представляют собой записи событий, происходящих в системе. Каждая запись содержит временную метку, уровень важности (info, warning, error) и текстовое сообщение. Логи бывают структурированными (формат JSON) и неструктурированными (простой текст). В наблюдаемых системах логи обычно централизуются с помощью таких инструментов, как Elasticsearch, Loki или Splunk.
Метрики (Metrics)
Метрики — это числовые показатели, измеряемые в определённые моменты времени. Они делятся на:
- Счётчики (counters) — накапливаемые значения (например, количество обработанных запросов);
- Датчики (gauges) — мгновенные значения (например, текущее количество активных соединений);
- Гистограммы (histograms) — распределение значений по интервалам (например, время ответа сервера).
Для хранения и визуализации метрик используются системы вроде Prometheus, Graphite, InfluxDB.
Трассировки (Traces)
Трассировки (или распределённая трассировка) позволяют отслеживать путь одного запроса через множество сервисов. Каждая трассировка состоит из спанов (spans) — единиц работы, имеющих идентификатор родительского спана, время начала и длительность. Трассировки дают возможность увидеть, какой именно сервис или вызов стал причиной замедления или ошибки. Популярные инструменты: Jaeger, Zipkin, OpenTelemetry.
Инструменты и практики
OpenTelemetry
OpenTelemetry (OTel) — это открытый стандарт и набор библиотек для сбора телеметрии (логов, метрик и трассировок) из приложений. Он стал фактическим стандартом в индустрии, поддерживается большинством облачных провайдеров и платформ мониторинга. OpenTelemetry предоставляет единый API для инструментирования кода, независимо от языка программирования.
Service Level Objectives (SLO)
Наблюдаемость тесно связана с практикой управления уровнем обслуживания. SLO — это целевые показатели надёжности сервиса (например, «99,9% запросов должны выполняться быстрее 200 мс»). Наблюдаемость позволяет измерять фактические значения SLO и выявлять моменты, когда сервис приближается к нарушению соглашения.
Анализ первопричин (Root Cause Analysis)
Одно из главных применений наблюдаемости — ускорение поиска первопричин инцидентов. С помощью трассировок и структурированных логов инженеры могут за считанные минуты определить, какой именно компонент системы вызвал сбой, не перебирая гипотезы вручную.
Критика и ограничения
Концепция наблюдаемости подвергается критике по нескольким направлениям:
- Избыточность данных. Сбор всех логов, метрик и трассировок может привести к огромным объёмам хранимой информации, затраты на хранение и обработку которой могут превысить пользу от неё. Требуется баланс между полнотой данных и стоимостью инфраструктуры.
- Сложность внедрения. Для достижения полной наблюдаемости необходимо инструментировать каждую часть системы, что требует значительных усилий разработчиков и изменения архитектуры приложений.
- Иллюзия всеведения. Наличие большого количества данных не гарантирует их правильной интерпретации. Без должной квалификации команды наблюдаемость может приводить к ложным выводам и игнорированию реальных проблем.
Применение в различных отраслях
Хотя термин наиболее распространён в IT, принципы наблюдаемости применяются и в других областях:
- Промышленность. Наблюдаемость производственных линий с помощью датчиков и SCADA-систем позволяет предсказывать отказы оборудования.
- Транспорт. Системы управления воздушным движением и железнодорожные диспетчерские центры используют наблюдаемость для контроля состояния инфраструктуры.
- Финансы. Банковские системы и торговые платформы применяют наблюдаемость для обнаружения мошеннических операций и сбоев в обработке транзакций.
Источники
- Kalman, R. E. (1960). «On the general theory of control systems». Proceedings of the First International Congress on Automatic Control.
- Majors, C., Fong-Jones, L., & Miranda, G. (2021). Observability Engineering. O'Reilly Media.
- OpenTelemetry Specification. (2023). OpenTelemetry Authors.
- Newman, S. (2019). Building Microservices: Designing Fine-Grained Systems. O'Reilly Media.
- SRE Workbook. (2018). Google.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →