Телеметрия — это данные, генерируемые системами и их поведением, включая трассы, метрики и логи.
OpenTelemetry — это фреймворк и набор инструментов для создания и управления телеметрическими данными, такими как трассы, метрики и логи. Важно, что OpenTelemetry не зависит от конкретного поставщика, то есть может работать с различными системами наблюдаемости, включая open-source инструменты, такие как Jaeger и Prometheus, а также коммерческие продукты.
Span — это базовый строительный блок распределённого трассирования, представляющий конкретную операцию или единицу работы. Каждый span фиксирует определённые действия в рамках запроса, помогая понять детали того, что происходило во время выполнения операции.
Span содержит имя, временные данные, структурированные сообщения логов и другие метаданные (атрибуты), которые вместе дают полную картину операции.
Trace фиксирует путь запроса (от приложения или конечного пользователя) по много-сервисной архитектуре (например, микросервисы и serverless-приложения).
Trace состоит из одного или нескольких span-ов. Первый span называется корневым (root span) и представляет весь жизненный цикл запроса от начала до конца. Дочерние span-ы под корневым span-ом предоставляют более детальную контекстную информацию о процессе запроса (или различных шагах, составляющих запрос).
Без трасс было бы довольно сложно определить коренную причину проблем с производительностью в распределённых системах. Трассы упрощают отладку и понимание распределённых систем, разбивая поток запросов через них.
Для обеспечения наблюдаемости система должна пройти процесс инструментирования: то есть код компонентов системы должен генерировать трассы, метрики и логи.
С помощью OpenTelemetry вы можете инструментировать свой код двумя основными способами:
Решения на основе кода обеспечивают более глубокое понимание и более богатые телеметрические данные изнутри вашего приложения. Вы можете генерировать телеметрию в приложении с помощью OpenTelemetry API, что является важным дополнением к телеметрии, создаваемой решениями без инструментирования кода.
Решения без инструментирования кода отлично подходят для быстрого старта или когда вы не можете изменить приложение, из которого нужно получить телеметрию. Они могут предоставлять богатые телеметрические данные через используемые библиотеки или среду выполнения. Другими словами, они передают информацию о событиях, происходящих на границах (Edges) приложения.
Эти два подхода могут использоваться одновременно.
OpenTelemetry Collector — это агент, не зависящий от поставщика, который может принимать, обрабатывать и экспортировать телеметрические данные. Он поддерживает приём телеметрии в различных форматах (например, OTLP, Jaeger, Prometheus и многих коммерческих/проприетарных инструментах) и отправку этих данных в один или несколько бекендов. Также поддерживается обработка и фильтрация телеметрии перед экспортом.
Подробнее см. Collector.
Jaeger — это open-source система распределённого трассирования. Она предназначена для мониторинга и диагностики сложных распределённых систем на основе микросервисной архитектуры, помогая разработчикам визуализировать трассы запросов, анализировать узкие места производительности и устранять аномалии. Jaeger совместим со стандартом OpenTracing (теперь частью OpenTelemetry), поддерживает несколько языков программирования и хранилищ данных, и является ключевым инструментом наблюдаемости в облачно-нативной среде.