Skip to content

ОтелРесурсы ​

Модуль-фабрика ресурсов ОтелРесурс.

Описание ​

Аналог статических методов Java SDK Resource.empty() и Resource.getDefault(), а также ресурсов детекторов и окружения, которые в Java собирает autoconfigure. Каждая функция возвращает новый ресурс: изменение одного не затрагивает другие.

Автоконфигурация (ОтелАвтоконфигурация) собирает ресурс SDK как ПоУмолчанию(), поверх — ИзДетекторов() с детекторами по умолчанию и переданными в Инициализировать детекторами, затем ИзОкружения(), поверх — атрибуты из менеджера параметров. Файловая конфигурация берёт ПоУмолчанию() и ИзДетекторов(), а переменные окружения, кроме подставленных в файл, не читает.

Функции ​

Пустой ​

Возвращает пустой ресурс. Аналог Resource.empty().

Возвращает: ОтелРесурс — ресурс без атрибутов и адреса схемы


ПоУмолчанию ​

Возвращает ресурс с атрибутами, которые SDK обязан заполнять сам (спецификация Resource SDK, SDK-provided resource attributes). Аналог Resource.getDefault(). Детекторов и переменных окружения в нём нет. Этот ресурс получают провайдеры трассировки, логирования и метрик и читатели метрик, которым ресурс не передан явно.

АтрибутЗначение
service.nameunknown_service:oscript
telemetry.sdk.nameoscript-opentelemetry
telemetry.sdk.languageoscript
telemetry.sdk.versionверсия пакета

Возвращает: ОтелРесурс — ресурс по умолчанию без адреса схемы


ДетекторыПоУмолчанию ​

Возвращает новый массив детекторов по умолчанию, в таком порядке:

Массив можно изменить и передать в ИзДетекторов: убрать детектор, добавить свой. Каждый вызов возвращает новый массив и новые детекторы.

Возвращает: Массив из ИнтерфейсДетекторРесурса


ИзДетекторов ​

Возвращает слияние ресурсов переданных детекторов в порядке коллекции: атрибут детектора, идущего позже, важнее. Без параметра — слияние детекторов ДетекторыПоУмолчанию().

Переданные детекторы заменяют детекторы по умолчанию, а не дополняют их. Каждый детектор должен объявлять &Реализует("ИнтерфейсДетекторРесурса") и реализовывать ИнтерфейсДетекторРесурса, иначе выбрасывается исключение: это ошибка настройки, и SDK по принципам обработки ошибок спецификации может завершиться с ошибкой при инициализации. Исключение в Обнаружить() или результат не ОтелРесурс не прерывают сбор: ошибка пишется в лог oscript.lib.opentelemetry.resource, детектор пропускается.

ПараметрТипОписание
ДетекторыМассив, ФиксированныйМассив из ИнтерфейсДетекторРесурсаДетекторы ресурса. Необязательный, по умолчанию — детекторы по умолчанию

Возвращает: ОтелРесурс — атрибуты детекторов; у детекторов по умолчанию адрес схемы https://opentelemetry.io/schemas/1.44.0


ИзОкружения ​

Возвращает ресурс из переменных окружения: атрибуты OTEL_RESOURCE_ATTRIBUTES в формате ключ=значение через запятую, с percent-декодированием, и имя сервиса OTEL_SERVICE_NAME. Имя из OTEL_SERVICE_NAME важнее service.name из OTEL_RESOURCE_ATTRIBUTES.

Если в OTEL_RESOURCE_ATTRIBUTES есть ошибка — элемент не в формате ключ=значение, пустой ключ или некорректный percent-encoding, — значение отбрасывается целиком, а ошибка пишется в лог oscript.lib.opentelemetry.resource. Пустые элементы (лишние запятые) пропускаются.

Возвращает: ОтелРесурс — атрибуты окружения без адреса схемы; без переменных — пустой ресурс

Пример ​

bsl
// Ресурс для провайдеров, собранных вручную: как у автоконфигурации
Ресурс = ОтелРесурсы.ПоУмолчанию()
    .Слить(ОтелРесурсы.ИзДетекторов())
    .Слить(ОтелРесурсы.ИзОкружения());

Провайдер = Новый ОтелПровайдерТрассировки(Ресурс);
bsl
// Детекторы по умолчанию без детектора хоста: host.name и os.type не попадут в ресурс
Детекторы = ОтелРесурсы.ДетекторыПоУмолчанию();
Детекторы.Удалить(0);
Ресурс = ОтелРесурсы.ПоУмолчанию()
    .Слить(ОтелРесурсы.ИзДетекторов(Детекторы))
    .Слить(ОтелРесурсы.ИзОкружения());

Свой детектор — в примере ИнтерфейсДетекторРесурса.

См. также ​