ОтелРесурсы
Модуль-фабрика ресурсов ОтелРесурс.
Описание
Аналог статических методов Java SDK Resource.empty() и Resource.getDefault(), а также ресурсов детекторов и окружения, которые в Java собирает autoconfigure. Каждая функция возвращает новый ресурс: изменение одного не затрагивает другие.
Автоконфигурация (ОтелАвтоконфигурация) собирает ресурс SDK как ПоУмолчанию(), поверх — ИзДетекторов() с детекторами по умолчанию и переданными в Инициализировать детекторами, затем ИзОкружения(), поверх — атрибуты из менеджера параметров. Файловая конфигурация берёт ПоУмолчанию() и ИзДетекторов(), а переменные окружения, кроме подставленных в файл, не читает.
Функции
Пустой
Возвращает пустой ресурс. Аналог Resource.empty().
Возвращает: ОтелРесурс — ресурс без атрибутов и адреса схемы
ПоУмолчанию
Возвращает ресурс с атрибутами, которые SDK обязан заполнять сам (спецификация Resource SDK, SDK-provided resource attributes). Аналог Resource.getDefault(). Детекторов и переменных окружения в нём нет. Этот ресурс получают провайдеры трассировки, логирования и метрик и читатели метрик, которым ресурс не передан явно.
| Атрибут | Значение |
|---|---|
service.name | unknown_service:oscript |
telemetry.sdk.name | oscript-opentelemetry |
telemetry.sdk.language | oscript |
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. Пустые элементы (лишние запятые) пропускаются.
Возвращает: ОтелРесурс — атрибуты окружения без адреса схемы; без переменных — пустой ресурс
Пример
// Ресурс для провайдеров, собранных вручную: как у автоконфигурации
Ресурс = ОтелРесурсы.ПоУмолчанию()
.Слить(ОтелРесурсы.ИзДетекторов())
.Слить(ОтелРесурсы.ИзОкружения());
Провайдер = Новый ОтелПровайдерТрассировки(Ресурс);// Детекторы по умолчанию без детектора хоста: host.name и os.type не попадут в ресурс
Детекторы = ОтелРесурсы.ДетекторыПоУмолчанию();
Детекторы.Удалить(0);
Ресурс = ОтелРесурсы.ПоУмолчанию()
.Слить(ОтелРесурсы.ИзДетекторов(Детекторы))
.Слить(ОтелРесурсы.ИзОкружения());Свой детектор — в примере ИнтерфейсДетекторРесурса.
