Открыть сервис

Наблюдаемость

Наблюдаемость — это свойство системы, позволяющее внешнему наблюдателю (человеку-оператору, мониторинговой системе или алгоритму) делать выводы о её внутреннем состоянии на основе анализа внешних выходных данных (логов, метрик, трассировок, событий). В контексте информационных технологий и 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 →