OpenTelemetry (OTel) — это проект с открытым исходным кодом, направленный на предоставление независимого от поставщика стандарта для сбора, обработки и экспорта телеметрических данных в распределённых системах, таких как архитектуры микросервисов. Он помогает разработчикам проще анализировать производительность и поведение программного обеспечения, что облегчает диагностику и устранение проблем в приложениях.
Термин | Объяснение |
---|---|
Trace | Данные, отправляемые на OTel Server, представляющие собой набор связанных событий или операций, используемых для отслеживания потока запросов в распределённых системах; каждый Trace состоит из нескольких Spans. |
Span | Независимая операция или событие внутри Trace, включающая время начала, продолжительность и другую релевантную информацию. |
OTel Server | Сервер OTel, способный принимать и хранить данные Trace, например Jaeger, Prometheus и др. |
Jaeger | Система распределённого трассирования с открытым исходным кодом, используемая для мониторинга и отладки архитектур микросервисов, поддерживающая интеграцию с OpenTelemetry. |
Attributes | Пары ключ-значение, прикреплённые к Trace или Span для предоставления дополнительной контекстной информации. Включают Resource Attributes и Span Attributes; см. Attributes для подробностей. |
Sampler | Компонент стратегии, определяющий, следует ли сэмплировать и отправлять Trace. Можно настроить различные стратегии сэмплирования, например полное сэмплирование, пропорциональное и др. |
ALB (Another Load Balancer) | Программное или аппаратное устройство, распределяющее сетевые запросы между доступными узлами в кластере; балансировщик нагрузки (ALB), используемый на платформе, является программным балансировщиком уровня 7, который можно настроить для мониторинга трафика с помощью OTel. ALB поддерживает отправку Trace на указанный Collector и позволяет использовать различные стратегии сэмплирования; также поддерживает настройку отправки Trace на уровне Ingress. |
FT (Frontend) | Конфигурация порта для ALB, задающая настройки на уровне порта. |
Rule | Правила маршрутизации на порту (FT), используемые для сопоставления конкретных маршрутов. |
HotROD (Rides on Demand) | Пример приложения, предоставляемый Jaeger для демонстрации использования распределённого трассирования; подробности см. в Hot R.O.D. - Rides on Demand. |
hotrod-with-proxy | Указывает адреса внутренних микросервисов HotROD через переменные окружения; подробности см. в hotrod-with-proxy. |
Убедитесь, что существует работоспособный ALB: Создайте или используйте существующий ALB, имя которого в данном документе заменено на <otel-alb>
. Инструкции по созданию ALB см. в разделе Creating Load Balancer.
Убедитесь, что имеется адрес сервера отчётов данных OTel: Этот адрес далее будет называться <jaeger-server>
.
На Master-узле кластера с помощью CLI выполните команду для редактирования конфигурации ALB.
Добавьте следующие поля в раздел spec.config
.
Пример готовой конфигурации:
Выполните команду для сохранения изменений. После обновления ALB по умолчанию будет включён OpenTelemetry, и вся информация о Trace запросов будет отправляться на Jaeger Server.
Включение или отключение OTel на Ingress
Настройка включения или отключения OTel на Ingress позволяет лучше контролировать и отлаживать поток запросов приложений, выявляя узкие места производительности или ошибки, отслеживая запросы при их прохождении между различными сервисами.
Процедура
Добавьте следующую конфигурацию в поле metadata.annotations Ingress:
Объяснение параметра:
true
контроллер Ingress включает функциональность OpenTelemetry при обработке запросов через этот Ingress, то есть информация о Trace запросов будет собираться и отправляться. При значении false
или отсутствии этой аннотации сбор и отправка Trace не выполняются.Включение или отключение доверия OTel на Ingress
OTel Trust определяет, доверяет ли Ingress и использует ли Trace информацию (например, trace ID) из входящих запросов.
Процедура
Добавьте следующую конфигурацию в поле metadata.annotations Ingress:
Объяснение параметра:
true
Ingress продолжает использовать уже существующую Trace информацию, что помогает сохранять согласованность в межсервисном трассировании, позволяя полностью отслеживать и анализировать всю цепочку запросов в системе распределённого трассирования. При значении false
для запроса генерируется новая информация трассировки, что может привести к тому, что запрос будет рассматриваться как часть новой цепочки трассировки после прохождения через Ingress, прерывая непрерывность межсервисного трассирования.Добавление различных конфигураций OTel на Ingress
Эта настройка позволяет кастомизировать поведение OTel и метод экспорта данных для разных ресурсов Ingress, обеспечивая тонкий контроль над стратегией трассирования или целями каждого сервиса.
Процедура
Добавьте следующую конфигурацию в поле metadata.annotations Ingress:
Объяснение параметров:
Ниже приведена полная структура конфигурации OTel, которая может использоваться для определения включения и использования функций OTel в приложениях.
На Master-узле кластера с помощью CLI выполните команду для получения полной структуры конфигурации OTel.
Результат:
Объяснение параметров:
Параметр | Описание |
---|---|
otel.enable | Включение функциональности OTel. |
exporter.collector.address | Адрес сервера отчётов OTel, поддерживает протоколы http/https и доменные имена. |
flags.hide_upstream_attrs | Отчёт об информации о правилах upstream. |
flag.notrust_incoming_span | Доверие и использование Trace информации OTel (например, trace ID) из входящих запросов. |
flags.report_http_request_header | Отчёт заголовков HTTP-запроса. |
flags.report_http_response_header | Отчёт заголовков HTTP-ответа. |
sampler.name | Название стратегии сэмплирования; подробности см. в разделе Sampling Strategies. |
sampler.options.fraction | Доля сэмплирования. |
sampler.options.parent_name | Родительская стратегия для стратегий parent_base. |
По умолчанию, если в 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.
Параметр | Объяснение |
---|---|
always on | Всегда отправлять все данные трассировки. |
always off | Никогда не отправлять данные трассировки. |
traceid-ratio | Решение об отправке принимается на основе traceid . Формат traceparent — xx-traceid-xx-flag , где первые 16 символов traceid представляют 32-битное шестнадцатеричное число. Если это число меньше fraction , умноженного на 4294967295 (то есть (2^32-1)), данные отправляются. |
parent-base | Решение об отправке принимается на основе флага в traceparent запроса. При флаге 01 данные отправляются; например: curl -v "http://$ALB_IP/" -H 'traceparent: 00-xx-xx-01' ; при флаге 02 данные не отправляются; например: curl -v "http://$ALB_IP/" -H 'traceparent: 00-xx-xx-02' . |
Resource Attributes
Эти атрибуты отправляются по умолчанию.
Параметр | Описание |
---|---|
hostname | Имя хоста Pod ALB |
service.name | Имя ALB |
service.namespace | Пространство имён, где расположен ALB |
service.type | По умолчанию ALB |
service.instance.id | Имя Pod ALB |
Span Attributes
Атрибуты, отправляемые по умолчанию:
Параметр | Описание |
---|---|
http.status_code | Код состояния |
http.request.resend_count | Количество повторных попыток |
alb.rule.rule_name | Имя правила, с которым совпал этот запрос |
alb.rule.source_type | Тип правила, с которым совпал запрос, в настоящее время только Ingress |
alb.rule.source_name | Имя Ingress |
alb.rule.source_ns | Пространство имён, где расположен Ingress |
Атрибуты, отправляемые по умолчанию, но которые можно исключить, изменяя поле flag.hide_upstream_attrs:
Параметр | Описание |
---|---|
alb.upstream.svc_name | Имя Service (внутреннего маршрута), на который перенаправляется трафик |
alb.upstream.svc_ns | Пространство имён Service (внутреннего маршрута), на который перенаправляется трафик |
alb.upstream.peer | IP-адрес и порт Pod, на который перенаправляется трафик |
Атрибуты, не отправляемые по умолчанию, но которые можно включить, изменяя поле flag.report_http_request_header:
Параметр | Описание |
---|---|
**http.request.header.<header>** | Заголовок запроса |
Атрибуты, не отправляемые по умолчанию, но которые можно включить, изменяя поле flag.report_http_response_header:
Параметр | Описание |
---|---|
**http.response.header.<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, чтобы просмотреть результаты.