Кишор Кумар Перумалсами и Эрик Чжоу

Что такое OpenTelemetry?

OpenTelemetry — это набор инструментов для создания данных телеметрии и управления ими. Его цель — стать полной системой телеметрии, подходящей для мониторинга современных распределенных систем на основе микросервисов.

Цель OpenTelemetry — максимизировать «наблюдаемость» системы. Это модное слово «наблюдаемость» в сообществе телеметрии относится к тому, насколько хорошо мы можем понять внутреннюю работу черного ящика, просто изучая его внешние выходные данные, а не его кодовую базу. В хорошо наблюдаемой системе мы сможем точно определить, где в распределенной системе произошел сбой, в чем заключается ошибка и как ее исправить, просто взглянув на данные телеметрии, а не на код.

Какие проблемы в системах машинного обучения решает OpenTelemetry?

Распределенные интеллектуальные (или) системы с поддержкой ИИ

С появлением надежной облачной инфраструктуры и надежных сетевых технологий с малой задержкой многие реальные приложения частично или полностью перешли в облако, и системы с поддержкой ИИ не являются исключением. Доля распределения задач зависит от характера приложения и целевой среды развертывания системы в производстве.

Существует 3 основных различных типа развертывания систем ИИ.

  • Локальный хостинг
  • Облачный хостинг
  • Гибридный подход

Каждый из вышеперечисленных вариантов имеет свои достоинства и недостатки, и компании, владеющие продуктом, часто принимают решение на основе требований и компромиссов между стоимостью, задержкой и производительностью.

Например. Siri использует глубокую нейронную сеть на устройстве для обнаружения «привет, Siri», но использует сервер Siri для обработки последующих голосовых команд.

Проблемы с распределенными интеллектуальными системами

Хотя распределенные интеллектуальные системы могут обеспечить баланс между производительностью, стоимостью и задержкой, они сталкиваются с рядом проблем, которые необходимо решить. В этой статье мы сосредоточимся на трудностях, возникающих при сборе телеметрии таких распределенных интеллектуальных систем.

Данные телеметрии часто собираются системами для оценки производительности системы и внесения итерационных изменений для развития систем по мере развития пользователей и пользовательской среды. Задача состоит в том, чтобы собрать данные телеметрии из источников и соединить их с правильным контекстом, чтобы сделать их пригодными для оценки.

Это именно та проблема, которую OpenTelemetry стремится решить, предоставляя стандартный набор API и SDK, а также дополнительный сборщик для сбора распределенных данных телеметрии. Огромным преимуществом является то, что он позволяет собирать данные телеметрии из разных компонентов системы, которые могут быть основаны на разных языках, платформах и развернуты на разных хостах.

Пример использования в сценарии потоковой передачи фильмов

Рассмотрим пример системы рекомендаций фильмов. В целях этого примера предположим, что существует более одного служебного вызова, который вызывается для обслуживания запроса на рекомендацию фильма.

Мы можем видеть распределенный характер приложения и то, как есть компоненты на облачном сервере и некоторые на устройстве пользователя (клиентское приложение). Один вызов службы проходит от клиентского приложения к различным службам на сервере. Различные биты информации могут быть собраны из каждой из служб для формирования записи данных телеметрии для одного сквозного вызова.

Пример реализации

Мы внедрили OpenTelemetry в простую систему рекомендаций фильмов, которая обслуживается во Flask. Запросы рекомендации фильмов для определенного идентификатора пользователя поступают в виде запросов GET. Сервер возвращает рекомендации фильмов.

Телеметрия была реализована с помощью инструментов распределенной трассировки, предоставляемых OpenTelemetry. Трассировка дает нам возможность автоматически получать метрики об удаленном запросе, когда он проходит через распределенную систему. Наша простая система рекомендации фильмов существовала только на одном узле и состояла только из одного микросервиса, но мы реализовали распределенную трассировку на этом чрезвычайно простом примере в качестве доказательства концепции.

Используемая нами настройка заключалась в том, чтобы вручную оснастить обработчик запросов приложения Flask трассировщиком OpenTelemetry. Трассировщик отправил данные телеметрии сборщику OpenTelemtry, работающему на том же компьютере, который затем отправил данные в визуализатор данных под названием logz.io. Это позволило нам визуализировать сквозную задержку запросов, как показано на следующем графике.

У нас был выбор между использованием автоматического инструментария OpenTelemetry для распределенной трассировки или ручного инструментария для распределенной трассировки. Хотя автоматическое инструментирование было чрезвычайно простым (нам даже не пришлось изменять код), оно не давало нам простого способа настроить телеметрию. В дополнение к информации о задержке и заголовках HTTP-запроса нам также нужна была информация о том, успешно ли модель машинного обучения вернула персонализированный список фильмов или вернула список фильмов по умолчанию. Для этого мы использовали ручное инструментирование, чтобы добавить события журнала в распределенную трассировку. В результате мы смогли измерить долю успешных персонализированных рекомендаций (около 1 из 400 запросов были персонализированы) и получить журналы, в которых точно говорилось, какие фильмы были рекомендованы и в каком количестве, как показано на следующем рисунке.

Сильные стороны OpenTelemetry

OpenTelemetry является открытым исходным кодом и полностью бесплатным. Это последняя технология, появившаяся в 2019 году как побочный продукт проекта Google и Cloud Native Computing Foundation (CNCF). Это плод нескольких лет общеотраслевого сотрудничества. Он пользуется общественной поддержкой и большим сообществом. Он активно поддерживается: по состоянию на март 2022 года в среднем 62 события GitHub в час. OpenTelemetry также не зависит от поставщика. Пользователи могут отправлять данные телеметрии практически на любую серверную часть для хранения, визуализации или анализа данных.

Он также предоставляет множество способов автоматического отслеживания многих популярных библиотек на разных языках. Для некоторых популярных веб-фреймворков, распределенных инструментов и ПО промежуточного слоя в OpenTelemetry есть пакеты, которые автоматически внедряют дескрипторы телеметрии в скомпилированный код, при этом разработчику вообще не нужно изменять код.

Ограничения OpenTelemetry

В настоящее время OpenTelemetry находится в бета-версии на нескольких языках, поэтому мы все еще ждем его первого общедоступного официального выпуска. Поскольку разработка инструментов идет так быстро, возможно, что новые версии выпускаются быстро, что приводит к устаревшим или устаревшим функциям.

OpenTelemetry также может быть слишком сложной для пользователей, у которых нет сложных распределенных систем для мониторинга и отслеживания. Пользователи также должны знать, что OpenTelemetry создает только данные телеметрии; он не хранит, не визуализирует и не анализирует данные телеметрии. Он отправляет телеметрию другим службам, таким как Prometheus, для выполнения этой работы.