OTel
OpenTelemetry (OTel) — это проект с открытым исходным кодом, направленный на предоставление независимого от поставщика стандарта для сбора, обработки и экспорта телеметрических данных в распределённых системах, таких как архитектуры микросервисов. Он помогает разработчикам проще анализировать производительность и поведение программного обеспечения, что облегчает диагностику и устранение проблем в приложениях.
Содержание
Терминология
Предварительные требования
-
Убедитесь, что существует работоспособный ALB: Создайте или используйте существующий ALB, имя которого в данном документе заменено на
<otel-alb>. Инструкции по созданию ALB см. в разделе Creating Load Balancer. -
Убедитесь, что имеется адрес сервера отчётов данных OTel: Этот адрес далее будет называться
<jaeger-server>.
Процедура
Обновление конфигурации ALB
-
На Master-узле кластера с помощью CLI выполните команду для редактирования конфигурации ALB.
-
Добавьте следующие поля в раздел
spec.config.Пример готовой конфигурации:
-
Выполните команду для сохранения изменений. После обновления ALB по умолчанию будет включён OpenTelemetry, и вся информация о Trace запросов будет отправляться на Jaeger Server.
Связанные операции
Настройка OTel в Ingress
-
Включение или отключение OTel на Ingress
Настройка включения или отключения OTel на Ingress позволяет лучше контролировать и отлаживать поток запросов приложений, выявляя узкие места производительности или ошибки, отслеживая запросы при их прохождении между различными сервисами.
Процедура
Добавьте следующую конфигурацию в поле metadata.annotations Ingress:
Объяснение параметра:
- nginx.ingress.kubernetes.io/enable-opentelemetry: При значении
trueконтроллер Ingress включает функциональность OpenTelemetry при обработке запросов через этот Ingress, то есть информация о Trace запросов будет собираться и отправляться. При значенииfalseили отсутствии этой аннотации сбор и отправка Trace не выполняются.
- nginx.ingress.kubernetes.io/enable-opentelemetry: При значении
-
Включение или отключение доверия OTel на Ingress
OTel Trust определяет, доверяет ли Ingress и использует ли Trace информацию (например, trace ID) из входящих запросов.
Процедура
Добавьте следующую конфигурацию в поле metadata.annotations Ingress:
Объяснение параметра:
- nginx.ingress.kubernetes.io/opentelemetry-trust-incoming-span: При значении
trueIngress продолжает использовать уже существующую Trace информацию, что помогает сохранять согласованность в межсервисном трассировании, позволяя полностью отслеживать и анализировать всю цепочку запросов в системе распределённого трассирования. При значенииfalseдля запроса генерируется новая информация трассировки, что может привести к тому, что запрос будет рассматриваться как часть новой цепочки трассировки после прохождения через Ingress, прерывая непрерывность межсервисного трассирования.
- nginx.ingress.kubernetes.io/opentelemetry-trust-incoming-span: При значении
-
Добавление различных конфигураций OTel на Ingress
Эта настройка позволяет кастомизировать поведение OTel и метод экспорта данных для разных ресурсов Ingress, обеспечивая тонкий контроль над стратегией трассирования или целями каждого сервиса.
Процедура
Добавьте следующую конфигурацию в поле metadata.annotations Ingress:
Объяснение параметров:
- exporter: Определяет, как собранные данные Trace отправляются в OTel Collector (сервер отчётов OTel).
- address: Адрес OTel Collector.
- request_timeout: Таймаут запроса.
Использование OTel в приложениях
Ниже приведена полная структура конфигурации OTel, которая может использоваться для определения включения и использования функций OTel в приложениях.
На Master-узле кластера с помощью CLI выполните команду для получения полной структуры конфигурации OTel.
Результат:
Объяснение параметров:
Наследование
По умолчанию, если в ALB настроены определённые параметры OTel, а FT не настроен, FT наследует параметры от ALB как собственные; то есть FT наследует конфигурацию ALB, а Rule может наследовать конфигурации как от ALB, так и от FT.
-
ALB: Конфигурация на уровне ALB обычно глобальная и по умолчанию. Здесь можно настроить глобальные параметры, например адреса Collector, которые будут унаследованы нижележащими FT и Rule.
-
FT: FT может наследовать конфигурации от ALB, то есть параметры OTel, не настроенные на FT, будут использоваться из ALB. При этом FT можно детализировать, например, выборочно включать или отключать OTel на FT без влияния на другие FT или глобальные настройки ALB.
-
Rule: Rule может наследовать конфигурации как от ALB, так и от FT. При этом Rule также можно детализировать, например, конкретное правило может не доверять входящей Trace информации OTel или изменять стратегии сэмплирования.
Процедура
Настройте поле spec.config.otel в YAML-файлах ALB, FT и Rule для добавления конфигураций, связанных с OTel.
Дополнительные сведения
Стратегии сэмплирования
Атрибуты
-
Resource Attributes
Эти атрибуты отправляются по умолчанию.
-
Span Attributes
-
Атрибуты, отправляемые по умолчанию:
-
Атрибуты, отправляемые по умолчанию, но которые можно исключить, изменяя поле flag.hide_upstream_attrs:
-
Атрибуты, не отправляемые по умолчанию, но которые можно включить, изменяя поле flag.report_http_request_header:
-
Атрибуты, не отправляемые по умолчанию, но которые можно включить, изменяя поле flag.report_http_response_header:
-
Пример конфигурации
Ниже приведена YAML-конфигурация, которая разворачивает ALB и использует Jaeger в качестве сервера OTel, с Hotrod-proxy в качестве демонстрационного бэкенда. Настройка правил Ingress позволяет при обращении клиентов к ALB направлять трафик на HotROD. Кроме того, взаимодействие между внутренними микросервисами HotROD также маршрутизируется через ALB.
-
Сохраните следующий YAML в файл с именем all.yaml.
-
В CLI выполните команду для развертывания Jaeger, ALB, HotROD и всех необходимых CR для тестирования.
-
Выполните команду для получения адреса доступа к Jaeger.
-
Выполните команду для получения адреса доступа к otel-alb.
-
Выполните команду для отправки запроса к HotROD через ALB. ALB при этом отправит Trace в Jaeger.
-
Откройте адрес доступа Jaeger, полученный в Шаге 3, чтобы просмотреть результаты.

