OpenTelemetry Span Metrics Gateway: различия между версиями

Материал из Документация Ключ-АСТРОМ
Новая страница: «= OpenTelemetry Span Metrics Gateway = Расширение принимает трассировки по протоколу OTLP/HTTP, формирует из спанов метрики количества вызовов и продолжительности и при необходимости пересылает исходные трассировки в кластер Ключ-АСТРОМ. Расширение выполняется удалённ...»
 
[wiki-cd:ruscomtech-extensions:b0985a6744c086353b26ac217dfa652296b8c814]
 
Строка 1: Строка 1:
= OpenTelemetry Span Metrics Gateway =
= OpenTelemetry Span Metrics Gateway =


Расширение принимает трассировки по протоколу OTLP/HTTP, формирует из спанов метрики количества вызовов и продолжительности и при необходимости пересылает исходные трассировки в кластер Ключ-АСТРОМ.
Расширение версии <code>0.1.20</code> принимает трассировки по протоколу OTLP/HTTP, формирует из спанов метрики количества вызовов, продолжительности и числовых атрибутов и при необходимости пересылает исходные трассировки в кластер Ключ-АСТРОМ.


Расширение выполняется удалённо на сервере EEC.
Расширение выполняется удалённо на сервере EEC.
Строка 13: Строка 13:
* поддержка сжатия gzip;
* поддержка сжатия gzip;
* создание метрик количества и продолжительности спанов;
* создание метрик количества и продолжительности спанов;
* агрегация выбранных числовых атрибутов спанов;
* добавление атрибутов спанов в измерения метрик;
* добавление атрибутов спанов в измерения метрик;
* ограничение количества временных рядов;
* ограничение количества временных рядов;
Строка 42: Строка 43:
== Требования ==
== Требования ==


* Ключ-АСТРОМ <code>1.300+</code>.
* АктивныйШлюз с включённым EEC и средой Python не ниже <code>3.10</code> в составе EEC. Локальное выполнение на ЕдиномАгенте не поддерживается; зависимости поставляются в пакете расширения.
* На выбранном сервере EEC должен быть свободен TCP-порт для приёма OTLP-запросов.
* На выбранном сервере EEC должен быть свободен TCP-порт для приёма OTLP-запросов.
* Приложения или OpenTelemetry Collector должны иметь сетевой доступ к серверу EEC.
* Приложения или OpenTelemetry Collector должны иметь сетевой доступ к серверу EEC.
Строка 49: Строка 52:


Стандартный порт OTLP/HTTP — <code>4318</code>. Если он уже используется другим сервисом, укажите свободный порт.
Стандартный порт OTLP/HTTP — <code>4318</code>. Если он уже используется другим сервисом, укажите свободный порт.
Входящий приёмник использует HTTP, а Bearer-токен сам по себе не шифрует соединение. Ограничьте доступ к порту доверенными отправителями; если требуется шифрование на входе, используйте защищённый канал или TLS на обратном прокси. Параметр проверки TLS в расширении относится к исходящей пересылке, а не к приёмнику.


== Установка расширения ==
== Установка расширения ==
Строка 57: Строка 62:
# Откройте расширение <code>ru.ruscomtech.otel-span-metrics-gateway</code>.
# Откройте расширение <code>ru.ruscomtech.otel-span-metrics-gateway</code>.
# Добавьте конфигурацию мониторинга.
# Добавьте конфигурацию мониторинга.
# Выберите группу EEC, на которой должен работать OTLP-шлюз.
# Выберите группу АктивныхШлюзов с EEC, на которой должен работать OTLP-шлюз.
# Добавьте конечную точку шлюза и заполните параметры.
# Добавьте конечную точку шлюза и заполните параметры.
# Сохраните и активируйте конфигурацию.
# Сохраните и активируйте конфигурацию.
Строка 65: Строка 70:
== Настройка шлюза ==
== Настройка шлюза ==


{| class="wikitable"
* '''Адрес прослушивания''' (<code>listen_address</code>) — IP-адрес интерфейса узла выполнения. По умолчанию <code>0.0.0.0</code>, то есть все интерфейсы.
! Параметр
* '''Порт прослушивания''' (<code>listen_port</code>) — TCP-порт OTLP/HTTP, по умолчанию <code>4318</code>.
! Значение по умолчанию
* '''Пересылать трейсы в кластер''' (<code>forward_traces</code>) — по умолчанию включено. При выключении создаются только метрики.
! Описание
* '''URL для OTLP-трейсов кластера''' (<code>forward_url</code>) — полный адрес OTLP API с путём <code>/v1/traces</code>; обязателен при включённой пересылке.
|-
* '''API-токен кластера''' (<code>forward_api_token</code>) — секретное поле для токена с разрешением <code>openTelemetryTrace.ingest</code>, если целевой endpoint требует аутентификации.
| Адрес прослушивания
* '''Проверять TLS-сертификат кластера''' (<code>verify_forward_tls</code>) — по умолчанию включено. Не отключайте проверку в рабочей среде.
| <code>0.0.0.0</code>
* '''Bearer-токен приёмника''' (<code>receiver_bearer_token</code>) — необязательный секрет для входящих запросов. Отправители должны передавать <code>Authorization: Bearer &lt;token&gt;</code>.
| IP-адрес интерфейса EEC. Значение <code>0.0.0.0</code> разрешает подключения на всех интерфейсах.
* '''Атрибуты спана для dimensions''' (<code>dimension_attributes</code>) — список ключей через запятую, по умолчанию <code>peer.service,net.peer.ip</code>.
|-
* '''Числовые атрибуты спана''' (<code>numeric_attributes</code>) — до 20 ключей через запятую для агрегации числовых значений. По умолчанию поле пустое и сбор отключён.
| Порт прослушивания
* '''Максимальное количество временных рядов''' (<code>max_series</code>) — предел уникальных комбинаций измерений за интервал отправки, по умолчанию <code>2000</code>, диапазон <code>100–20000</code>.
| <code>4318</code>
* '''Максимальный размер распакованного OTLP-запроса''' (<code>max_request_mib</code>) — по умолчанию <code>8 MiB</code>, диапазон <code>1–64 MiB</code>.
| TCP-порт для входящих запросов OTLP/HTTP.
* '''Рабочие потоки приёмника''' (<code>worker_threads</code>) — число параллельно обрабатываемых запросов, по умолчанию <code>4</code>.
|-
* '''Размер очереди запросов''' (<code>request_queue_size</code>) — число запросов в ожидании свободного потока, по умолчанию <code>16</code>.
| Пересылать трейсы в кластер
* '''Интервал отправки метрик''' (<code>flush_interval_seconds</code>) — по умолчанию <code>15</code> секунд, диапазон <code>5–300</code>.
| Включено
* '''Тайм-аут пересылки трейсов''' (<code>forward_timeout_seconds</code>) — ожидание ответа OTLP API, по умолчанию <code>10</code> секунд; используется только при включённой пересылке.
| При включении шлюз создаёт метрики и пересылает исходные трассировки. При выключении создаются только метрики.
|-
| URL для OTLP-трейсов кластера
| —
| Полный адрес OTLP API, заканчивающийся на <code>/v1/traces</code>.
|-
| API-токен кластера
| —
| Токен с разрешением <code>openTelemetryTrace.ingest</code>.
|-
| Проверять TLS-сертификат
| Включено
| Проверка сертификата при пересылке трассировок. Отключать рекомендуется только при тестировании.
|-
| Bearer-токен приёмника
| —
| Необязательный токен для защиты входящего OTLP endpoint.
|-
| Атрибуты спана для dimensions
| <code>peer.service,net.peer.ip</code>
| Атрибуты спана, которые необходимо добавить в измерения метрик.
|-
| Максимальное количество временных рядов
| <code>2000</code>
| Ограничение количества уникальных комбинаций измерений за один интервал отправки.
|-
| Максимальный размер запроса
| <code>8 MiB</code>
| Максимальный размер OTLP-запроса после распаковки.
|-
| Рабочие потоки
| <code>4</code>
| Количество запросов, которые могут обрабатываться параллельно.
|-
| Размер очереди запросов
| <code>16</code>
| Количество запросов, ожидающих свободный рабочий поток.
|-
| Интервал отправки метрик
| <code>15 секунд</code>
| Период агрегации и отправки метрик в Ключ-АСТРОМ.
|-
| Тайм-аут пересылки трассировок
| <code>10 секунд</code>
| Максимальное время ожидания ответа от OTLP API.
|}


Пример URL для пересылки трассировок через Environment ActiveGate:
Пример URL для пересылки трассировок через АктивныйШлюз окружения:


<pre>
<pre>
Строка 137: Строка 96:
== Настройка отправителя OTLP ==
== Настройка отправителя OTLP ==


Пример переменных окружения приложения или OpenTelemetry Collector:
Пример переменных окружения приложения с OpenTelemetry SDK:


<pre>
<pre>
Строка 172: Строка 131:
exporters:
exporters:
   otlp_http/span_metrics_gateway:
   otlp_http/span_metrics_gateway:
     traces_endpoint: http://eec.example.local:4318
     traces_endpoint: http://eec.example.local:4318/v1/traces
     encoding: proto
     encoding: proto
     compression: gzip
     compression: gzip
Строка 208: Строка 167:
exporters:
exporters:
   otlphttp/span_metrics_gateway:
   otlphttp/span_metrics_gateway:
     traces_endpoint: http://eec.example.local:4318
     traces_endpoint: http://eec.example.local:4318/v1/traces
</pre>
</pre>
В <code>traces_endpoint</code> указывается полный путь <code>/v1/traces</code>; в отличие от общего <code>endpoint</code>, этот параметр не добавляет путь автоматически. См. [https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlphttpexporter документацию OTLP HTTP exporter].


После изменения конфигурации перезапустите OpenTelemetry Collector и проверьте появление метрики <code>otel.span.gateway.requests</code>.
После изменения конфигурации перезапустите OpenTelemetry Collector и проверьте появление метрики <code>otel.span.gateway.requests</code>.
Строка 289: Строка 250:


Количество таких спанов отображается в метрике <code>otel.span.gateway.overflow_spans</code>.
Количество таких спанов отображается в метрике <code>otel.span.gateway.overflow_spans</code>.
== Сбор числовых атрибутов ==
В поле '''Числовые атрибуты спана''' (<code>numeric_attributes</code>) перечислите до 20 точных ключей, например:
<pre>
order.amount,items.count
</pre>
Для каждого ключа расширение отправляет <code>otel.span.attribute.value</code> с измерением <code>attribute.key</code> и агрегатами минимума, максимума, суммы и количества значений за интервал. Значения сохраняют исходный масштаб: автоматического пересчёта единиц измерения нет.
* Поддерживаются числа и строки, которые можно преобразовать в конечное число. Логические значения не считаются числами.
* Подстановка <code>*</code> в этом поле не поддерживается: ключи задаются явно.
* Выбранные числовые ключи исключаются из обычных измерений, в том числе при <code>dimension_attributes=*</code>. Это предотвращает создание отдельного ряда для каждого числового значения.
* Resource attributes автоматически не читаются. При необходимости предварительно скопируйте их в атрибуты спана на стороне Collector.
* Некорректные значения, <code>NaN</code>, бесконечность и значения, вызывающие переполнение суммы, пропускаются и учитываются в <code>otel.span.gateway.invalid_attribute_values</code> по <code>attribute.key</code>.


== Собираемые метрики ==
== Собираемые метрики ==


{| class="wikitable"
* <code>otel.span.calls</code> — количество успешно обработанных спанов с разделением по имени спана и настроенным атрибутам.
! Метрика
* <code>otel.span.duration</code> — продолжительность спанов в миллисекундах.
! Описание
* <code>otel.span.attribute.value</code> — минимум, максимум, сумма и количество выбранных числовых атрибутов; ключ атрибута указан в <code>attribute.key</code>.
|-
* <code>otel.span.gateway.invalid_attribute_values</code> — количество пропущенных некорректных числовых значений по <code>attribute.key</code>.
| <code>otel.span.calls</code>
* <code>otel.span.gateway.requests</code> — количество успешно обработанных OTLP-запросов.
| Количество успешно обработанных спанов. Метрика разделяется по имени спана и настроенным атрибутам.
* <code>otel.span.gateway.spans</code> — количество спанов в обработанных запросах.
|-
* <code>otel.span.gateway.rejected_requests</code> — количество отклонённых запросов с причиной в <code>reason</code>.
| <code>otel.span.duration</code>
* <code>otel.span.gateway.forward_errors</code> — количество ошибок пересылки трассировок.
| Продолжительность обработанных спанов в миллисекундах.
* <code>otel.span.gateway.active_series</code> — количество активных временных рядов за интервал агрегации.
|-
* <code>otel.span.gateway.overflow_spans</code> — количество спанов в overflow-ряде из-за ограничения кардинальности.
| <code>otel.span.gateway.requests</code>
| Количество успешно обработанных OTLP-запросов.
|-
| <code>otel.span.gateway.spans</code>
| Общее количество спанов в обработанных запросах.
|-
| <code>otel.span.gateway.rejected_requests</code>
| Количество отклонённых запросов с измерением <code>reason</code>.
|-
| <code>otel.span.gateway.forward_errors</code>
| Количество ошибок пересылки трассировок в кластер.
|-
| <code>otel.span.gateway.active_series</code>
| Количество активных временных рядов в текущем интервале агрегации.
|-
| <code>otel.span.gateway.overflow_spans</code>
| Количество спанов, объединённых в overflow-ряд из-за ограничения кардинальности.
|}


Все метрики входят в набор функций <code>default</code>.
Все метрики входят в набор функций <code>default</code>.
Строка 345: Строка 304:
* отсутствие ошибок <code>otel.span.gateway.forward_errors</code>;
* отсутствие ошибок <code>otel.span.gateway.forward_errors</code>;
* значение <code>otel.span.gateway.overflow_spans</code>.
* значение <code>otel.span.gateway.overflow_spans</code>.
Если настроен <code>numeric_attributes</code>, дополнительно проверьте <code>otel.span.attribute.value</code> по нужному <code>attribute.key</code> и отсутствие роста <code>otel.span.gateway.invalid_attribute_values</code>.


Код ответа <code>401</code> указывает на ошибку Bearer-токена, <code>413</code> — на превышение размера запроса, <code>415</code> — на неподдерживаемый формат, а <code>503</code> — на переполнение очереди шлюза.
Код ответа <code>401</code> указывает на ошибку Bearer-токена, <code>413</code> — на превышение размера запроса, <code>415</code> — на неподдерживаемый формат, а <code>503</code> — на переполнение очереди шлюза.
Строка 350: Строка 311:
== История изменений ==
== История изменений ==


{| class="wikitable"
=== Версия 0.1.20 ===
! Версия
 
! Изменения
* Добавлен параметр <code>numeric_attributes</code> для сбора до 20 выбранных числовых атрибутов спана.
|-
* Добавлена метрика <code>otel.span.attribute.value</code> с агрегатами минимума, максимума, суммы и количества значений и измерением <code>attribute.key</code>.
| 0.1.19
* Числовые атрибуты исключены из измерений, включая режим <code>*</code>.
|
* Добавлена метрика <code>otel.span.gateway.invalid_attribute_values</code> для пропущенных некорректных значений и переполнения суммы.
 
=== Версия 0.1.19 ===
 
* Используется идентификатор <code>ru.ruscomtech.otel-span-metrics-gateway</code>.
* Используется идентификатор <code>ru.ruscomtech.otel-span-metrics-gateway</code>.
* Добавлен шлюз для преобразования OTLP-спанов в метрики количества вызовов и продолжительности.
* Добавлен шлюз для преобразования OTLP-спанов в метрики количества вызовов и продолжительности.
* Поддержаны режимы «метрики и трассировки» и «только метрики».
* Поддержаны режимы «метрики и трассировки» и «только метрики».
* Добавлены ограничения размера запросов, очереди обработки и количества временных рядов.
* Добавлены ограничения размера запросов, очереди обработки и количества временных рядов.
|}

Текущая версия от 23:24, 22 октября 2026

OpenTelemetry Span Metrics Gateway

Расширение версии 0.1.20 принимает трассировки по протоколу OTLP/HTTP, формирует из спанов метрики количества вызовов, продолжительности и числовых атрибутов и при необходимости пересылает исходные трассировки в кластер Ключ-АСТРОМ.

Расширение выполняется удалённо на сервере EEC.

Идентификатор расширения: ru.ruscomtech.otel-span-metrics-gateway

Возможности

  • приём трассировок через OTLP/HTTP;
  • поддержка бинарного формата protobuf;
  • поддержка сжатия gzip;
  • создание метрик количества и продолжительности спанов;
  • агрегация выбранных числовых атрибутов спанов;
  • добавление атрибутов спанов в измерения метрик;
  • ограничение количества временных рядов;
  • защита входящего endpoint с помощью Bearer-токена;
  • пересылка исходных трассировок в кластер Ключ-АСТРОМ;
  • контроль отклонённых запросов и ошибок пересылки.

Схема работы

Приложение или OpenTelemetry Collector
        |
        | OTLP/HTTP protobuf
        v
OpenTelemetry Span Metrics Gateway на EEC
        |
        +-- метрики спанов --> Ключ-АСТРОМ
        |
        +-- исходные трассировки --> OTLP API Ключ-АСТРОМ

Шлюз принимает трассировки по следующим путям:

  • /v1/traces — стандартный путь OTLP/HTTP;
  • /otlp/v1/traces — дополнительный поддерживаемый путь.

OTLP/gRPC и OTLP/JSON не поддерживаются.

Требования

  • Ключ-АСТРОМ 1.300+.
  • АктивныйШлюз с включённым EEC и средой Python не ниже 3.10 в составе EEC. Локальное выполнение на ЕдиномАгенте не поддерживается; зависимости поставляются в пакете расширения.
  • На выбранном сервере EEC должен быть свободен TCP-порт для приёма OTLP-запросов.
  • Приложения или OpenTelemetry Collector должны иметь сетевой доступ к серверу EEC.
  • Экспорт трассировок должен использовать протокол http/protobuf.
  • Для пересылки трассировок в кластер необходим токен с разрешением openTelemetryTrace.ingest.
  • Межсетевой экран должен разрешать подключения к настроенному порту шлюза.

Стандартный порт OTLP/HTTP — 4318. Если он уже используется другим сервисом, укажите свободный порт.

Входящий приёмник использует HTTP, а Bearer-токен сам по себе не шифрует соединение. Ограничьте доступ к порту доверенными отправителями; если требуется шифрование на входе, используйте защищённый канал или TLS на обратном прокси. Параметр проверки TLS в расширении относится к исходящей пересылке, а не к приёмнику.

Установка расширения

  1. Скачайте пакет расширения.
  2. В интерфейсе Ключ-АСТРОМ откройте раздел управления расширениями.
  3. Загрузите архив расширения.
  4. Откройте расширение ru.ruscomtech.otel-span-metrics-gateway.
  5. Добавьте конфигурацию мониторинга.
  6. Выберите группу АктивныхШлюзов с EEC, на которой должен работать OTLP-шлюз.
  7. Добавьте конечную точку шлюза и заполните параметры.
  8. Сохраните и активируйте конфигурацию.

Для одной конфигурации можно создать только одну конечную точку шлюза.

Настройка шлюза

  • Адрес прослушивания (listen_address) — IP-адрес интерфейса узла выполнения. По умолчанию 0.0.0.0, то есть все интерфейсы.
  • Порт прослушивания (listen_port) — TCP-порт OTLP/HTTP, по умолчанию 4318.
  • Пересылать трейсы в кластер (forward_traces) — по умолчанию включено. При выключении создаются только метрики.
  • URL для OTLP-трейсов кластера (forward_url) — полный адрес OTLP API с путём /v1/traces; обязателен при включённой пересылке.
  • API-токен кластера (forward_api_token) — секретное поле для токена с разрешением openTelemetryTrace.ingest, если целевой endpoint требует аутентификации.
  • Проверять TLS-сертификат кластера (verify_forward_tls) — по умолчанию включено. Не отключайте проверку в рабочей среде.
  • Bearer-токен приёмника (receiver_bearer_token) — необязательный секрет для входящих запросов. Отправители должны передавать Authorization: Bearer <token>.
  • Атрибуты спана для dimensions (dimension_attributes) — список ключей через запятую, по умолчанию peer.service,net.peer.ip.
  • Числовые атрибуты спана (numeric_attributes) — до 20 ключей через запятую для агрегации числовых значений. По умолчанию поле пустое и сбор отключён.
  • Максимальное количество временных рядов (max_series) — предел уникальных комбинаций измерений за интервал отправки, по умолчанию 2000, диапазон 100–20000.
  • Максимальный размер распакованного OTLP-запроса (max_request_mib) — по умолчанию 8 MiB, диапазон 1–64 MiB.
  • Рабочие потоки приёмника (worker_threads) — число параллельно обрабатываемых запросов, по умолчанию 4.
  • Размер очереди запросов (request_queue_size) — число запросов в ожидании свободного потока, по умолчанию 16.
  • Интервал отправки метрик (flush_interval_seconds) — по умолчанию 15 секунд, диапазон 5–300.
  • Тайм-аут пересылки трейсов (forward_timeout_seconds) — ожидание ответа OTLP API, по умолчанию 10 секунд; используется только при включённой пересылке.

Пример URL для пересылки трассировок через АктивныйШлюз окружения:

https://activegate.example.local:9999/e/ENVIRONMENT_ID/api/v2/otlp/v1/traces

Если пересылка трассировок отключена, URL и API-токен заполнять не требуется.

Настройка отправителя OTLP

Пример переменных окружения приложения с OpenTelemetry SDK:

OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://eec.example.local:4318/v1/traces
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf

Если в конфигурации шлюза задан Bearer-токен:

OTEL_EXPORTER_OTLP_TRACES_HEADERS="Authorization=Bearer <token>"

Значение токена на стороне отправителя должно совпадать со значением поля «Bearer-токен приёмника».

Пример конфигурации OpenTelemetry Collector

OpenTelemetry Collector может принимать трассировки от приложений и передавать их в шлюз, работающий на сервере EEC.

Пример файла config.yaml:

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

processors:
  batch:

exporters:
  otlp_http/span_metrics_gateway:
    traces_endpoint: http://eec.example.local:4318/v1/traces
    encoding: proto
    compression: gzip
    headers:
      Authorization: "Bearer <receiver-token>"
    timeout: 10s

service:
  pipelines:
    traces:
      receivers:
        - otlp
      processors:
        - batch
      exporters:
        - otlp_http/span_metrics_gateway

Замените:

  • eec.example.local — адресом сервера EEC, на котором работает расширение;
  • 4318 — портом, указанным в конфигурации шлюза;
  • <receiver-token> — значением поля «Bearer-токен приёмника».

Если Bearer-токен в расширении не настроен, удалите из конфигурации блок:

headers:
  Authorization: "Bearer <receiver-token>"

В старых версиях OpenTelemetry Collector компонент экспортёра может называться otlphttp:

exporters:
  otlphttp/span_metrics_gateway:
    traces_endpoint: http://eec.example.local:4318/v1/traces

В traces_endpoint указывается полный путь /v1/traces; в отличие от общего endpoint, этот параметр не добавляет путь автоматически. См. документацию OTLP HTTP exporter.

После изменения конфигурации перезапустите OpenTelemetry Collector и проверьте появление метрики otel.span.gateway.requests.

Важно: расширение добавляет в измерения только атрибуты спанов. Resource attributes, например service.name, автоматически не используются.

Если необходимо группировать метрики по имени сервиса, в OpenTelemetry Collector Contrib можно скопировать service.name из resource attributes в атрибут спана:

processors:
  transform/span_dimensions:
    error_mode: ignore
    trace_statements:
      - context: span
        statements:
          - set(attributes["service.name"], resource.attributes["service.name"])
            where resource.attributes["service.name"] != nil

Затем добавьте процессор в трассировочный pipeline:

service:
  pipelines:
    traces:
      receivers:
        - otlp
      processors:
        - transform/span_dimensions
        - batch
      exporters:
        - otlp_http/span_metrics_gateway

В конфигурации расширения добавьте service.name в поле «Атрибуты спана для dimensions».

Режимы работы

Метрики и трассировки

При включённой пересылке шлюз:

  1. принимает OTLP-запрос;
  2. декодирует спаны;
  3. пересылает исходный запрос в OTLP API;
  4. после успешной пересылки учитывает спаны в метриках.

Если кластер возвращает ошибку или недоступен, увеличивается метрика otel.span.gateway.forward_errors.

Только метрики

При выключенной пересылке шлюз создаёт метрики из принятых спанов, но не отправляет исходные трассировки в кластер.

Настройка измерений

Измерение span.name добавляется автоматически.

В поле «Атрибуты спана для dimensions» можно:

  • перечислить необходимые атрибуты через запятую;
  • указать * для автоматического добавления допустимых атрибутов спана;
  • оставить поле пустым, если дополнительные измерения не нужны.

Пример:

peer.service,net.peer.ip,http.request.method

Resource attributes в измерения метрик не добавляются.

Использование * может значительно увеличить кардинальность метрик. Для рабочих сред рекомендуется перечислять только необходимые атрибуты.

Если количество уникальных комбинаций измерений превышает установленный предел, оставшиеся спаны объединяются в ряд:

otel.metric.overflow=true

Количество таких спанов отображается в метрике otel.span.gateway.overflow_spans.

Сбор числовых атрибутов

В поле Числовые атрибуты спана (numeric_attributes) перечислите до 20 точных ключей, например:

order.amount,items.count

Для каждого ключа расширение отправляет otel.span.attribute.value с измерением attribute.key и агрегатами минимума, максимума, суммы и количества значений за интервал. Значения сохраняют исходный масштаб: автоматического пересчёта единиц измерения нет.

  • Поддерживаются числа и строки, которые можно преобразовать в конечное число. Логические значения не считаются числами.
  • Подстановка * в этом поле не поддерживается: ключи задаются явно.
  • Выбранные числовые ключи исключаются из обычных измерений, в том числе при dimension_attributes=*. Это предотвращает создание отдельного ряда для каждого числового значения.
  • Resource attributes автоматически не читаются. При необходимости предварительно скопируйте их в атрибуты спана на стороне Collector.
  • Некорректные значения, NaN, бесконечность и значения, вызывающие переполнение суммы, пропускаются и учитываются в otel.span.gateway.invalid_attribute_values по attribute.key.

Собираемые метрики

  • otel.span.calls — количество успешно обработанных спанов с разделением по имени спана и настроенным атрибутам.
  • otel.span.duration — продолжительность спанов в миллисекундах.
  • otel.span.attribute.value — минимум, максимум, сумма и количество выбранных числовых атрибутов; ключ атрибута указан в attribute.key.
  • otel.span.gateway.invalid_attribute_values — количество пропущенных некорректных числовых значений по attribute.key.
  • otel.span.gateway.requests — количество успешно обработанных OTLP-запросов.
  • otel.span.gateway.spans — количество спанов в обработанных запросах.
  • otel.span.gateway.rejected_requests — количество отклонённых запросов с причиной в reason.
  • otel.span.gateway.forward_errors — количество ошибок пересылки трассировок.
  • otel.span.gateway.active_series — количество активных временных рядов за интервал агрегации.
  • otel.span.gateway.overflow_spans — количество спанов в overflow-ряде из-за ограничения кардинальности.

Все метрики входят в набор функций default.

Проверка работы

Проверьте состояние HTTP-приёмника:

curl http://eec.example.local:4318/healthz

Исправный шлюз возвращает:

ok

После отправки трассировок проверьте:

  • состояние конфигурации расширения;
  • появление метрики otel.span.gateway.requests;
  • появление метрик otel.span.calls и otel.span.duration;
  • отсутствие постоянного роста otel.span.gateway.rejected_requests;
  • отсутствие ошибок otel.span.gateway.forward_errors;
  • значение otel.span.gateway.overflow_spans.

Если настроен numeric_attributes, дополнительно проверьте otel.span.attribute.value по нужному attribute.key и отсутствие роста otel.span.gateway.invalid_attribute_values.

Код ответа 401 указывает на ошибку Bearer-токена, 413 — на превышение размера запроса, 415 — на неподдерживаемый формат, а 503 — на переполнение очереди шлюза.

История изменений

Версия 0.1.20

  • Добавлен параметр numeric_attributes для сбора до 20 выбранных числовых атрибутов спана.
  • Добавлена метрика otel.span.attribute.value с агрегатами минимума, максимума, суммы и количества значений и измерением attribute.key.
  • Числовые атрибуты исключены из измерений, включая режим *.
  • Добавлена метрика otel.span.gateway.invalid_attribute_values для пропущенных некорректных значений и переполнения суммы.

Версия 0.1.19

  • Используется идентификатор ru.ruscomtech.otel-span-metrics-gateway.
  • Добавлен шлюз для преобразования OTLP-спанов в метрики количества вызовов и продолжительности.
  • Поддержаны режимы «метрики и трассировки» и «только метрики».
  • Добавлены ограничения размера запросов, очереди обработки и количества временных рядов.