OTel
OpenTelemetry (OTel) — это проект с открытым исходным кодом, направленный на предоставление независимого от поставщика стандарта для сбора, обработки и экспорта телеметрических данных в распределённых системах, таких как архитектуры микросервисов. Он помогает разработчикам проще анализировать производительность и поведение программного обеспечения, что облегчает диагностику и устранение проблем в приложениях.
Содержание
ТерминологияПредварительные требованияПроцедураОбновление конфигурации ALBСвязанные операцииНастройка OTel в IngressИспользование OTel в приложенияхНаследованиеДополнительные сведенияСтратегии сэмплированияАтрибутыПример конфигурацииТерминология
Предварительные требования
-
Убедитесь, что существует работоспособный ALB: Создайте или используйте существующий ALB, имя которого в данном документе заменено на
<otel-alb>. Инструкции по созданию ALB см. в Deploy ALB. -
Убедитесь, что имеется адрес сервера отчёта данных 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, чтобы просмотреть результаты.

