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 см. в Deploy ALB.
Убедитесь, что имеется адрес сервера отчёта данных 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 | Отчёт заголовков запросов. |
flags.report_http_response_header | Отчёт заголовков ответов. |
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, чтобы просмотреть результаты.