Skip to content

ИнтерфейсДетекторРесурса ​

Интерфейс детектора ресурса (Resource Detector): контракт встроенных и своих детекторов.

Описание ​

Детектор определяет атрибуты среды, в которой работает приложение, и возвращает их ресурсом ОтелРесурс. Встроенные детекторы — хоста, процесса, процессора, контейнера и экземпляра сервиса — сливает ОтелРесурсы.ИзДетекторов. Свой детектор пишут для атрибутов, которых нет у встроенных: например, региона облака или версии приложения из файла сборки. Аналог Java SDK: ResourceProvider.

Интерфейс — класс ИнтерфейсДетекторРесурса с аннотацией &Интерфейс библиотеки extends. Детектор объявляет реализацию аннотацией &Реализует("ИнтерфейсДетекторРесурса") у конструктора ПриСозданииОбъекта. Аннотация обязательна: ОтелРесурсы.ИзДетекторов перед вызовом Обнаружить() проверяет каждый детектор методом РеализуетИнтерфейс объекта ВалидаторРеализации библиотеки extends и выбрасывает исключение, если детектор не объявляет интерфейс или не реализует его методы.

Настройки детектору передают при создании, параметрами конструктора: Обнаружить() параметров не принимает.

Методы ​

Обнаружить ​

Возвращает ресурс, обнаруженный детектором. Детектор, которому нечего сообщить, возвращает пустой ресурс. Адрес схемы ресурса — пустой или версия семантических соглашений атрибутов детектора, например https://opentelemetry.io/schemas/1.44.0, как у встроенных детекторов. При слиянии ресурсов с разными непустыми адресами схемы адрес схемы результата пустой, а ошибка пишется в лог.

Исключение в Обнаружить() или результат не ОтелРесурс не прерывают сбор ресурса: ОтелРесурсы.ИзДетекторов пишет ошибку в лог oscript.lib.opentelemetry.resource и пропускает детектор. Так требуют принципы обработки ошибок спецификации: ошибка обнаружения — ошибка, но SDK не должен останавливать приложение из-за телеметрии.

Возвращает: ОтелРесурс — обнаруженный ресурс

Пример ​

Детектор региона приложения — класс приложения в файле ДетекторРегиона.os:

bsl
Перем Регион;

Функция Обнаружить() Экспорт
    Атрибуты = Новый Соответствие();
    Атрибуты.Вставить("cloud.region", Регион);
    Возврат Новый ОтелРесурс(Атрибуты);
КонецФункции

&Реализует("ИнтерфейсДетекторРесурса")
Процедура ПриСозданииОбъекта(НовыйРегион)
    Регион = НовыйРегион;
КонецПроцедуры

Детектор в автоконфигурации — сливается после встроенных детекторов, атрибуты из конфигурации его перекрывают:

bsl
#Использовать opentelemetry

ПодключитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "ДетекторРегиона.os"), "ДетекторРегиона");

Детекторы = Новый Массив;
Детекторы.Добавить(Новый ДетекторРегиона("eu-central-1"));

Сдк = ОтелАвтоконфигурация.Инициализировать(, Детекторы);

Ресурс для провайдеров, собранных вручную, — ресурс по умолчанию, встроенные детекторы и свой детектор:

bsl
#Использовать opentelemetry

ПодключитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "ДетекторРегиона.os"), "ДетекторРегиона");

Детекторы = Новый Массив;
Детекторы.Добавить(Новый ДетекторРегиона("eu-central-1"));

Ресурс = ОтелРесурсы.ПоУмолчанию()
    .Слить(ОтелРесурсы.ИзДетекторов())
    .Слить(ОтелРесурсы.ИзДетекторов(Детекторы));

Провайдер = Новый ОтелПровайдерТрассировки(Ресурс);

См. также ​