ИнтерфейсДетекторРесурса
Интерфейс детектора ресурса (Resource Detector): контракт встроенных и своих детекторов.
Описание
Детектор определяет атрибуты среды, в которой работает приложение, и возвращает их ресурсом ОтелРесурс. Встроенные детекторы — хоста, процесса, процессора, контейнера и экземпляра сервиса — сливает ОтелРесурсы.ИзДетекторов. Свой детектор пишут для атрибутов, которых нет у встроенных: например, региона облака или версии приложения из файла сборки. Аналог Java SDK: ResourceProvider.
Интерфейс — класс ИнтерфейсДетекторРесурса с аннотацией &Интерфейс библиотеки extends. Детектор объявляет реализацию аннотацией &Реализует("ИнтерфейсДетекторРесурса") у конструктора ПриСозданииОбъекта. Аннотация обязательна: ОтелРесурсы.ИзДетекторов перед вызовом Обнаружить() проверяет каждый детектор методом РеализуетИнтерфейс объекта ВалидаторРеализации библиотеки extends и выбрасывает исключение, если детектор не объявляет интерфейс или не реализует его методы.
Настройки детектору передают при создании, параметрами конструктора: Обнаружить() параметров не принимает.
Методы
Обнаружить
Возвращает ресурс, обнаруженный детектором. Детектор, которому нечего сообщить, возвращает пустой ресурс. Адрес схемы ресурса — пустой или версия семантических соглашений атрибутов детектора, например https://opentelemetry.io/schemas/1.44.0, как у встроенных детекторов. При слиянии ресурсов с разными непустыми адресами схемы адрес схемы результата пустой, а ошибка пишется в лог.
Исключение в Обнаружить() или результат не ОтелРесурс не прерывают сбор ресурса: ОтелРесурсы.ИзДетекторов пишет ошибку в лог oscript.lib.opentelemetry.resource и пропускает детектор. Так требуют принципы обработки ошибок спецификации: ошибка обнаружения — ошибка, но SDK не должен останавливать приложение из-за телеметрии.
Возвращает: ОтелРесурс — обнаруженный ресурс
Пример
Детектор региона приложения — класс приложения в файле ДетекторРегиона.os:
Перем Регион;
Функция Обнаружить() Экспорт
Атрибуты = Новый Соответствие();
Атрибуты.Вставить("cloud.region", Регион);
Возврат Новый ОтелРесурс(Атрибуты);
КонецФункции
&Реализует("ИнтерфейсДетекторРесурса")
Процедура ПриСозданииОбъекта(НовыйРегион)
Регион = НовыйРегион;
КонецПроцедурыДетектор в автоконфигурации — сливается после встроенных детекторов, атрибуты из конфигурации его перекрывают:
#Использовать opentelemetry
ПодключитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "ДетекторРегиона.os"), "ДетекторРегиона");
Детекторы = Новый Массив;
Детекторы.Добавить(Новый ДетекторРегиона("eu-central-1"));
Сдк = ОтелАвтоконфигурация.Инициализировать(, Детекторы);Ресурс для провайдеров, собранных вручную, — ресурс по умолчанию, встроенные детекторы и свой детектор:
#Использовать opentelemetry
ПодключитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "ДетекторРегиона.os"), "ДетекторРегиона");
Детекторы = Новый Массив;
Детекторы.Добавить(Новый ДетекторРегиона("eu-central-1"));
Ресурс = ОтелРесурсы.ПоУмолчанию()
.Слить(ОтелРесурсы.ИзДетекторов())
.Слить(ОтелРесурсы.ИзДетекторов(Детекторы));
Провайдер = Новый ОтелПровайдерТрассировки(Ресурс);